lkml.org 
[lkml]   [2012]   [Feb]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 06/39] PCI: add host bridge release support
    Date
    We need one hook to release host bridge resource that are created for host
    bridge.

    Signed-off-by: Yinghai Lu <yinghai@kernel.org>
    ---
    drivers/pci/host-bridge.c | 8 ++++++++
    drivers/pci/probe.c | 3 ++-
    include/linux/pci.h | 5 +++++
    3 files changed, 15 insertions(+), 1 deletions(-)

    diff --git a/drivers/pci/host-bridge.c b/drivers/pci/host-bridge.c
    index 03d8db1..a710a60 100644
    --- a/drivers/pci/host-bridge.c
    +++ b/drivers/pci/host-bridge.c
    @@ -27,6 +27,14 @@ static struct pci_host_bridge *find_pci_host_bridge(struct pci_dev *dev)
    return to_pci_host_bridge(bus->bridge);
    }

    +void pci_set_host_bridge_release(struct pci_host_bridge *bridge,
    + void (*release_fn)(struct pci_host_bridge *),
    + void *release_data)
    +{
    + bridge->release_fn = release_fn;
    + bridge->release_data = release_data;
    +}
    +
    static bool resource_contains(struct resource *res1, struct resource *res2)
    {
    return res1->start <= res2->start && res1->end >= res2->end;
    diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
    index fb3dd4b..675d7ed 100644
    --- a/drivers/pci/probe.c
    +++ b/drivers/pci/probe.c
    @@ -1136,7 +1136,8 @@ static void pci_release_bus_bridge_dev(struct device *dev)
    {
    struct pci_host_bridge *bridge = to_pci_host_bridge(dev);

    - /* TODO: need to free window->res */
    + if (bridge->release_fn)
    + bridge->release_fn(bridge);

    pci_free_resource_list(&bridge->windows);

    diff --git a/include/linux/pci.h b/include/linux/pci.h
    index 310610e..d93d3ae 100644
    --- a/include/linux/pci.h
    +++ b/include/linux/pci.h
    @@ -378,9 +378,14 @@ struct pci_host_bridge {
    struct device dev;
    struct pci_bus *bus; /* root bus */
    struct list_head windows; /* pci_host_bridge_windows */
    + void (*release_fn)(struct pci_host_bridge *);
    + void *release_data;
    };

    #define to_pci_host_bridge(n) container_of(n, struct pci_host_bridge, dev)
    +void pci_set_host_bridge_release(struct pci_host_bridge *bridge,
    + void (*release_fn)(struct pci_host_bridge *),
    + void *release_data);

    /*
    * The first PCI_BRIDGE_RESOURCE_NUM PCI bus resources (those that correspond
    --
    1.7.7


    \
     
     \ /
      Last update: 2012-03-01 00:13    [W:0.022 / U:0.512 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site