lkml.org 
[lkml]   [2012]   [Feb]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 22/24] PCI: Add pci_bus_add_single_device()
    Date
    will use it to pci_bus_bridge_scan_resize(0 to make bridge will
    have pci_bus directory created.

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

    diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c
    index 398f5d8..7b2ae85 100644
    --- a/drivers/pci/bus.c
    +++ b/drivers/pci/bus.c
    @@ -247,6 +247,46 @@ 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 d5b6786..8061031 100644
    --- a/include/linux/pci.h
    +++ b/include/linux/pci.h
    @@ -659,6 +659,7 @@ void pci_fixup_cardbus(struct pci_bus *);
    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-02-05 08:05    [W:3.334 / U:1.336 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site