• M
    x86/PCI: Handle PIRQ routing tables with no router device given · ac7cd5e1
    Maciej W. Rozycki 提交于
    PIRQ routing tables provided by the PCI BIOS usually specify the PCI 
    vendor:device ID as well as the bus address of the device implementing 
    the PIRQ router, e.g.:
    
    PCI: Interrupt Routing Table found at 0xc00fde10
    [...]
    PCI: Attempting to find IRQ router for [8086:7000]
    pci 0000:00:07.0: PIIX/ICH IRQ router [8086:7000]
    
    however in some cases they do not, in which case we fail to match the 
    router handler, e.g.:
    
    PCI: Interrupt Routing Table found at 0xc00fdae0
    [...]
    PCI: Attempting to find IRQ router for [0000:0000]
    PCI: Interrupt router not found at 00:00
    
    This is because we always match the vendor:device ID and the bus address 
    literally, even if they are all zeros.
    
    Handle this case then and iterate over all PCI devices until we find a 
    matching router handler if the vendor ID given by the routing table is 
    the invalid value of zero:
    
    PCI: Attempting to find IRQ router for [0000:0000]
    PCI: Trying IRQ router for [1039:0496]
    pci 0000:00:05.0: SiS85C497 IRQ router [1039:0496]
    Signed-off-by: NMaciej W. Rozycki <macro@orcam.me.uk>
    Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
    Tested-by: NNikolai Zhubr <zhubr.2@gmail.com>
    Link: https://lore.kernel.org/r/alpine.DEB.2.21.2203302018570.9038@angie.orcam.me.uk
    ac7cd5e1
irq.c 44.9 KB