freebsd-skq/sys/i386
jhb 19e5186727 After the per-CPU IDT changes, the IDT vector of an interrupt could change
when the interrupt was moved from one CPU to another.  If the interrupt was
enabled, then the old IDT vector needs to be disabled and the new IDT vector
needs to be enabled.  This was mostly masked prior to the recent MSI changes
since in the older code almost all allocated IDT vectors were already enabled
and the enabled vectors on the BSP during boot covered enough of the IDT
range.  However, after the MSI changes, MSI interrupts that were allocated
but not enabled (e.g. DRM with MSI) during boot could result in an allocated
IDT vector that wasn't enabled.  The round-robin at the end of boot could
place another interrupt at the same IDT vector without enabling the IDT
vector causing trap 30 faults.

Fix this by explicitly disabling/enabling the old and new IDT vectors for
enabled interrupt sources when moving an interrupt between CPUs via the
pic_assign_cpu() method.  While here, fix a bug in my earlier changes so
that an I/O APIC interrupt pin is left unchanged if ioapic_assign_cpu()
fails to allocate a new IDT vector and returns ENOSPC.

Approved by:	re (kensmith)
2009-07-06 18:23:00 +00:00
..
acpica Adapt vfs kqfilter to the shared vnode lock used by zfs write vop. Use 2009-06-10 20:59:32 +00:00
bios Some minor style changes: 2009-05-20 16:29:22 +00:00
compile Clone Kip's Xen on stable/6 tree so that I can work on improving FreeBSD/amd64 2008-11-22 16:14:52 +00:00
conf Enable POSIX semaphores on all non-embedded architectures by default. 2009-07-02 18:24:37 +00:00
cpufreq Import ACPICA 20090521. 2009-06-05 18:44:36 +00:00
i386 After the per-CPU IDT changes, the IDT vector of an interrupt could change 2009-07-06 18:23:00 +00:00
ibcs2 Fix ibcs2_ipc.c build by adding missing limits.h include. 2009-06-25 07:25:39 +00:00
include Cleanup ALIGNED_POINTER: 2009-07-05 17:45:48 +00:00
isa Improve the handling of cpuset with interrupts. 2009-07-01 17:20:07 +00:00
linux Return ENOSYS instead of EINVAL for invalid function codes to match the 2009-06-26 19:39:33 +00:00
pci strict kobj signatures: fix legacy i386 pcib_write_config impl 2009-06-11 17:06:31 +00:00
svr4 Change some movl's to mov's. Newer GAS no longer accept 'movl' instructions 2009-01-31 11:37:21 +00:00
xbox Clone Kip's Xen on stable/6 tree so that I can work on improving FreeBSD/amd64 2008-11-22 16:14:52 +00:00
xen PAE adds another level to the i386 page table. This level is a small 2009-07-05 21:40:21 +00:00
Makefile Clone Kip's Xen on stable/6 tree so that I can work on improving FreeBSD/amd64 2008-11-22 16:14:52 +00:00