Messages in this thread |  | | Date | Sat, 03 Feb 2001 13:14:37 +0100 | From | Manfred Spraul <> | Subject | Re: [patch] 2.4.0, 2.4.0-ac12: APIC lock-ups |
| |
Manfred Spraul wrote: > > But I think we can change the bug description: > > If an io apic io redirection entry is unmasked while the irq pin is > active, then the io apic sends out the interrupt as edge triggered, but > nevertheless sets the IRR bit. >
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.
But I have no idea how io_apic.c could prevent lockups.
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().
Any ideas?
-- Manfred - 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/
|  |