]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/iommu/rockchip-iommu.c
rtc: rx8010: return meaningful value for RTC_VL_READ
[linux.git] / drivers / iommu / rockchip-iommu.c
index 4dcbf68dfda436828ded5d86442d19e48fa62ff1..b33cdd5aad81b6fe1193152f57bff01c6c295bb9 100644 (file)
@@ -527,7 +527,7 @@ static irqreturn_t rk_iommu_irq(int irq, void *dev_id)
        int i, err;
 
        err = pm_runtime_get_if_in_use(iommu->dev);
-       if (WARN_ON_ONCE(err <= 0))
+       if (!err || WARN_ON_ONCE(err < 0))
                return ret;
 
        if (WARN_ON(clk_bulk_enable(iommu->num_clocks, iommu->clocks)))
@@ -758,7 +758,7 @@ static int rk_iommu_map_iova(struct rk_iommu_domain *rk_domain, u32 *pte_addr,
 }
 
 static int rk_iommu_map(struct iommu_domain *domain, unsigned long _iova,
-                       phys_addr_t paddr, size_t size, int prot)
+                       phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
        struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
        unsigned long flags;
@@ -980,13 +980,13 @@ static struct iommu_domain *rk_iommu_domain_alloc(unsigned type)
        if (!dma_dev)
                return NULL;
 
-       rk_domain = devm_kzalloc(dma_dev, sizeof(*rk_domain), GFP_KERNEL);
+       rk_domain = kzalloc(sizeof(*rk_domain), GFP_KERNEL);
        if (!rk_domain)
                return NULL;
 
        if (type == IOMMU_DOMAIN_DMA &&
            iommu_get_dma_cookie(&rk_domain->domain))
-               return NULL;
+               goto err_free_domain;
 
        /*
         * rk32xx iommus use a 2 level pagetable.
@@ -1021,6 +1021,8 @@ static struct iommu_domain *rk_iommu_domain_alloc(unsigned type)
 err_put_cookie:
        if (type == IOMMU_DOMAIN_DMA)
                iommu_put_dma_cookie(&rk_domain->domain);
+err_free_domain:
+       kfree(rk_domain);
 
        return NULL;
 }
@@ -1049,6 +1051,7 @@ static void rk_iommu_domain_free(struct iommu_domain *domain)
 
        if (domain->type == IOMMU_DOMAIN_DMA)
                iommu_put_dma_cookie(&rk_domain->domain);
+       kfree(rk_domain);
 }
 
 static int rk_iommu_add_device(struct device *dev)