• Jiang Liu's avatar
    x86, irq: Keep balance of IOAPIC pin reference count · ec5e2836
    Jiang Liu authored
    [ Upstream commit cffe0a2b ]
    
    To keep balance of IOAPIC pin reference count, we need to protect
    pirq_enable_irq(), acpi_pci_irq_enable() and intel_mid_pci_irq_enable()
    from reentrance. There are two cases which will cause reentrance.
    
    The first case is caused by suspend/hibernation. If pcibios_disable_irq
    is called during suspending/hibernating, we don't release the assigned
    IRQ number, otherwise it may break the suspend/hibernation. So late when
    pcibios_enable_irq is called during resume, we shouldn't allocate IRQ
    number again.
    
    The second case is that function acpi_pci_irq_enable() may be called
    twice for PCI devices present at boot time as below:
    1) pci_acpi_init()
    	--> acpi_pci_irq_enable() if pci_routeirq is true
    2) pci_enable_device()
    	--> pcibios_enable_device()
    		--> acpi_pci_irq_enable()
    We can't kill kernel parameter pci_routeirq yet because it's still
    needed for debugging purpose.
    
    So flag irq_managed is introd...
    ec5e2836
irq.c 32.8 KB