diff options
author | Chas Williams <chas@cmf.nrl.navy.mil> | 2006-09-19 23:59:11 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2006-09-19 23:59:11 +0400 |
commit | 7f81dc0097095f19d25e14c043edfdebb9e01295 (patch) | |
tree | f3729d9ac9bf3c5ffcb7505eb41b4244cca67e50 | |
parent | 79e453d49bd49ba1b576f89310cc565c9e4ca379 (diff) | |
download | linux-7f81dc0097095f19d25e14c043edfdebb9e01295.tar.xz |
[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.c | 2 |
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); |