Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2d96ae6b authored by Andrew Morton's avatar Andrew Morton Committed by Ingo Molnar
Browse files

arch/x86/pci/irq.c: attempt to clean up code layout

parent 27990eac
Loading
Loading
Loading
Loading
+38 −29
Original line number Diff line number Diff line
@@ -1041,37 +1041,46 @@ static void __init pcibios_fixup_irqs(void)
		if (io_apic_assign_pci_irqs) {
			int irq;

			if (pin) {
			if (!pin)
				continue;

			/*
				 * interrupt pins are numbered starting
				 * from 1
			 * interrupt pins are numbered starting from 1
			 */
			pin--;
			irq = IO_APIC_get_PCI_irq_vector(dev->bus->number,
				PCI_SLOT(dev->devfn), pin);
			/*
	 * Busses behind bridges are typically not listed in the MP-table.
	 * In this case we have to look up the IRQ based on the parent bus,
	 * parent slot, and pin number. The SMP code detects such bridged
	 * busses itself so we should get into this branch reliably.
			 * Busses behind bridges are typically not listed in the
			 * MP-table.  In this case we have to look up the IRQ
			 * based on the parent bus, parent slot, and pin number.
			 * The SMP code detects such bridged busses itself so we
			 * should get into this branch reliably.
			 */
				if (irq < 0 && dev->bus->parent) { /* go back to the bridge */
			if (irq < 0 && dev->bus->parent) {
				/* go back to the bridge */
				struct pci_dev *bridge = dev->bus->self;
				int bus;

				pin = (pin + PCI_SLOT(dev->devfn)) % 4;
					irq = IO_APIC_get_PCI_irq_vector(bridge->bus->number,
				bus = bridge->bus->number;
				irq = IO_APIC_get_PCI_irq_vector(bus,
						PCI_SLOT(bridge->devfn), pin);
				if (irq >= 0)
						dev_warn(&dev->dev, "using bridge %s INT %c to get IRQ %d\n",
					dev_warn(&dev->dev,
						"using bridge %s INT %c to "
							"get IRQ %d\n",
						 pci_name(bridge),
						 'A' + pin, irq);
			}
			if (irq >= 0) {
					dev_info(&dev->dev, "PCI->APIC IRQ transform: INT %c -> IRQ %d\n", 'A' + pin, irq);
				dev_info(&dev->dev,
					"PCI->APIC IRQ transform: INT %c "
						"-> IRQ %d\n",
					'A' + pin, irq);
				dev->irq = irq;
			}
		}
		}
#endif
		/*
		 * Still no IRQ? Try to lookup one...