diff options
Diffstat (limited to 'arch/x86/kernel/apic/io_apic.c')
| -rw-r--r-- | arch/x86/kernel/apic/io_apic.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index ef8d9290c7ea..4d0216fcb36c 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
| @@ -462,7 +462,8 @@ static struct IO_APIC_route_entry ioapic_read_entry(int apic, int pin) | |||
| 462 | static void | 462 | static void |
| 463 | __ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) | 463 | __ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) |
| 464 | { | 464 | { |
| 465 | union entry_union eu; | 465 | union entry_union eu = {{0, 0}}; |
| 466 | |||
| 466 | eu.entry = e; | 467 | eu.entry = e; |
| 467 | io_apic_write(apic, 0x11 + 2*pin, eu.w2); | 468 | io_apic_write(apic, 0x11 + 2*pin, eu.w2); |
| 468 | io_apic_write(apic, 0x10 + 2*pin, eu.w1); | 469 | io_apic_write(apic, 0x10 + 2*pin, eu.w1); |
| @@ -1413,6 +1414,9 @@ int setup_ioapic_entry(int apic_id, int irq, | |||
| 1413 | irte.vector = vector; | 1414 | irte.vector = vector; |
| 1414 | irte.dest_id = IRTE_DEST(destination); | 1415 | irte.dest_id = IRTE_DEST(destination); |
| 1415 | 1416 | ||
| 1417 | /* Set source-id of interrupt request */ | ||
| 1418 | set_ioapic_sid(&irte, apic_id); | ||
| 1419 | |||
| 1416 | modify_irte(irq, &irte); | 1420 | modify_irte(irq, &irte); |
| 1417 | 1421 | ||
| 1418 | ir_entry->index2 = (index >> 15) & 0x1; | 1422 | ir_entry->index2 = (index >> 15) & 0x1; |
| @@ -2003,7 +2007,9 @@ void disable_IO_APIC(void) | |||
| 2003 | /* | 2007 | /* |
| 2004 | * Use virtual wire A mode when interrupt remapping is enabled. | 2008 | * Use virtual wire A mode when interrupt remapping is enabled. |
| 2005 | */ | 2009 | */ |
| 2006 | disconnect_bsp_APIC(!intr_remapping_enabled && ioapic_i8259.pin != -1); | 2010 | if (cpu_has_apic) |
| 2011 | disconnect_bsp_APIC(!intr_remapping_enabled && | ||
| 2012 | ioapic_i8259.pin != -1); | ||
| 2007 | } | 2013 | } |
| 2008 | 2014 | ||
| 2009 | #ifdef CONFIG_X86_32 | 2015 | #ifdef CONFIG_X86_32 |
| @@ -3287,6 +3293,9 @@ static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq, struct msi_ms | |||
| 3287 | irte.vector = cfg->vector; | 3293 | irte.vector = cfg->vector; |
| 3288 | irte.dest_id = IRTE_DEST(dest); | 3294 | irte.dest_id = IRTE_DEST(dest); |
| 3289 | 3295 | ||
| 3296 | /* Set source-id of interrupt request */ | ||
| 3297 | set_msi_sid(&irte, pdev); | ||
| 3298 | |||
| 3290 | modify_irte(irq, &irte); | 3299 | modify_irte(irq, &irte); |
| 3291 | 3300 | ||
| 3292 | msg->address_hi = MSI_ADDR_BASE_HI; | 3301 | msg->address_hi = MSI_ADDR_BASE_HI; |
| @@ -3567,7 +3576,7 @@ static int dmar_msi_set_affinity(unsigned int irq, const struct cpumask *mask) | |||
| 3567 | 3576 | ||
| 3568 | #endif /* CONFIG_SMP */ | 3577 | #endif /* CONFIG_SMP */ |
| 3569 | 3578 | ||
| 3570 | struct irq_chip dmar_msi_type = { | 3579 | static struct irq_chip dmar_msi_type = { |
| 3571 | .name = "DMAR_MSI", | 3580 | .name = "DMAR_MSI", |
| 3572 | .unmask = dmar_msi_unmask, | 3581 | .unmask = dmar_msi_unmask, |
| 3573 | .mask = dmar_msi_mask, | 3582 | .mask = dmar_msi_mask, |
