freebsd-dev/sys
John Baldwin 0d0a6650d7 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
..
amd64 After the per-CPU IDT changes, the IDT vector of an interrupt could change 2009-07-06 18:23:00 +00:00
arm Cleanup ALIGNED_POINTER: 2009-07-05 17:45:48 +00:00
boot On special systems where the MBR and the GPT are in sync (up to the 4th 2009-06-26 09:32:31 +00:00
bsm
cam Change the type of uio_resid member of struct uio from int to ssize_t. 2009-06-25 18:46:30 +00:00
cddl dtrace/amd64: fix virtual address checks 2009-06-24 16:03:57 +00:00
compat Replace AUDIT_ARG() with variable argument macros with a set more more 2009-06-27 13:58:44 +00:00
conf add missing bit of r195379 2009-07-05 20:44:50 +00:00
contrib Update to 3.6.2.2 firmware (latest w/o host-based power save support): 2009-06-29 18:42:54 +00:00
crypto Changed to M_NOWAIT when reallocing psc_buf in padlock_sha_update(), 2009-05-27 09:52:12 +00:00
ddb Place hostnames and similar information fully under the prison system. 2009-05-29 21:27:12 +00:00
dev The new method of reading the mac address from the 2009-07-06 17:23:48 +00:00
fs In vn_vget_ino() and their inline equivalents, mnt_ref() the mount point 2009-07-02 18:02:55 +00:00
gdb
geom Fix a panic which (reportedly) can happen when unmounting a filesystem 2009-07-01 20:16:29 +00:00
gnu Fix the build by using proper format. 2009-06-25 16:48:13 +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
ia64 Cleanup ALIGNED_POINTER: 2009-07-05 17:45:48 +00:00
isa
kern In vn_vget_ino() and their inline equivalents, mnt_ref() the mount point 2009-07-02 18:02:55 +00:00
kgssapi When the KOBJMETHOD() macro was updated, it resulted in the 2009-06-14 17:33:46 +00:00
libkern done method is supposed to return int. 2009-06-22 22:09:18 +00:00
mips Cleanup ALIGNED_POINTER: 2009-07-05 17:45:48 +00:00
modules catchup with action+ageq additions 2009-07-05 21:19:10 +00:00
net In case we cannot queue a packet reaching the queue limit, retain the 2009-06-30 05:21:00 +00:00
net80211 Add ieee80211_ageq; a facility for staging packets that require 2009-07-05 18:17:37 +00:00
netatalk Use queue(9) instead of hand-crafted link lists for the global netatalk 2009-06-24 21:36:09 +00:00
netgraph Fix infinite loop in ng_iface, that happens when packet passes out via 2009-07-01 08:08:56 +00:00
netinet Update various IPFW-related modules to use if_addr_rlock()/ 2009-06-26 00:46:50 +00:00
netinet6 Fix "options VIMAGE_GLOBALS" build following introduction of 2009-06-29 15:23:50 +00:00
netipsec Add address list locking for in6_ifaddrhead/ia_link: as with locking 2009-06-25 16:35:28 +00:00
netipx Use queue(9) instead of hand-crafted link lists for the global IPX 2009-06-24 20:57:50 +00:00
netnatm Reimplement the netisr framework in order to support parallel netisr 2009-06-01 10:41:38 +00:00
netncp
netsmb Rework socket upcalls to close some races with setup/teardown of upcalls. 2009-06-01 21:17:03 +00:00
nfs Remove the old kernel RPC implementation and the NFS_LEGACYRPC option. 2009-06-30 19:03:27 +00:00
nfsclient In vn_vget_ino() and their inline equivalents, mnt_ref() the mount point 2009-07-02 18:02:55 +00:00
nfsserver Remove the old kernel RPC implementation and the NFS_LEGACYRPC option. 2009-06-30 19:03:27 +00:00
nlm Since svc_[dg|vc|tli|tp]_create() did not hold a reference count on the 2009-06-17 22:50:26 +00:00
opencrypto
pc98 Enable POSIX semaphores on all non-embedded architectures by default. 2009-07-02 18:24:37 +00:00
pci Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
powerpc Cleanup ALIGNED_POINTER: 2009-07-05 17:45:48 +00:00
rpc When unmounting an NFS mount using sec=krb5[ip], the umount system 2009-07-01 16:42:03 +00:00
security Create audit records for AUE_POSIX_OPENPT, currently w/o arguments. 2009-07-02 16:33:38 +00:00
sparc64 Cleanup ALIGNED_POINTER: 2009-07-05 17:45:48 +00:00
sun4v Cleanup ALIGNED_POINTER: 2009-07-05 17:45:48 +00:00
sys Improve the handling of cpuset with interrupts. 2009-07-01 17:20:07 +00:00
tools - Increase dynamic range of filter coefficients from 28bit to 30bit. 2009-07-05 18:15:06 +00:00
ufs Fix fpathconf(3) on fifos, in effect making ls(1) properly 2009-07-02 20:05:21 +00:00
vm When forking a vm space that has wired map entries, do not forget to 2009-07-03 22:17:37 +00:00
xdr MFdevbranch 192944 2009-05-28 08:18:12 +00:00
xen Make ipi_cpu() function as intended. 2009-05-30 08:53:13 +00:00
Makefile