[openib-general] Re: [PATCH]: was Re: LLTX and netif_stop_queue
David S. Miller
davem at davemloft.net
Thu Jan 20 13:34:20 PST 2005
On Thu, 20 Jan 2005 14:51:25 +0100
Tommy Christensen <tommy.christensen at tpack.net> wrote:
> A lot more serious is the fact that ->tx_timeout() and
> ->hard_start_xmit() are no longer allowed to do this:
>
> spin_lock_irq()
> ...
> spin_unlock_irq()
>
> since that would leave us with irq's enabled while still
> holding the xmit_lock.
> This would have to be fixed for non-LLTX drivers as well.
Even worse is that this breaks the acenic driver too because
it does this:
unsigned long maxjiff = jiffies + 3*HZ;
if (time_before(jiffies, maxjiff)) {
barrier();
cpu_relax();
goto restart;
}
in it's ->hard_start_xmit() routine.
I was auditing spin_lock_irq() usage in ->hard_start_xmit()
routines when I caught this.
This one isn't impossible to fix though. We can replace the
jiffies games with a udelay/mdelay and a "maxloop" variable.
Any takers?
I'll keep working on the spin_lock_irq() audit then work on
the other problems Tommy found.
More information about the general
mailing list