Compile fix for ACPI in 2.4.22/x86-64
Marcelo unfortunately added an last minute ACPI update that changed ACPI interfaces and broke x86-64 compilation. I didn't catch it in time, so 2.4.22 does not compile out of the box for AMD64.
This patch fixes it.
You'll have to apply it when compiling 2.4.22 for x86-64
-Andi
----------
Update x86-64 for the ACPI interrupt link changes.
arch/x86_64/kernel/io_apic.c renamed from arch/x86_64/kernel/io_apic.c-LINK +9 -6
@@ -1762,7 +1762,7 @@ } -int io_apic_set_pci_routing (int ioapic,int pin,int irq) +int io_apic_set_pci_routing (int ioapic,int pin,int irq,int edge_level ,int active_high_low) {struct IO_APIC_route_entry entry;unsigned long flags;
@@ -1785,18 +1785,21 @@ entry.dest_mode =INT_DELIVERY_MODE ; entry.dest.logical.logical_dest =TARGET_CPUS ; entry.mask =1 ;/* Disabled (masked) */ - entry.trigger =1 ;/* Level sensitive */ - entry.polarity =1 ;/* Low active */ + entry.trigger = edge_level; + entry.polarity = active_high_low;add_pin_to_irq (irq, ioapic, pin); entry.vector =assign_irq_vector (irq);printk (KERN_DEBUG "IOAPIC[%d]: Set PCI routing entry (%d-%d -> 0x%x -> " -"IRQ %d)\n" , ioapic, - mp_ioapics[ioapic].mpc_apicid, pin, entry.vector, irq); +"IRQ %d) Mode:%i Active:%i\n" , ioapic, + mp_ioapics[ioapic].mpc_apicid, pin, entry.vector, irq, edge_level, active_high_low); - irq_desc[irq].handler = &ioapic_level_irq_type; +if (edge_level) + irq_desc[irq].handler = &ioapic_level_irq_type; +else + irq_desc[irq].handler = &ioapic_edge_irq_type;set_intr_gate (entry.vector, interrupt[irq]);
arch/x86_64/kernel/mpparse.c renamed from arch/x86_64/kernel/mpparse.c-LINK +9 -4
@@ -923,7 +923,7 @@ ioapic_pin = irq - mp_ioapic_routing[ioapic].irq_start; - io_apic_set_pci_routing(ioapic, ioapic_pin, irq); + io_apic_set_pci_routing(ioapic, ioapic_pin, irq, 1, 1); }#endif /*CONFIG_ACPI_HT_ONLY*/
@@ -939,6 +939,8 @@int ioapic_pin =0 ;int irq =0 ;int idx, bit =0 ; +int edge_level =0 ; +int active_high_low =0 ;/* * Parsing through the PCI Interrupt Routing Table (PRT) and program
@@ -949,11 +951,14 @@/* Need to get irq for dynamic entry */ if (entry->link.handle) { - irq =acpi_pci_link_get_irq (entry->link.handle, entry->link.index); + irq =acpi_pci_link_get_irq (entry->link.handle, entry->link.index, &edge_level, &active_high_low);if (!irq)continue ; - }else + }else { + edge_level =1 ; + active_high_low =1 ; irq = entry->link.index; + } irq = entry->link.index; ioapic =mp_find_ioapic (irq);
@@ -983,7 +988,7 @@ mp_ioapic_routing[ioapic].pin_programmed[idx] |= (1 <<bit); - vector =io_apic_set_pci_routing (ioapic, ioapic_pin, irq); + vector =io_apic_set_pci_routing (ioapic, ioapic_pin, irq, edge_level, active_high_low);if (vector) entry->irq = irq;
include/asm-x86_64/io_apic.h renamed from include/asm-x86_64/io_apic.h-LINK +1 -1
@@ -148,6 +148,6 @@extern int io_apic_get_unique_id (int ioapic,int apic_id);extern int io_apic_get_version (int ioapic);extern int io_apic_get_redir_entries (int ioapic); -extern int io_apic_set_pci_routing (int ioapic,int pin,int irq); +extern int io_apic_set_pci_routing (int ioapic,int pin,int irq,int ,int );#endif