diff options
Diffstat (limited to 'arch/x86/kernel/apic')
-rw-r--r-- | arch/x86/kernel/apic/apic.c | 8 | ||||
-rw-r--r-- | arch/x86/kernel/apic/io_apic.c | 3 | ||||
-rw-r--r-- | arch/x86/kernel/apic/probe_64.c | 7 |
3 files changed, 11 insertions, 7 deletions
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index e3b534cda49a..e0f220e158c1 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c | |||
@@ -1340,6 +1340,14 @@ void __cpuinit end_local_APIC_setup(void) | |||
1340 | 1340 | ||
1341 | setup_apic_nmi_watchdog(NULL); | 1341 | setup_apic_nmi_watchdog(NULL); |
1342 | apic_pm_activate(); | 1342 | apic_pm_activate(); |
1343 | |||
1344 | /* | ||
1345 | * Now that local APIC setup is completed for BP, configure the fault | ||
1346 | * handling for interrupt remapping. | ||
1347 | */ | ||
1348 | if (!smp_processor_id() && intr_remapping_enabled) | ||
1349 | enable_drhd_fault_handling(); | ||
1350 | |||
1343 | } | 1351 | } |
1344 | 1352 | ||
1345 | #ifdef CONFIG_X86_X2APIC | 1353 | #ifdef CONFIG_X86_X2APIC |
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index 5c5b8f3dddb5..4d90327853b7 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
@@ -1397,6 +1397,7 @@ int setup_ioapic_entry(int apic_id, int irq, | |||
1397 | irte.dlvry_mode = apic->irq_delivery_mode; | 1397 | irte.dlvry_mode = apic->irq_delivery_mode; |
1398 | irte.vector = vector; | 1398 | irte.vector = vector; |
1399 | irte.dest_id = IRTE_DEST(destination); | 1399 | irte.dest_id = IRTE_DEST(destination); |
1400 | irte.redir_hint = 1; | ||
1400 | 1401 | ||
1401 | /* Set source-id of interrupt request */ | 1402 | /* Set source-id of interrupt request */ |
1402 | set_ioapic_sid(&irte, apic_id); | 1403 | set_ioapic_sid(&irte, apic_id); |
@@ -3348,6 +3349,7 @@ static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq, | |||
3348 | irte.dlvry_mode = apic->irq_delivery_mode; | 3349 | irte.dlvry_mode = apic->irq_delivery_mode; |
3349 | irte.vector = cfg->vector; | 3350 | irte.vector = cfg->vector; |
3350 | irte.dest_id = IRTE_DEST(dest); | 3351 | irte.dest_id = IRTE_DEST(dest); |
3352 | irte.redir_hint = 1; | ||
3351 | 3353 | ||
3352 | /* Set source-id of interrupt request */ | 3354 | /* Set source-id of interrupt request */ |
3353 | if (pdev) | 3355 | if (pdev) |
@@ -3624,6 +3626,7 @@ static int dmar_msi_set_affinity(unsigned int irq, const struct cpumask *mask) | |||
3624 | msg.data |= MSI_DATA_VECTOR(cfg->vector); | 3626 | msg.data |= MSI_DATA_VECTOR(cfg->vector); |
3625 | msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK; | 3627 | msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK; |
3626 | msg.address_lo |= MSI_ADDR_DEST_ID(dest); | 3628 | msg.address_lo |= MSI_ADDR_DEST_ID(dest); |
3629 | msg.address_hi = MSI_ADDR_BASE_HI | MSI_ADDR_EXT_DEST_ID(dest); | ||
3627 | 3630 | ||
3628 | dmar_msi_write(irq, &msg); | 3631 | dmar_msi_write(irq, &msg); |
3629 | 3632 | ||
diff --git a/arch/x86/kernel/apic/probe_64.c b/arch/x86/kernel/apic/probe_64.c index 83e9be4778e2..fac49a845064 100644 --- a/arch/x86/kernel/apic/probe_64.c +++ b/arch/x86/kernel/apic/probe_64.c | |||
@@ -76,13 +76,6 @@ void __init default_setup_apic_routing(void) | |||
76 | /* need to update phys_pkg_id */ | 76 | /* need to update phys_pkg_id */ |
77 | apic->phys_pkg_id = apicid_phys_pkg_id; | 77 | apic->phys_pkg_id = apicid_phys_pkg_id; |
78 | } | 78 | } |
79 | |||
80 | /* | ||
81 | * Now that apic routing model is selected, configure the | ||
82 | * fault handling for intr remapping. | ||
83 | */ | ||
84 | if (intr_remapping_enabled) | ||
85 | enable_drhd_fault_handling(); | ||
86 | } | 79 | } |
87 | 80 | ||
88 | /* Same for both flat and physical. */ | 81 | /* Same for both flat and physical. */ |