linux/arch/x86/kernel
Matthew Wilcox 0ca4b6b001 x86: Fix interrupt leak due to migration
When we migrate an interrupt from one CPU to another, we set the
move_in_progress flag and clean up the vectors later once they're not
being used.  If you're unlucky and call destroy_irq() before the vectors
become un-used, the move_in_progress flag is never cleared, which causes
the interrupt to become unusable.

This was discovered by Jesse Brandeburg for whom it manifested as an
MSI-X device refusing to use MSI-X mode when the driver was unloaded
and reloaded repeatedly.

Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-11-20 13:17:40 -08:00
..
acpi ACPI: pci_link: remove acpi_irq_balance_set() interface 2008-11-11 21:12:05 -05:00
cpu x86: build fix 2008-10-31 09:31:38 +01:00
.gitignore
alternative.c
amd_iommu.c AMD IOMMU: check for next_bit also in unmapped area 2008-11-18 15:44:43 +01:00
amd_iommu_init.c AMD IOMMU: fix fullflush comparison length 2008-11-18 15:44:42 +01:00
aperture_64.c
apic.c x86: apic - unify APIC_DIVISOR 2008-10-16 16:53:14 +02:00
apm_32.c
asm-offsets.c
asm-offsets_32.c
asm-offsets_64.c x86: Fix ASM_X86__ header guards 2008-10-22 22:55:23 -07:00
audit_64.c
bios_uv.c x86: Add UV partition call v4 2008-10-16 16:53:13 +02:00
bootflag.c
cpuid.c device create: misc: convert device_create_drvdata to device_create 2008-10-16 09:24:43 -07:00
crash.c
crash_dump_32.c kdump: make elfcorehdr_addr independent of CONFIG_PROC_VMCORE 2008-10-20 08:52:39 -07:00
crash_dump_64.c kdump: make elfcorehdr_addr independent of CONFIG_PROC_VMCORE 2008-10-20 08:52:39 -07:00
doublefault_32.c
ds.c x86, PEBS/DS: fix code flow in ds_request() 2008-11-18 15:34:36 +01:00
dumpstack_32.c x86, kexec: fix hang on i386 when panic occurs while console_sem is held 2008-10-22 13:59:44 +02:00
dumpstack_64.c sysfs: crash debugging 2008-10-16 09:24:41 -07:00
e820.c x86: Clean up late e820 resource allocation 2008-11-01 10:17:22 -07:00
early-quirks.c Revert "x86: blacklist DMAR on Intel G31/G33 chipsets" 2008-11-15 11:37:16 -08:00
early_printk.c
efi.c x86: Add UV EFI table entry v4 2008-10-16 16:53:13 +02:00
efi_32.c
efi_64.c
efi_stub_32.S
efi_stub_64.S
entry_32.S Merge commit 'v2.6.28-rc2' into tracing/urgent 2008-10-27 10:50:54 +01:00
entry_64.S ftrace: rename FTRACE to FUNCTION_TRACER 2008-10-20 18:27:03 +02:00
es7000_32.c x86: fix es7000 compiling 2008-11-16 10:05:07 +01:00
ftrace.c ftrace: use a real variable for ftrace_nop in x86 2008-10-27 16:52:01 +01:00
genapic_64.c
genapic_flat_64.c x86: fix section mismatch warning - apic_physflat 2008-10-22 17:36:27 +02:00
genx2apic_cluster.c x86: fix section mismatch warning - apic_x2apic_cluster 2008-10-22 17:36:29 +02:00
genx2apic_phys.c x86: fix section mismatch warning - apic_x2apic_phys 2008-10-22 17:36:30 +02:00
genx2apic_uv_x.c x86/uv: memory allocation at initialization 2008-10-27 14:17:16 +01:00
geode_32.c
head.c
head32.c
head64.c
head_32.S
head_64.S
hpet.c x86: HPET: enter hpet_interrupt_handler with interrupts disabled 2008-11-10 17:38:07 +01:00
i386_ksyms_32.c ftrace: rename FTRACE to FUNCTION_TRACER 2008-10-20 18:27:03 +02:00
i387.c
i8237.c
i8253.c
i8259.c
init_task.c
io_apic.c x86: Fix interrupt leak due to migration 2008-11-20 13:17:40 -08:00
io_delay.c
ioport.c
ipi.c
irq.c genirq: fix off by one and coding style 2008-10-21 15:54:40 +02:00
irq_32.c x86: move ack_bad_irq() to irq.c 2008-10-16 16:53:30 +02:00
irq_64.c x86: move ack_bad_irq() to irq.c 2008-10-16 16:53:30 +02:00
irqinit_32.c genirq: remove artifacts from sparseirq removal 2008-10-16 16:53:15 +02:00
irqinit_64.c genirq: remove irq_to_desc_alloc 2008-10-16 16:53:15 +02:00
k8.c x86, gart: fix gart detection for Fam11h CPUs 2008-10-28 17:10:27 +01:00
kdebugfs.c
kgdb.c
kprobes.c
kvm.c
kvmclock.c x86: KVM guest: fix section mismatch warning in kvmclock.c 2008-11-11 20:55:10 +02:00
ldt.c
machine_kexec_32.c x86, kdump: fix invalid access on i386 sparsemem 2008-10-28 16:48:24 +01:00
machine_kexec_64.c
Makefile ftrace, powerpc, sparc64, x86: remove notrace from arch ftrace file 2008-10-23 16:00:25 +02:00
mca_32.c
mfgpt_32.c
microcode_amd.c x86: AMD microcode patch loader author update 2008-10-28 16:41:28 +01:00
microcode_core.c x86: microcode patch loader author update 2008-10-28 16:41:16 +01:00
microcode_intel.c
mmconf-fam10h_64.c
module_32.c
module_64.c
mpparse.c
msr.c device create: misc: convert device_create_drvdata to device_create 2008-10-16 09:24:43 -07:00
nmi.c
numaq_32.c
olpc.c
paravirt-spinlocks.c
paravirt.c
paravirt_patch_32.c
paravirt_patch_64.c
pci-calgary_64.c x86: convert Calgary IOMMU driver to generic iommu_num_pages function 2008-10-16 11:21:33 -07:00
pci-dma.c x86/PCI: build failure at x86/kernel/pci-dma.c with !CONFIG_PCI 2008-10-24 11:09:43 -07:00
pci-gart_64.c x86, gart: fix gart detection for Fam11h CPUs 2008-10-28 17:10:27 +01:00
pci-nommu.c
pci-swiotlb_64.c x86: restore the old swiotlb alloc_coherent behavior 2008-10-23 21:54:40 +02:00
pcspeaker.c
pmtimer_64.c
probe_roms_32.c
process.c
process_32.c
process_64.c Merge branch 'linus' into test 2008-10-23 00:11:07 -04:00
ptrace.c
pvclock.c
quirks.c x86: remove irqbalance in kernel for 32 bit 2008-10-16 16:52:52 +02:00
reboot.c x86: quirk for reboot stalls on a Dell Optiplex 330 2008-11-18 22:22:29 +01:00
reboot_fixups_32.c
relocate_kernel_32.S
relocate_kernel_64.S
rtc.c rtc: use bcd2bin/bin2bcd 2008-10-20 08:52:41 -07:00
scx200_32.c
setup.c x86: more general identifier for Phoenix BIOS 2008-11-18 16:11:36 +01:00
setup_percpu.c x86: remove redundant KERN_DEBUG on pr_debug 2008-10-22 16:56:22 +02:00
sigframe.h
signal_32.c
signal_64.c
smp.c
smpboot.c x86: do_boot_cpu - check if we have ESR register 2008-10-22 16:56:16 +02:00
smpcommon.c
stacktrace.c
step.c
summit_32.c
sys_i386_32.c
sys_x86_64.c
syscall_64.c x86: Fix ASM_X86__ header guards 2008-10-22 22:55:23 -07:00
syscall_table_32.S
tce_64.c
test_nx.c
test_rodata.c
time_32.c
time_64.c
tlb_32.c x86: add smp_mb() before sending INVALIDATE_TLB_VECTOR 2008-11-06 09:41:49 +01:00
tlb_64.c x86: add smp_mb() before sending INVALIDATE_TLB_VECTOR 2008-11-06 09:41:49 +01:00
tlb_uv.c x86/tlb_uv: remove strange mc146818rtc include 2008-10-22 16:56:23 +02:00
tls.c
tls.h
topology.c
trampoline.c
trampoline_32.S
trampoline_64.S
traps.c MCE: Don't run 32bit machine checks with interrupts on 2008-10-22 13:19:01 +02:00
tsc.c sched: optimize sched_clock() a bit 2008-11-08 17:05:38 +01:00
tsc_sync.c x86: add rdtsc barrier to TSC sync check 2008-11-18 00:15:02 +01:00
uv_irq.c x86, UV: add uv_setup_irq() and uv_teardown_irq() functions, v3, fix 2008-10-16 16:53:13 +02:00
uv_sysfs.c x86: Add sysfs entries for UV v4 2008-10-16 16:53:13 +02:00
verify_cpu_64.S
visws_quirks.c genirq: revert dynarray 2008-10-16 16:53:15 +02:00
vm86_32.c
vmi_32.c
vmiclock_32.c x86: VMI, initialize IRQ vector 2008-10-16 16:52:59 +02:00
vmlinux.lds.S
vmlinux_32.lds.S genirq: revert dynarray 2008-10-16 16:53:15 +02:00
vmlinux_64.lds.S genirq: remove artifacts from sparseirq removal 2008-10-16 16:53:15 +02:00
vsmp_64.c x86: two trivial sparse annotations 2008-10-29 08:02:28 +01:00
vsyscall_64.c
x8664_ksyms_64.c ftrace: rename FTRACE to FUNCTION_TRACER 2008-10-20 18:27:03 +02:00
xsave.c x86: make variables static 2008-10-22 07:31:28 +02:00