* Jarek Poplawski <[EMAIL PROTECTED]> wrote: > All correct! There was also checked a possibility it can be not hw > itself, but wrong way of handling after hw (acking too late). This was > false idea (or bad implementation), so it looks like hw vs lapic > problem.
i think the problem is that local APIC 'self vectors' might be edge-triggered by default. I'm not exactly sure whether passing in APIC_INT_LEVELTRIG to send_IPI_self() will truly be interpreted by the local APIC into any external IO-APIC ACK sequence (the local APIC might just treat self-vectors as always-edge) - and it might also be that the pure act of mixing self-triggered vectors with level-triggered external irqs sometimes confuses the IO-APIC <-> local-APIC messaging. One more test of the patch below will tell us a bit more about this part of the story. Ingo Index: linux/arch/i386/kernel/io_apic.c =================================================================== --- linux.orig/arch/i386/kernel/io_apic.c +++ linux/arch/i386/kernel/io_apic.c @@ -735,7 +735,8 @@ void fastcall send_IPI_self(int vector) * Wait for idle. */ apic_wait_icr_idle(); - cfg = APIC_DM_FIXED | APIC_DEST_SELF | vector | APIC_DEST_LOGICAL; + cfg = APIC_DM_FIXED | APIC_DEST_SELF | vector | APIC_DEST_LOGICAL | + APIC_INT_LEVELTRIG; /* * Send the IPI. The write to APIC_ICR fires this off. */ - 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