Re: [PATCH v3 1/2] powerpc/PCI: move DMA & IRQ init to device_add() notification path
From: Bjorn Helgaas <bhelgaas@google.com>
Date: 2012-06-18 21:07:06
Also in:
linux-pci
I'm trying to make some progress on these patches, but I'm concerned about this bit:
quoted hunk ↗ jump to hunk
diff --git a/drivers/pcmcia/cardbus.c b/drivers/pcmcia/cardbus.c index 24caeaf..a980691 100644 --- a/drivers/pcmcia/cardbus.c +++ b/drivers/pcmcia/cardbus.c@@ -85,7 +84,6 @@ int __ref cb_alloc(struct pcmcia_socket *s)=A0 =A0 =A0 =A0 */ =A0 =A0 =A0 =A0pci_bus_size_bridges(bus); =A0 =A0 =A0 =A0pci_bus_assign_resources(bus); - =A0 =A0 =A0 cardbus_config_irq_and_cls(bus, s->pci_irq); =A0 =A0 =A0 =A0/* socket specific tune function */ =A0 =A0 =A0 =A0if (s->tune_bridge)@@ -93,6 +91,7 @@ int __ref cb_alloc(struct pcmcia_socket *s)=A0 =A0 =A0 =A0pci_enable_bridges(bus); =A0 =A0 =A0 =A0pci_bus_add_devices(bus); + =A0 =A0 =A0 cardbus_config_irq_and_cls(bus, s->pci_irq); =A0 =A0 =A0 =A0return 0; =A0}
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?
Bjorn