[PATCH v2 1/2] powerpc/PCI: Add pcibios_device_change_notifier for powerpc

Bjorn Helgaas bhelgaas at google.com
Thu May 24 04:35:26 EST 2012


On Wed, May 23, 2012 at 11:51 AM, Jesse Larrew
<jlarrew at linux.vnet.ibm.com> wrote:
> On 05/22/2012 09:33 PM, Hiroo Matsumoto wrote:
>
>> +static int pcibios_device_change_notifier(struct notifier_block *nb,
>> +                                       unsigned long action, void *data)
>> +{
>> +     struct pci_dev *dev = to_pci_dev(data);
>> +
>
>
>
> In the general case, we don't know what *data contains until we evaluate
> 'action'. This conversion should probably be moved inside the case:
> statement.

We registered it with  "bus_register_notifier(&pci_bus_type, ...)" and
every user of the bus_notifier change passes a "struct device *", so I
think we do know that we have a PCI device.

A future bus_notifier user *could* pass something other than a "struct
device *", but the pattern Hiroo used here ("struct pci_dev *dev =
to_pci_dev(data);" before looking at "action") seems pretty common, so
I don't think it's likely.

>> +     switch (action) {
>> +     case BUS_NOTIFY_ADD_DEVICE:
>> +             /* Setup OF node pointer in the device */
>> +             dev->dev.of_node = pci_device_to_OF_node(dev);
>> +
>> +             /* Fixup NUMA node as it may not be setup yet by the generic
>> +              * code and is needed by the DMA init
>> +              */
>> +             set_dev_node(&dev->dev, pcibus_to_node(dev->bus));
>> +
>> +             /* Hook up default DMA ops */
>> +             set_dma_ops(&dev->dev, pci_dma_ops);
>> +             set_dma_offset(&dev->dev, PCI_DRAM_OFFSET);
>> +
>> +             /* Additional platform DMA/iommu setup */
>> +             if (ppc_md.pci_dma_dev_setup)
>> +                     ppc_md.pci_dma_dev_setup(dev);
>> +
>> +             /* Read default IRQs and fixup if necessary */
>> +             pci_read_irq_line(dev);
>> +             if (ppc_md.pci_irq_fixup)
>> +                     ppc_md.pci_irq_fixup(dev);
>> +
>> +             break;
>> +     }
>> +
>> +     return 0;
>> +}
>> +
>> +static struct notifier_block device_nb = {
>> +     .notifier_call = pcibios_device_change_notifier,
>> +};
>
>
>
> This is just a nit pick, but I think the naming of
> pcibios_device_change_notifier() is a bit misleading. It doesn't
> actually notify anything, but instead it *handles* notifications.
> Perhaps a better name would be pcibios_device_change_handler() or
> pcibios_device_change_callback()?

Good point.  "_notify()" seems to be a common name, how about
pci_bus_notify()?  It's static to the file, so it doesn't have to be
very unique.

I happened to be merging these patches just now, so I'll make this
change provisionally, pending any more discussion.

Thanks a lot for reviewing this!

Bjorn


More information about the Linuxppc-dev mailing list