lkml.org 
[lkml]   [2014]   [Feb]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[Patch Part2 V2 07/17] iommu/vt-d: free resources if failed to create domain for PCIe endpoint
    Date
    Enhance function get_domain_for_dev() to release allocated resources
    if failed to create domain for PCIe endpoint, otherwise the allocated
    resources will get lost.

    Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
    ---
    drivers/iommu/intel-iommu.c | 15 ++++++++-------
    1 file changed, 8 insertions(+), 7 deletions(-)

    diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
    index 67b114e..503cc73 100644
    --- a/drivers/iommu/intel-iommu.c
    +++ b/drivers/iommu/intel-iommu.c
    @@ -2015,7 +2015,7 @@ static int dmar_insert_dev_info(int segment, int bus, int devfn,
    /* domain is initialized */
    static struct dmar_domain *get_domain_for_dev(struct pci_dev *pdev, int gaw)
    {
    - struct dmar_domain *domain;
    + struct dmar_domain *domain, *free = NULL;
    struct intel_iommu *iommu;
    struct dmar_drhd_unit *drhd;
    struct pci_dev *dev_tmp;
    @@ -2062,17 +2062,16 @@ static struct dmar_domain *get_domain_for_dev(struct pci_dev *pdev, int gaw)
    free_domain_mem(domain);
    goto error;
    }
    - if (domain_init(domain, gaw)) {
    - domain_exit(domain);
    + free = domain;
    + if (domain_init(domain, gaw))
    goto error;
    - }

    /* register pcie-to-pci device */
    if (dev_tmp) {
    - if (dmar_insert_dev_info(segment, bus, devfn, NULL, &domain)) {
    - domain_exit(domain);
    + if (dmar_insert_dev_info(segment, bus, devfn, NULL, &domain))
    goto error;
    - }
    + else
    + free = NULL;
    }

    found_domain:
    @@ -2080,6 +2079,8 @@ found_domain:
    pdev, &domain) == 0)
    return domain;
    error:
    + if (free)
    + domain_exit(free);
    /* recheck it here, maybe others set it */
    return find_domain(pdev);
    }
    --
    1.7.10.4


    \
     
     \ /
      Last update: 2014-02-19 08:01    [W:6.356 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site