[ATM]: [he] don't hold the device lock when upcalling
authorChas Williams <chas@cmf.nrl.navy.mil>
Tue, 19 Sep 2006 19:59:11 +0000 (12:59 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 19 Sep 2006 19:59:11 +0000 (12:59 -0700)
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>
drivers/atm/he.c

index dd96123a2b7f78e52c4bba06611e7a5e8f97fcf8..ffcb9fd31c38fbdd7a1efbb2b52eb6f7e5d2c116 100644 (file)
@@ -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);