[PATCH v3 1/2] powerpc/PCI: move DMA & IRQ init to device_add() notification path
Benjamin Herrenschmidt
benh at kernel.crashing.org
Tue Jun 19 08:55:43 EST 2012
On Mon, 2012-06-18 at 15:06 -0600, Bjorn Helgaas wrote:
> We're moving the CardBus IRQ config from before pci_bus_add_devices()
> to after. I see why you did that: we're proposing to do the powerpc
> DMA & IRQ setup in pci_bus_add_devices(), so we don't want to have the
> powerpc IRQ init clobber the CardBus IRQ config.
>
> But a driver can claim the device as soon as we call
> pci_bus_add_devices(), so we're potentially changing dev->irq after a
> driver has already looked at it, which sounds like a bug.
>
> There are only five possibilities for powerpc pci_irq_fixup:
>
> ppc47x_pci_irq_fixup
> mpc85xx_cds_pci_irq_fixup
> maple_pci_irq_fixup
> pmac_pci_irq_fixup
> rtas_msi_pci_irq_fixup
>
> If these were normal PCI header quirks instead, they could run
> earlier, and we wouldn't need to move this
> cardbus_config_irq_and_cls() call. Is it possible to make these
> quirks, Ben?
Wait ... why are those fixups relevant ? They have to run after
pci_read_irq_line() (which should have been called pcibios_read_irq_line
really) but that's fine, we call both back to back....
The problem has to do with the fact that we setup pdev->irq inside
pci_bus_add_devices() with the new proposed code (the fixup itself is
just a detail).
You want cardbus to "quirk" the irq after that's been fixed up... maybe
that's a case for moving cardbus_config_irq_and_cls() to
pci_enable_device() ? Or add another hook inside
pci_bus_add_devices()...
Cheers,
Ben.
More information about the Linuxppc-dev
mailing list