iommu/omap: Remove refcount field from omap_iommu object
authorSuman Anna <s-anna@ti.com>
Wed, 22 Oct 2014 22:22:19 +0000 (17:22 -0500)
committerJoerg Roedel <jroedel@suse.de>
Thu, 23 Oct 2014 12:32:25 +0000 (14:32 +0200)
The refcount field in omap_iommu object is primarily used to check
if an IOMMU device has already been enabled, but this is already
implicit in the omap_iommu_attach_dev() which ensures that only
a single device can attach to an IOMMU. This field is redundant,
and so has been cleaned up.

Signed-off-by: Suman Anna <s-anna@ti.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/omap-iommu.c
drivers/iommu/omap-iommu.h

index 36278870e84a7b1d7350772beb2c8e2aee11fa40..ea04e4d30bbfc44e039995ac0ccfb161eb49f956 100644 (file)
@@ -819,8 +819,9 @@ static irqreturn_t iommu_fault_handler(int irq, void *data)
        u32 *iopgd, *iopte;
        struct omap_iommu *obj = data;
        struct iommu_domain *domain = obj->domain;
+       struct omap_iommu_domain *omap_domain = domain->priv;
 
-       if (!obj->refcount)
+       if (!omap_domain->iommu_dev)
                return IRQ_NONE;
 
        errs = iommu_report_fault(obj, &da);
@@ -880,13 +881,6 @@ static struct omap_iommu *omap_iommu_attach(const char *name, u32 *iopgd)
 
        spin_lock(&obj->iommu_lock);
 
-       /* an iommu device can only be attached once */
-       if (++obj->refcount > 1) {
-               dev_err(dev, "%s: already attached!\n", obj->name);
-               err = -EBUSY;
-               goto err_enable;
-       }
-
        obj->iopgd = iopgd;
        err = iommu_enable(obj);
        if (err)
@@ -899,7 +893,6 @@ static struct omap_iommu *omap_iommu_attach(const char *name, u32 *iopgd)
        return obj;
 
 err_enable:
-       obj->refcount--;
        spin_unlock(&obj->iommu_lock);
        return ERR_PTR(err);
 }
@@ -915,9 +908,7 @@ static void omap_iommu_detach(struct omap_iommu *obj)
 
        spin_lock(&obj->iommu_lock);
 
-       if (--obj->refcount == 0)
-               iommu_disable(obj);
-
+       iommu_disable(obj);
        obj->iopgd = NULL;
 
        spin_unlock(&obj->iommu_lock);
index 4f1b68c08c1506271751d1aaf43019f437ad963a..5c1400024e35cf45962c7d52de8e477d62e90115 100644 (file)
@@ -33,7 +33,6 @@ struct omap_iommu {
        void            *isr_priv;
        struct iommu_domain *domain;
 
-       unsigned int    refcount;
        spinlock_t      iommu_lock;     /* global for this whole object */
 
        /*