diff options
Diffstat (limited to 'arch/x86/pci/irq.c')
| -rw-r--r-- | arch/x86/pci/irq.c | 10 | 
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/x86/pci/irq.c b/arch/x86/pci/irq.c index 52e55108404e..d3a73f9335e1 100644 --- a/arch/x86/pci/irq.c +++ b/arch/x86/pci/irq.c @@ -1119,6 +1119,8 @@ static const struct dmi_system_id pciirq_dmi_table[] __initconst = {  void __init pcibios_irq_init(void)  { +	struct irq_routing_table *rtable = NULL; +  	DBG(KERN_DEBUG "PCI: IRQ init\n");  	if (raw_pci_ops == NULL) @@ -1129,8 +1131,10 @@ void __init pcibios_irq_init(void)  	pirq_table = pirq_find_routing_table();  #ifdef CONFIG_PCI_BIOS -	if (!pirq_table && (pci_probe & PCI_BIOS_IRQ_SCAN)) +	if (!pirq_table && (pci_probe & PCI_BIOS_IRQ_SCAN)) {  		pirq_table = pcibios_get_irq_routing_table(); +		rtable = pirq_table; +	}  #endif  	if (pirq_table) {  		pirq_peer_trick(); @@ -1145,8 +1149,10 @@ void __init pcibios_irq_init(void)  		 * If we're using the I/O APIC, avoid using the PCI IRQ  		 * routing table  		 */ -		if (io_apic_assign_pci_irqs) +		if (io_apic_assign_pci_irqs) { +			kfree(rtable);  			pirq_table = NULL; +		}  	}  	x86_init.pci.fixup_irqs();  |