From 56c044081e5438a2dba39bb22837f7c17b46b732 Mon Sep 17 00:00:00 2001 From: Peter Hurley Date: Mon, 28 Jan 2013 22:34:35 -0500 Subject: [PATCH] --- yaml --- r: 354281 b: refs/heads/master c: de321a14da65a534da89a80dde949d0c6ff6316f h: refs/heads/master i: 354279: d6fa0057ed35c24198d0e621997ad09bd883db79 v: v3 --- [refs] | 2 +- trunk/drivers/staging/fwserial/fwserial.c | 21 ++++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index b8b1fe4959ee..5bacabb27ef6 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2b86216ba1d059b2609532ded9400f905013b376 +refs/heads/master: de321a14da65a534da89a80dde949d0c6ff6316f diff --git a/trunk/drivers/staging/fwserial/fwserial.c b/trunk/drivers/staging/fwserial/fwserial.c index 59e90e666d7b..8db4b41d4f43 100644 --- a/trunk/drivers/staging/fwserial/fwserial.c +++ b/trunk/drivers/staging/fwserial/fwserial.c @@ -1783,10 +1783,11 @@ static struct fwtty_port *fwserial_find_port(struct fwtty_peer *peer) return NULL; } -static void fwserial_release_port(struct fwtty_port *port) +static void fwserial_release_port(struct fwtty_port *port, bool reset) { /* drop carrier (and all other line status) */ - fwtty_update_port_status(port, 0); + if (reset) + fwtty_update_port_status(port, 0); spin_lock_bh(&port->lock); @@ -1816,7 +1817,7 @@ static void fwserial_plug_timeout(unsigned long data) spin_unlock_bh(&peer->lock); if (port) - fwserial_release_port(port); + fwserial_release_port(port, false); } /** @@ -1879,7 +1880,7 @@ static int fwserial_connect_peer(struct fwtty_peer *peer) peer_revert_state(peer); release_port: spin_unlock_bh(&peer->lock); - fwserial_release_port(port); + fwserial_release_port(port, false); free_pkt: kfree(pkt); return err; @@ -2157,7 +2158,7 @@ static void fwserial_remove_peer(struct fwtty_peer *peer) spin_unlock_bh(&peer->lock); if (port) - fwserial_release_port(port); + fwserial_release_port(port, true); synchronize_rcu(); kfree(peer); @@ -2617,7 +2618,7 @@ static void fwserial_handle_plug_req(struct work_struct *work) spin_unlock_bh(&peer->lock); if (port) - fwserial_release_port(port); + fwserial_release_port(port, false); rcode = fwserial_send_mgmt_sync(peer, pkt); @@ -2639,7 +2640,7 @@ static void fwserial_handle_plug_req(struct work_struct *work) cleanup: spin_unlock_bh(&peer->lock); if (port) - fwserial_release_port(port); + fwserial_release_port(port, false); kfree(pkt); return; } @@ -2691,7 +2692,7 @@ static void fwserial_handle_unplug_req(struct work_struct *work) cleanup: spin_unlock_bh(&peer->lock); if (port) - fwserial_release_port(port); + fwserial_release_port(port, true); kfree(pkt); return; } @@ -2702,6 +2703,7 @@ static int fwserial_parse_mgmt_write(struct fwtty_peer *peer, size_t len) { struct fwtty_port *port = NULL; + bool reset = false; int rcode; if (addr != fwserial_mgmt_addr_handler.offset || len < sizeof(pkt->hdr)) @@ -2777,6 +2779,7 @@ static int fwserial_parse_mgmt_write(struct fwtty_peer *peer, if (be16_to_cpu(pkt->hdr.code) & FWSC_RSP_NACK) fwtty_notice(&peer->unit, "NACK unplug?"); port = peer_revert_state(peer); + reset = true; } break; @@ -2788,7 +2791,7 @@ static int fwserial_parse_mgmt_write(struct fwtty_peer *peer, spin_unlock_bh(&peer->lock); if (port) - fwserial_release_port(port); + fwserial_release_port(port, reset); return rcode; }