kernel-ark/arch/x86_64/kernel
Eric W. Biederman 45c9953325 [PATCH] Use delayed disable mode of ioapic edge triggered interrupts
Komuro reports that ISA interrupts do not work after a disable_irq(),
causing some PCMCIA drivers to not work, with messages like

	eth0: Asix AX88190: io 0x300, irq 3, hw_addr xx:xx:xx:xx:xx:xx
	eth0: found link beat
	eth0: autonegotiation complete: 100baseT-FD selected
	eth0: interrupt(s) dropped!
	eth0: interrupt(s) dropped!
	eth0: interrupt(s) dropped!
	...

Linus Torvalds <torvalds@osdl.org> said:

  "Now, edge-triggered interrupts are a _lot_ harder to mask, because the
   Intel APIC is an unbelievable piece of sh*t, and has the edge-detect logic
   _before_ the mask logic, so if a edge happens _while_ the device is
   masked, you'll never ever see the edge ever again (unmasking will not
   cause a new edge, so you simply lost the interrupt).

   So when you "mask" an edge-triggered IRQ, you can't really mask it at all,
   because if you did that, you'd lose it forever if the IRQ comes in while
   you masked it. Instead, we're supposed to leave it active, and set a flag,
   and IF the IRQ comes in, we just remember it, and mask it at that point
   instead, and then on unmasking, we have to replay it by sending a
   self-IPI."

This trivial patch solves the problem.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Cc: Ingo Molnar <mingo@redhat.com>
Acked-by: Komuro <komurojun-mbn@nifty.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-11-15 09:04:32 -08:00
..
acpi
cpufreq
aperture.c
apic.c [PATCH] x86_64 irq_regs fix 2006-10-06 13:36:52 -07:00
asm-offsets.c
audit.c
crash_dump.c
crash.c
e820.c [PATCH] x86-64: setup saved_max_pfn correctly (kdump) 2006-11-14 16:57:46 +01:00
early_printk.c
early-quirks.c [PATCH] x86: Add acpi_user_timer_override option for Asus boards 2006-11-14 16:57:46 +01:00
entry.S [PATCH] x86: Revert new unwind kernel stack termination 2006-10-21 18:37:02 +02:00
functionlist
genapic_cluster.c [PATCH] x86_64 irq: Allocate a vector across all cpus for genapic_flat. 2006-10-08 12:24:02 -07:00
genapic_flat.c [PATCH] x86-64: Put more than one cpu in TARGET_CPUS 2006-10-21 18:37:02 +02:00
genapic.c
head64.c
head.S
i387.c
i8259.c [PATCH] genirq: clean up irq-flow-type naming 2006-10-17 08:18:45 -07:00
init_task.c [PATCH] nsproxy: move init_nsproxy into kernel/nsproxy.c 2006-10-02 07:57:20 -07:00
io_apic.c [PATCH] Use delayed disable mode of ioapic edge triggered interrupts 2006-11-15 09:04:32 -08:00
ioport.c
irq.c [PATCH] genirq: clean up irq-flow-type naming 2006-10-17 08:18:45 -07:00
k8.c
kprobes.c [PATCH] kretprobe spinlock deadlock patch 2006-10-02 07:57:16 -07:00
ldt.c
machine_kexec.c
Makefile
mce_amd.c
mce_intel.c
mce.c
module.c
mpparse.c [PATCH] genirq: x86_64 irq: Kill irq compression 2006-10-04 07:55:29 -07:00
nmi.c [PATCH] x86: Clean up x86 NMI sysctls 2006-09-30 01:47:55 +02:00
pci-calgary.c [PATCH] x86-64: increase PHB1 split transaction timeout 2006-10-22 00:41:15 +02:00
pci-dma.c [PATCH] Document iommu=panic 2006-09-30 01:47:55 +02:00
pci-gart.c
pci-nommu.c
pci-swiotlb.c
pmtimer.c
process.c [PATCH] x86-64: Fix race in exit_idle 2006-11-14 16:57:46 +01:00
ptrace.c
reboot.c
relocate_kernel.S
setup64.c
setup.c [PATCH] Use ARRAY_SIZE in setup.c 2006-09-30 01:47:55 +02:00
signal.c
smp.c [PATCH] x86-64: Fix vgetcpu when CONFIG_HOTPLUG_CPU is disabled 2006-11-14 16:57:46 +01:00
smpboot.c [PATCH] x86-64: Only look at per_cpu data for online cpus. 2006-10-25 01:00:23 +02:00
stacktrace.c
suspend_asm.S
suspend.c
sys_x86_64.c [PATCH] namespaces: utsname: switch to using uts namespaces 2006-10-02 07:57:21 -07:00
syscall.c
tce.c Remove all inclusions of <linux/config.h> 2006-10-04 03:38:54 -04:00
time.c [PATCH] x86-64: Fix vgetcpu when CONFIG_HOTPLUG_CPU is disabled 2006-11-14 16:57:46 +01:00
trampoline.S
traps.c [PATCH] x86-64: Fix compilation without CONFIG_KALLSYMS 2006-10-05 15:55:15 -07:00
vmlinux.lds.S [PATCH] vmlinux.lds: consolidate initcall sections 2006-10-27 15:34:51 -07:00
vsmp.c [PATCH] Fix build breakage with CONFIG_X86_VSMP 2006-10-12 12:25:27 -07:00
vsyscall.c [PATCH] x86-64: Fix vgetcpu when CONFIG_HOTPLUG_CPU is disabled 2006-11-14 16:57:46 +01:00
x8664_ksyms.c Remove all inclusions of <linux/config.h> 2006-10-04 03:38:54 -04:00