aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn
diff options
context:
space:
mode:
authorTilman Schmidt <tilman@imap.cc>2010-09-30 09:34:30 -0400
committerDavid S. Miller <davem@davemloft.net>2010-10-01 03:33:32 -0400
commitb33ffa5cbf52ee751bb8068218ebb3c742c5a515 (patch)
treeb97dc8afef26b82c8064cf1eff63710d028434a2 /drivers/isdn
parentc7ebfdaca0b89fe9d846e93b249303313612d0e3 (diff)
isdn/gigaset: bas_gigaset locking fix
Unlock cs->lock before calling error_hangup() which is marked "cs->lock must not be held". Signed-off-by: Tilman Schmidt <tilman@imap.cc> CC: stable <stable@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/isdn')
-rw-r--r--drivers/isdn/gigaset/bas-gigaset.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/isdn/gigaset/bas-gigaset.c b/drivers/isdn/gigaset/bas-gigaset.c
index 707d9c94cf9e..e143050e1b5c 100644
--- a/drivers/isdn/gigaset/bas-gigaset.c
+++ b/drivers/isdn/gigaset/bas-gigaset.c
@@ -1598,13 +1598,13 @@ static int gigaset_init_bchannel(struct bc_state *bcs)
1598 1598
1599 ret = starturbs(bcs); 1599 ret = starturbs(bcs);
1600 if (ret < 0) { 1600 if (ret < 0) {
1601 spin_unlock_irqrestore(&cs->lock, flags);
1601 dev_err(cs->dev, 1602 dev_err(cs->dev,
1602 "could not start isochronous I/O for channel B%d: %s\n", 1603 "could not start isochronous I/O for channel B%d: %s\n",
1603 bcs->channel + 1, 1604 bcs->channel + 1,
1604 ret == -EFAULT ? "null URB" : get_usb_rcmsg(ret)); 1605 ret == -EFAULT ? "null URB" : get_usb_rcmsg(ret));
1605 if (ret != -ENODEV) 1606 if (ret != -ENODEV)
1606 error_hangup(bcs); 1607 error_hangup(bcs);
1607 spin_unlock_irqrestore(&cs->lock, flags);
1608 return ret; 1608 return ret;
1609 } 1609 }
1610 1610
@@ -1614,11 +1614,11 @@ static int gigaset_init_bchannel(struct bc_state *bcs)
1614 dev_err(cs->dev, "could not open channel B%d\n", 1614 dev_err(cs->dev, "could not open channel B%d\n",
1615 bcs->channel + 1); 1615 bcs->channel + 1);
1616 stopurbs(bcs->hw.bas); 1616 stopurbs(bcs->hw.bas);
1617 if (ret != -ENODEV)
1618 error_hangup(bcs);
1619 } 1617 }
1620 1618
1621 spin_unlock_irqrestore(&cs->lock, flags); 1619 spin_unlock_irqrestore(&cs->lock, flags);
1620 if (ret < 0 && ret != -ENODEV)
1621 error_hangup(bcs);
1622 return ret; 1622 return ret;
1623} 1623}
1624 1624