diff options
author | Chas Williams <chas@cmf.nrl.navy.mil> | 2006-09-19 15:59:11 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2006-09-19 15:59:11 -0400 |
commit | 7f81dc0097095f19d25e14c043edfdebb9e01295 (patch) | |
tree | f3729d9ac9bf3c5ffcb7505eb41b4244cca67e50 | |
parent | 79e453d49bd49ba1b576f89310cc565c9e4ca379 (diff) |
[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) | |||
1928 | #ifdef notdef | 1928 | #ifdef notdef |
1929 | ATM_SKB(skb)->vcc = vcc; | 1929 | ATM_SKB(skb)->vcc = vcc; |
1930 | #endif | 1930 | #endif |
1931 | spin_unlock(&he_dev->global_lock); | ||
1931 | vcc->push(vcc, skb); | 1932 | vcc->push(vcc, skb); |
1933 | spin_lock(&he_dev->global_lock); | ||
1932 | 1934 | ||
1933 | atomic_inc(&vcc->stats->rx); | 1935 | atomic_inc(&vcc->stats->rx); |
1934 | 1936 | ||