| From foo@baz Wed May 28 21:03:54 PDT 2014 |
| From: Oliver Hartkopp <socketcan@hartkopp.net> |
| Date: Sat, 26 Apr 2014 21:18:32 +0200 |
| Subject: slip: fix spinlock variant |
| |
| From: Oliver Hartkopp <socketcan@hartkopp.net> |
| |
| [ Upstream commit ddcde142bed44490e338ed1124cb149976d355bb ] |
| |
| With commit cc9fa74e2a ("slip/slcan: added locking in wakeup function") a |
| formerly missing locking was added to slip.c and slcan.c by Andre Naujoks. |
| |
| Alexander Stein contributed the fix 367525c8c2 ("can: slcan: Fix spinlock |
| variant") as the kernel lock debugging advised to use spin_lock_bh() instead |
| of just using spin_lock(). |
| |
| This fix has to be applied to the same code section in slip.c for the same |
| reason too. |
| |
| Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/slip/slip.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/net/slip/slip.c |
| +++ b/drivers/net/slip/slip.c |
| @@ -429,13 +429,13 @@ static void slip_write_wakeup(struct tty |
| if (!sl || sl->magic != SLIP_MAGIC || !netif_running(sl->dev)) |
| return; |
| |
| - spin_lock(&sl->lock); |
| + spin_lock_bh(&sl->lock); |
| if (sl->xleft <= 0) { |
| /* Now serial buffer is almost free & we can start |
| * transmission of another packet */ |
| sl->dev->stats.tx_packets++; |
| clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags); |
| - spin_unlock(&sl->lock); |
| + spin_unlock_bh(&sl->lock); |
| sl_unlock(sl); |
| return; |
| } |
| @@ -443,7 +443,7 @@ static void slip_write_wakeup(struct tty |
| actual = tty->ops->write(tty, sl->xhead, sl->xleft); |
| sl->xleft -= actual; |
| sl->xhead += actual; |
| - spin_unlock(&sl->lock); |
| + spin_unlock_bh(&sl->lock); |
| } |
| |
| static void sl_tx_timeout(struct net_device *dev) |