freebsd-skq/sys/x86/x86
Andriy Gapon ff08349df5 ioapic_program_intpin: program high bits before low bits
Programming the low bits has a side-effect if unmasking the pin if it is
not disabled.  So if an interrupt was pending then it would be delivered
with the correct new vector but to the incorrect old LAPIC.

This fix could be made clearer by preserving the mask bit while
programming the low bits and then explicitly resetting the mask bit
after all the programming is done.

Probability to trip over the fixed bug could be increased by bootverbose
because printing of the interrupt information in ioapic_assign_cpu
lengthened the time window during which an interrupt could arrive while
a pin is masked.

Reported by:	Andreas Longwitz <longwitz@incore.de>
Tested by:	Andreas Longwitz <longwitz@incore.de>
MFC after:	12 days
2012-12-01 18:16:14 +00:00
..
busdma_machdep.c Allow static DMA allocations that allow for enough segments to do page-sized 2012-08-17 14:14:25 +00:00
dump_machdep.c free wdog_kern_pat calls in post-panic paths from under SW_WATCHDOG 2012-06-03 08:01:12 +00:00
intr_machdep.c Reverts r234074,234105,234564,234723,234989,235231-235232 and part of 2012-10-09 12:22:43 +00:00
io_apic.c ioapic_program_intpin: program high bits before low bits 2012-12-01 18:16:14 +00:00
legacy.c Move the legacy(4) driver to x86. 2012-03-30 19:10:14 +00:00
local_apic.c Microoptimize LAPIC timer routines to avoid reading from hardware during 2012-08-03 15:19:59 +00:00
mca.c Further tweak the changes made in r233709. The kernel doesn't permit 2012-04-02 17:26:21 +00:00
mptable_pci.c Move the legacy(4) driver to x86. 2012-03-30 19:10:14 +00:00
mptable.c
msi.c
nexus.c
tsc.c During TSC synchronization test, use rdtsc() rather than rdtsc32(), to 2012-08-07 23:16:11 +00:00