aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/include/asm/io_apic.h
diff options
context:
space:
mode:
authorSuresh Siddha <suresh.b.siddha@intel.com>2009-03-16 20:05:01 -0400
committerH. Peter Anvin <hpa@linux.intel.com>2009-03-17 18:44:27 -0400
commit0280f7c416c652a2fd95d166f52b199ae61122c0 (patch)
treeea932eec97b8852c047fdbd9e33b8e7c73a8f4a8 /arch/x86/include/asm/io_apic.h
parentcf6567fe40c55e9cffca7355cd34e50fb2871e4e (diff)
x86, x2apic: cleanup the IO-APIC level migration with interrupt-remapping
Impact: simplification In the current code, for level triggered migration, we need to modify the io-apic RTE with the update vector information, along with modifying interrupt remapping table entry(IRTE) with vector and destination. This is to ensure that remote IRR bit inthe IOAPIC RTE gets cleared when the cpu does EOI. With this patch, for level triggered, we eliminate the io-apic RTE modification (with the updated vector information), by using a virtual vector (io-apic pin number). Real vector that is used for interrupting cpu will be coming from the interrupt-remapping table entry. Trigger mode in the IRTE will always be edge, and the actual level or edge trigger will be setup in the IO-APIC RTE. So a level triggered interrupt will appear as an edge to the local apic cpu but still as level to the IO-APIC. With this change, level irq migration can be done by simply modifying the interrupt-remapping table entry with out changing the io-apic RTE. And as the interrupt appears as edge at the cpu, in addition to do the local apic EOI, we need to do IO-APIC directed EOI to clear the remote IRR bit in the IO-APIC RTE. This simplies the irq migration in the presence of interrupt-remapping. Idea-by: Rajesh Sankaran <rajesh.sankaran@intel.com> Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Cc: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'arch/x86/include/asm/io_apic.h')
-rw-r--r--arch/x86/include/asm/io_apic.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h
index 59cb4a1317b7..ffcd08f96e47 100644
--- a/arch/x86/include/asm/io_apic.h
+++ b/arch/x86/include/asm/io_apic.h
@@ -172,7 +172,7 @@ extern void probe_nr_irqs_gsi(void);
172extern int setup_ioapic_entry(int apic, int irq, 172extern int setup_ioapic_entry(int apic, int irq,
173 struct IO_APIC_route_entry *entry, 173 struct IO_APIC_route_entry *entry,
174 unsigned int destination, int trigger, 174 unsigned int destination, int trigger,
175 int polarity, int vector); 175 int polarity, int vector, int pin);
176extern void ioapic_write_entry(int apic, int pin, 176extern void ioapic_write_entry(int apic, int pin,
177 struct IO_APIC_route_entry e); 177 struct IO_APIC_route_entry e);
178#else /* !CONFIG_X86_IO_APIC */ 178#else /* !CONFIG_X86_IO_APIC */