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 | 4 | ||||
-rw-r--r-- | arch/x86/kernel/apic/probe_64.c | 7 |
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. */ |