After trying everything I could think of to do to the I/O APIC code and
coming up empty, tonight I went back to the local APIC. I had
previously ruled it out since the lapic timer interrupt continued to
work fine even when the others stopped. However, adding some DELAY(1)
calls at key points caused it to work, much like adding WITNESS does.
I managed to get it down to a single change that makes APIC mode work on
this laptop:
...and welcome to bizarro world. There's absolutely no reason I can
think of why that would change anything, other than buggy hardware.
I looked at what Linux was doing, and they're also using a single write
to EOI interrupts, so long as the X86_GOOD_APIC config option is enabled
(and it is for P5/MMX or newer). Otherwise it does an extra read before
writing to any APIC register. I don't know if linux works on this
hardware or not -- the live CD I tried wasn't compiled for APIC support.
At this point, since AFAIK nobody else has reported the same problem,
I'm content with a local workaround. It's just... wierd.
Craig
This points to a bus coherency problem. I wonder if your BIOS is
incorrectly setting the memory region of the apics as cachable. You'll
want to bug Baldwin about this.
Weird PCI interrupt delivery problem (resolution, sort of) ... previously ruled it out since the lapic timer interrupt continued to ... I managed to get it down to a single change that makes APIC mode work on ... think of why that would change anything, other than buggy hardware.... I looked at what Linux was doing, and they're also using a single write ... (freebsd-hackers)
Re: SMP CPU affinity questions ... > setting by default on Linux, but someone else may be able to point you in that ... > advantageous for cache coherency since the IRQ code ... > off pinned APICs.... send the line "unsubscribe linux-kernel" in ... (Linux-Kernel)
Re: Whats the status of x2APIC support in Linux kernel? ... Anyways as far as I know Linux supports the IO APICs implemented in all ... The reason for the local x/APIC was that the original non x APIC did not support... more than 8 logical CPUs being active in the system. ... (Linux-Kernel)