lkml.org 
[lkml]   [2012]   [Mar]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH -v3 11/47] PCI: Add pci_bus_add_single_device()
    Date
    Will use it to pci_bus_bridge_scan_resize() to make bridge will
    have pci_bus directory created correctly.

    Signed-off-by: Yinghai Lu <yinghai@kernel.org>
    ---
    drivers/pci/bus.c | 39 +++++++++++++++++++++++++++++++++++++++
    include/linux/pci.h | 1 +
    2 files changed, 40 insertions(+), 0 deletions(-)

    diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c
    index 4ce5ef2..1eb7944 100644
    --- a/drivers/pci/bus.c
    +++ b/drivers/pci/bus.c
    @@ -255,6 +255,45 @@ void pci_bus_add_devices(const struct pci_bus *bus)
    }
    }

    +void pci_bus_add_single_device(struct pci_dev *dev)
    +{
    + struct pci_bus *child;
    + int retval;
    +
    + /* Skip already-added devices */
    + if (!dev->is_added) {
    + retval = pci_bus_add_device(dev);
    + if (retval)
    + dev_err(&dev->dev, "Error adding device, continuing\n");
    + }
    +
    + BUG_ON(!dev->is_added);
    +
    + child = dev->subordinate;
    + /*
    + * If there is an unattached subordinate bus, attach
    + * it and then scan for unattached PCI devices.
    + */
    + if (child) {
    + if (list_empty(&child->node)) {
    + down_write(&pci_bus_sem);
    + list_add_tail(&child->node, &dev->bus->children);
    + up_write(&pci_bus_sem);
    + }
    + pci_bus_add_devices(child);
    +
    + /*
    + * register the bus with sysfs as the parent is now
    + * properly registered.
    + */
    + if (!child->is_added) {
    + retval = pci_bus_add_child(child);
    + if (retval)
    + dev_err(&dev->dev, "Error adding bus, continuing\n");
    + }
    + }
    +}
    +
    void pci_enable_bridges(struct pci_bus *bus)
    {
    struct pci_dev *dev;
    diff --git a/include/linux/pci.h b/include/linux/pci.h
    index 87dceca..860091f 100644
    --- a/include/linux/pci.h
    +++ b/include/linux/pci.h
    @@ -665,6 +665,7 @@ void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
    void pcibios_scan_specific_bus(int busn);
    extern struct pci_bus *pci_find_bus(int domain, int busnr);
    void pci_bus_add_devices(const struct pci_bus *bus);
    +void pci_bus_add_single_device(struct pci_dev *dev);
    struct pci_bus *pci_scan_bus_parented(struct device *parent, int bus,
    struct pci_ops *ops, void *sysdata);
    struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata);
    --
    1.7.7


    \
     
     \ /
      Last update: 2012-03-19 07:07    [W:0.023 / U:0.320 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site