1
linux/arch/x86/kernel/apic
Sebastian Andrzej Siewior 20443598d9 x86: devicetree: Configure IOAPIC pin only once
We use io_apic_setup_irq_pin() in order to configure pin's interrupt
number polarity and type. This is done on every irq_create_of_mapping()
which happens for instance during pci enable calls. Level typed
interrupts are masked by default, edge are unmasked.

On the first ->xlate() call the level interrupt is configured and
masked. The driver calls request_irq() and the line is unmasked. Lets
assume the interrupt line is shared with another device and we call
pci_enable_device() for this device. The ->xlate() configures the pin
again and it is masked. request_irq() does not unmask the line because
it _is_ already unmasked according to its internal state. So the
interrupt will never be unmasked again.

This patch is based on an earlier work by Torben Hohn and solves the
problem by configuring the pin only once. Since all devices must agree
on the same type and polarity there is no point in configuring the pin
more than once.

[ tglx: Split out the ce4100 part into a separate patch ]

Cc: Torben Hohn <torbenh@linutronix.de>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Link: http://lkml.kernel.org/r/%3C20110427143052.GA15211%40linutronix.de%3E
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2011-04-28 11:38:30 +02:00
..
apic_flat_64.c x86: Replace apic->apicid_to_node() with ->x86_32_numa_cpu_node() 2011-01-28 14:54:08 +01:00
apic_noop.c x86: Replace apic->apicid_to_node() with ->x86_32_numa_cpu_node() 2011-01-28 14:54:08 +01:00
apic.c x86: Use syscore_ops instead of sysdev classes and sysdevs 2011-03-23 22:15:54 +01:00
bigsmp_32.c x86: Replace apic->apicid_to_node() with ->x86_32_numa_cpu_node() 2011-01-28 14:54:08 +01:00
es7000_32.c x86: Replace apic->apicid_to_node() with ->x86_32_numa_cpu_node() 2011-01-28 14:54:08 +01:00
hw_nmi.c x86: Stop including <linux/delay.h> in two asm header files 2011-03-29 09:37:42 +02:00
io_apic.c x86: devicetree: Configure IOAPIC pin only once 2011-04-28 11:38:30 +02:00
ipi.c x86: Always use x86_cpu_to_logical_apicid for cpu -> logical apic id 2011-01-28 14:54:05 +01:00
Makefile x86, nmi_watchdog: Remove the old nmi_watchdog 2010-11-18 09:08:23 +01:00
numaq_32.c x86: Replace apic->apicid_to_node() with ->x86_32_numa_cpu_node() 2011-01-28 14:54:08 +01:00
probe_32.c x86: Replace apic->apicid_to_node() with ->x86_32_numa_cpu_node() 2011-01-28 14:54:08 +01:00
probe_64.c x86: Enable the intr-remap fault handling after local APIC setup 2010-12-13 16:53:32 -08:00
summit_32.c x86: Replace apic->apicid_to_node() with ->x86_32_numa_cpu_node() 2011-01-28 14:54:08 +01:00
x2apic_cluster.c x86: Replace apic->apicid_to_node() with ->x86_32_numa_cpu_node() 2011-01-28 14:54:08 +01:00
x2apic_phys.c x86: Replace apic->apicid_to_node() with ->x86_32_numa_cpu_node() 2011-01-28 14:54:08 +01:00
x2apic_uv_x.c x86, UV: Fix kdump reboot 2011-03-31 18:44:03 +02:00