aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/apic
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/apic')
-rw-r--r--arch/x86/kernel/apic/apic.c8
-rw-r--r--arch/x86/kernel/apic/io_apic.c4
-rw-r--r--arch/x86/kernel/apic/probe_64.c7
3 files changed, 10 insertions, 9 deletions
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index e9e2a93783f9..fb7657822aad 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -1383,6 +1383,14 @@ void __cpuinit end_local_APIC_setup(void)
1383#endif 1383#endif
1384 1384
1385 apic_pm_activate(); 1385 apic_pm_activate();
1386
1387 /*
1388 * Now that local APIC setup is completed for BP, configure the fault
1389 * handling for interrupt remapping.
1390 */
1391 if (!smp_processor_id() && intr_remapping_enabled)
1392 enable_drhd_fault_handling();
1393
1386} 1394}
1387 1395
1388#ifdef CONFIG_X86_X2APIC 1396#ifdef CONFIG_X86_X2APIC
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index e4a040c28de1..16c2db8750a2 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -2429,13 +2429,12 @@ static void ack_apic_level(struct irq_data *data)
2429{ 2429{
2430 struct irq_cfg *cfg = data->chip_data; 2430 struct irq_cfg *cfg = data->chip_data;
2431 int i, do_unmask_irq = 0, irq = data->irq; 2431 int i, do_unmask_irq = 0, irq = data->irq;
2432 struct irq_desc *desc = irq_to_desc(irq);
2433 unsigned long v; 2432 unsigned long v;
2434 2433
2435 irq_complete_move(cfg); 2434 irq_complete_move(cfg);
2436#ifdef CONFIG_GENERIC_PENDING_IRQ 2435#ifdef CONFIG_GENERIC_PENDING_IRQ
2437 /* If we are moving the irq we need to mask it */ 2436 /* If we are moving the irq we need to mask it */
2438 if (unlikely(desc->status & IRQ_MOVE_PENDING)) { 2437 if (unlikely(irq_to_desc(irq)->status & IRQ_MOVE_PENDING)) {
2439 do_unmask_irq = 1; 2438 do_unmask_irq = 1;
2440 mask_ioapic(cfg); 2439 mask_ioapic(cfg);
2441 } 2440 }
@@ -3367,6 +3366,7 @@ dmar_msi_set_affinity(struct irq_data *data, const struct cpumask *mask,
3367 msg.data |= MSI_DATA_VECTOR(cfg->vector); 3366 msg.data |= MSI_DATA_VECTOR(cfg->vector);
3368 msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK; 3367 msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK;
3369 msg.address_lo |= MSI_ADDR_DEST_ID(dest); 3368 msg.address_lo |= MSI_ADDR_DEST_ID(dest);
3369 msg.address_hi = MSI_ADDR_BASE_HI | MSI_ADDR_EXT_DEST_ID(dest);
3370 3370
3371 dmar_msi_write(irq, &msg); 3371 dmar_msi_write(irq, &msg);
3372 3372
diff --git a/arch/x86/kernel/apic/probe_64.c b/arch/x86/kernel/apic/probe_64.c
index f9e4e6a54073..d8c4a6feb286 100644
--- a/arch/x86/kernel/apic/probe_64.c
+++ b/arch/x86/kernel/apic/probe_64.c
@@ -79,13 +79,6 @@ void __init default_setup_apic_routing(void)
79 /* need to update phys_pkg_id */ 79 /* need to update phys_pkg_id */
80 apic->phys_pkg_id = apicid_phys_pkg_id; 80 apic->phys_pkg_id = apicid_phys_pkg_id;
81 } 81 }
82
83 /*
84 * Now that apic routing model is selected, configure the
85 * fault handling for intr remapping.
86 */
87 if (intr_remapping_enabled)
88 enable_drhd_fault_handling();
89} 82}
90 83
91/* Same for both flat and physical. */ 84/* Same for both flat and physical. */