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 09/11] x86, PCI: Embed pci_sysdata into pci_root_info on acpi path
    Date
    So that part memory will be released on root bus removing path.

    Signed-off-by: Yinghai Lu <yinghai@kernel.org>
    ---
    arch/x86/pci/acpi.c | 21 ++++-----------------
    1 files changed, 4 insertions(+), 17 deletions(-)

    diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
    index 23e7361..8a17b23 100644
    --- a/arch/x86/pci/acpi.c
    +++ b/arch/x86/pci/acpi.c
    @@ -13,6 +13,7 @@ struct pci_root_info {
    unsigned int res_num;
    struct resource *res;
    int busnum;
    + struct pci_sysdata sd;
    };

    static bool pci_use_crs = true;
    @@ -410,26 +411,16 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_pci_root *root)
    if (node != -1 && !node_online(node))
    node = -1;

    - /* Allocate per-root-bus (not per bus) arch-specific data.
    - * TODO: leak; this memory is never freed.
    - * It's arguable whether it's worth the trouble to care.
    - */
    - sd = kzalloc(sizeof(*sd), GFP_KERNEL);
    - if (!sd) {
    + info = kzalloc(sizeof(*info), GFP_KERNEL);
    + if (!info) {
    printk(KERN_WARNING "pci_bus %04x:%02x: "
    "ignored (out of memory)\n", domain, busnum);
    return NULL;
    }

    + sd = &info->sd;
    sd->domain = domain;
    sd->node = node;
    - info = kzalloc(sizeof(*info), GFP_KERNEL);
    - if (!info) {
    - kfree(sd);
    - printk(KERN_WARNING "pci_bus %04x:%02x: "
    - "ignored (out of memory)\n", domain, busnum);
    - return NULL;
    - }
    /*
    * Maybe the desired pci bus has been already scanned. In such case
    * it is unnecessary to scan the pci bus with the given domain,busnum.
    @@ -442,7 +433,6 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_pci_root *root)
    */
    memcpy(bus->sysdata, sd, sizeof(*sd));
    kfree(info);
    - kfree(sd);
    } else {
    probe_pci_root_info(info, device, busnum, domain);

    @@ -484,9 +474,6 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_pci_root *root)
    }
    }

    - if (!bus)
    - kfree(sd);
    -
    if (bus && node != -1) {
    #ifdef CONFIG_ACPI_NUMA
    if (pxm >= 0)
    --
    1.7.7


    \
     
     \ /
      Last update: 2012-03-19 06:45    [W:0.020 / U:87.640 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site