lkml.org 
[lkml]   [2001]   [Feb]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [patch] 2.4.0, 2.4.0-ac12: APIC lock-ups
On Sat, 3 Feb 2001, Manfred Spraul wrote:

> I found another workaround:
> 8390.c currently calls
>
> outb_p(ENISR_ALL, e8390_base + EN0_IMR);
> enable_irq(dev->irq);
>
> and locks up after ~ 100 packets flood ping.
>
> If I reorder these calls to
>
> enable_irq(dev->irq);
> outb_p(ENISR_ALL, e8390_base + EN0_IMR);
> (and the correct spin_lock()'s)
>
> the lockup disappears.

Is it possible that asserting the IRQ when the mask is active makes it be
mishandled?

> Playing with the trigger mode is not 100% reliable - I assume it kicks
> the io apic only after several changes of the trigger mode bit. Maciej's
> patch switches that bit twice during every start_tx operation and thus
> doesn't lock up, my patch touches the redirection entry exactly once and
> reliably locks up - even if I change trigger mode, polarity, delivery
> mode and vector during enable_level_irq().

I believe I recover from the lockup -- it's the mask function that
recovers. But another one happens at the unmask time, I suppose.

> Any ideas?

I'll implement the IRQ unlocker I was thinking first. The idea is not to
try to prevent the lockup from happening as it might even be impossible
but to make the unlocker trigger after a lockup happens instead. I should
have an implementation ready soon.

--
+ Maciej W. Rozycki, Technical University of Gdansk, Poland +
+--------------------------------------------------------------+
+ e-mail: macro@ds2.pg.gda.pl, PGP key available +

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 12:55    [W:0.063 / U:20.912 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site