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