From: Roland Dreier <[EMAIL PROTECTED]>
Date: Mon, 05 Jun 2006 21:44:01 -0700

>  > IPOIB is going to BUG() with this change.  Because now, in their
>  > multicast code, you're going to local_bh_disable() via
>  > netif_tx_unlock() with hw IRQs disabled which is illegal.
>  > 
>  > It shows a bug here in the locking of the IPOIB driver.
> 
> Sorry, I haven't followed this thread closely.  Can you expand on what
> the bug in ipoib's multicast locking is?

It disables hw interrupts, and takes the xmit_lock.

xmit_lock is a BH only spinlock, you can't take it from hw
interrupts, or inside of a HW irq protected spinlock.

You can take it on the outside of a HW irq lock protected
area like this:

        spin_lock_bh(&dev->xmit_lock);

        spin_lock_irq(&whatever_lock);

        spin_unlock_irq(&whatever_lock);

        spin_unlock_bh(&dev->xmit_lock);

but not the other way around.
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to