aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/apic/io_apic.c
diff options
context:
space:
mode:
authorSuresh Siddha <suresh.b.siddha@intel.com>2010-08-27 14:09:48 -0400
committerH. Peter Anvin <hpa@linux.intel.com>2010-09-15 20:36:37 -0400
commit75e3cfbed6f71a8f151dc6e413b6ce3c390030cb (patch)
tree4edd8a92396ee31bace0c0288d516e77ec7ecd1a /arch/x86/kernel/apic/io_apic.c
parent49553c2ef88749dd502687f4eb9c258bb10a4f44 (diff)
x86, intr-remap: Set redirection hint in the IRTE
Currently the redirection hint in the interrupt-remapping table entry is set to 0, which means the remapped interrupt is directed to the processors listed in the destination. So in logical flat mode in the presence of intr-remapping, this results in a single interrupt multi-casted to multiple cpu's as specified by the destination bit mask. But what we really want is to send that interrupt to one of the cpus based on the lowest priority delivery mode. Set the redirection hint in the IRTE to '1' to indicate that we want the remapped interrupt to be directed to only one of the processors listed in the destination. This fixes the issue of same interrupt getting delivered to multiple cpu's in the logical flat mode in the presence of interrupt-remapping. While there is no functional issue observed with this behavior, this will impact performance of such configurations (<=8 cpu's using logical flat mode in the presence of interrupt-remapping) Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> LKML-Reference: <20100827181049.013051492@sbsiddha-MOBL3.sc.intel.com> Cc: Weidong Han <weidong.han@intel.com> Cc: <stable@kernel.org> # [v2.6.32+] Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'arch/x86/kernel/apic/io_apic.c')
-rw-r--r--arch/x86/kernel/apic/io_apic.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index f1efebaf5510..90f8a75f548f 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -1392,6 +1392,7 @@ int setup_ioapic_entry(int apic_id, int irq,
1392 irte.dlvry_mode = apic->irq_delivery_mode; 1392 irte.dlvry_mode = apic->irq_delivery_mode;
1393 irte.vector = vector; 1393 irte.vector = vector;
1394 irte.dest_id = IRTE_DEST(destination); 1394 irte.dest_id = IRTE_DEST(destination);
1395 irte.redir_hint = 1;
1395 1396
1396 /* Set source-id of interrupt request */ 1397 /* Set source-id of interrupt request */
1397 set_ioapic_sid(&irte, apic_id); 1398 set_ioapic_sid(&irte, apic_id);
@@ -3343,6 +3344,7 @@ static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq,
3343 irte.dlvry_mode = apic->irq_delivery_mode; 3344 irte.dlvry_mode = apic->irq_delivery_mode;
3344 irte.vector = cfg->vector; 3345 irte.vector = cfg->vector;
3345 irte.dest_id = IRTE_DEST(dest); 3346 irte.dest_id = IRTE_DEST(dest);
3347 irte.redir_hint = 1;
3346 3348
3347 /* Set source-id of interrupt request */ 3349 /* Set source-id of interrupt request */
3348 if (pdev) 3350 if (pdev)