summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChas Williams <chas@cmf.nrl.navy.mil>2006-09-19 21:59:11 +0200
committerDavid S. Miller <davem@davemloft.net>2006-09-19 21:59:11 +0200
commit7f81dc0097095f19d25e14c043edfdebb9e01295 (patch)
treef3729d9ac9bf3c5ffcb7505eb41b4244cca67e50
parentRevert mmiocfg heuristics and blacklist changes (diff)
downloadlinux-7f81dc0097095f19d25e14c043edfdebb9e01295.tar.xz
linux-7f81dc0097095f19d25e14c043edfdebb9e01295.zip
[ATM]: [he] don't hold the device lock when upcalling
This can create a deadlock/lock ordering problem with other layers that want to use the transmit (or other) path of the card at that time. Signed-off-by: Chas Williams <chas@cmf.nrl.navy.mil> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/atm/he.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/atm/he.c b/drivers/atm/he.c
index dd96123a2b7f..ffcb9fd31c38 100644
--- a/drivers/atm/he.c
+++ b/drivers/atm/he.c
@@ -1928,7 +1928,9 @@ he_service_rbrq(struct he_dev *he_dev, int group)
#ifdef notdef
ATM_SKB(skb)->vcc = vcc;
#endif
+ spin_unlock(&he_dev->global_lock);
vcc->push(vcc, skb);
+ spin_lock(&he_dev->global_lock);
atomic_inc(&vcc->stats->rx);