Commit 41d0ff7d authored by Len Brown's avatar Len Brown

[ACPI] re-factor previous mpparse IRQ override fix (Linus Torvalds)

Reflect that only the dstirq depends on the dstapic.
parent 98469742
...@@ -1000,15 +1000,23 @@ void __init mp_config_acpi_legacy_irqs (void) ...@@ -1000,15 +1000,23 @@ void __init mp_config_acpi_legacy_irqs (void)
for (i = 0; i < 16; i++) { for (i = 0; i < 16; i++) {
int idx; int idx;
for (idx = 0; idx < mp_irq_entries; idx++) for (idx = 0; idx < mp_irq_entries; idx++) {
if (mp_irqs[idx].mpc_srcbus == MP_ISA_BUS && struct mpc_config_intsrc *irq = mp_irqs + idx;
(mp_irqs[idx].mpc_dstapic == intsrc.mpc_dstapic) &&
(mp_irqs[idx].mpc_srcbusirq == i || /* Do we already have a mapping for this ISA IRQ? */
mp_irqs[idx].mpc_dstirq == i)) if (irq->mpc_srcbus == MP_ISA_BUS && irq->mpc_srcbusirq == i)
break; break;
if (idx != mp_irq_entries) /* Do we already have a mapping for this IOAPIC pin */
if ((irq->mpc_dstapic == intsrc.mpc_dstapic) &&
(irq->mpc_dstirq == i))
break;
}
if (idx != mp_irq_entries) {
printk(KERN_DEBUG "ACPI: IRQ%d used by override.\n", i);
continue; /* IRQ already used */ continue; /* IRQ already used */
}
intsrc.mpc_irqtype = mp_INT; intsrc.mpc_irqtype = mp_INT;
intsrc.mpc_srcbusirq = i; /* Identity mapped */ intsrc.mpc_srcbusirq = i; /* Identity mapped */
......
...@@ -859,12 +859,18 @@ void __init mp_config_acpi_legacy_irqs (void) ...@@ -859,12 +859,18 @@ void __init mp_config_acpi_legacy_irqs (void)
for (i = 0; i < 16; i++) { for (i = 0; i < 16; i++) {
int idx; int idx;
for (idx = 0; idx < mp_irq_entries; idx++) for (idx = 0; idx < mp_irq_entries; idx++) {
if (mp_irqs[idx].mpc_srcbus == MP_ISA_BUS && struct mpc_config_intsrc *irq = mp_irqs + idx;
(mp_irqs[idx].mpc_dstapic == intsrc.mpc_dstapic) &&
(mp_irqs[idx].mpc_srcbusirq == i || /* Do we already have a mapping for this ISA IRQ? */
mp_irqs[idx].mpc_dstirq == i)) if (irq->mpc_srcbus == MP_ISA_BUS && irq->mpc_srcbusirq == i)
break;
/* Do we already have a mapping for this IOAPIC pin */
if ((irq->mpc_dstapic == intsrc.mpc_dstapic) &&
(irq->mpc_dstirq == i))
break; break;
}
if (idx != mp_irq_entries) { if (idx != mp_irq_entries) {
printk(KERN_DEBUG "ACPI: IRQ%d used by override.\n", i); printk(KERN_DEBUG "ACPI: IRQ%d used by override.\n", i);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment