omap iommu: Introduce iopgd_is_table MACRO
authorHiroshi DOYU <Hiroshi.DOYU@nokia.com>
Thu, 13 May 2010 06:45:35 +0000 (09:45 +0300)
committerHiroshi DOYU <Hiroshi.DOYU@nokia.com>
Tue, 29 Jun 2010 04:55:04 +0000 (07:55 +0300)
A bit more strict comparison.

Signed-off-by: Hiroshi DOYU <Hiroshi.DOYU@nokia.com>
arch/arm/plat-omap/iommu.c
arch/arm/plat-omap/iopgtable.h

index bc094db..341c481 100644 (file)
@@ -653,7 +653,7 @@ void iopgtable_lookup_entry(struct iommu *obj, u32 da, u32 **ppgd, u32 **ppte)
        if (!*iopgd)
                goto out;
 
-       if (*iopgd & IOPGD_TABLE)
+       if (iopgd_is_table(*iopgd))
                iopte = iopte_offset(iopgd, da);
 out:
        *ppgd = iopgd;
@@ -670,7 +670,7 @@ static size_t iopgtable_clear_entry_core(struct iommu *obj, u32 da)
        if (!*iopgd)
                return 0;
 
-       if (*iopgd & IOPGD_TABLE) {
+       if (iopgd_is_table(*iopgd)) {
                int i;
                u32 *iopte = iopte_offset(iopgd, da);
 
@@ -745,7 +745,7 @@ static void iopgtable_clear_entry_all(struct iommu *obj)
                if (!*iopgd)
                        continue;
 
-               if (*iopgd & IOPGD_TABLE)
+               if (iopgd_is_table(*iopgd))
                        iopte_free(iopte_offset(iopgd, 0));
 
                *iopgd = 0;
@@ -785,7 +785,7 @@ static irqreturn_t iommu_fault_handler(int irq, void *data)
 
        iopgd = iopgd_offset(obj, da);
 
-       if (!(*iopgd & IOPGD_TABLE)) {
+       if (!iopgd_is_table(*iopgd)) {
                dev_err(obj->dev, "%s: da:%08x pgd:%p *pgd:%08x\n", __func__,
                        da, iopgd, *iopgd);
                return IRQ_NONE;
index ab23b6a..f2e6b64 100644 (file)
@@ -63,6 +63,8 @@
 #define IOPGD_SECTION          (2 << 0)
 #define IOPGD_SUPER            (1 << 18 | 2 << 0)
 
+#define iopgd_is_table(x)      (((x) & 3) == IOPGD_TABLE)
+
 #define IOPTE_SMALL            (2 << 0)
 #define IOPTE_LARGE            (1 << 0)