From 6d06b3427d65884d0f04464d06177bb75a0dc40d Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Wed, 19 May 2004 02:42:48 -0700 Subject: [PATCH] [PATCH] sir_dev locking fix From: Martin Diehl There was a spin_unlock missing in the raw mode tx-completion path. Probably it slipped through because the raw mode stuff is never reached with my Actisys hardware. --- drivers/net/irda/sir_dev.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/net/irda/sir_dev.c b/drivers/net/irda/sir_dev.c index 532adf14a6431..2d7f183d76614 100644 --- a/drivers/net/irda/sir_dev.c +++ b/drivers/net/irda/sir_dev.c @@ -163,10 +163,8 @@ void sirdev_write_complete(struct sir_dev *dev) } dev->tx_buff.len = 0; } - if (dev->tx_buff.len > 0) { - spin_unlock_irqrestore(&dev->tx_lock, flags); - return; - } + if (dev->tx_buff.len > 0) + goto done; /* more data to send later */ } if (unlikely(dev->raw_tx != 0)) { @@ -179,7 +177,7 @@ void sirdev_write_complete(struct sir_dev *dev) IRDA_DEBUG(3, "%s(), raw-tx done\n", __FUNCTION__); dev->raw_tx = 0; - return; + goto done; /* no post-frame handling in raw mode */ } /* we have finished now sending this skb. @@ -224,6 +222,7 @@ void sirdev_write_complete(struct sir_dev *dev) netif_wake_queue(dev->netdev); } +done: spin_unlock_irqrestore(&dev->tx_lock, flags); } -- 2.53.0