summaryrefslogtreecommitdiffstats
path: root/arch/arm/plat-omap/iovmm.c
diff options
context:
space:
mode:
authorHiroshi DOYU2010-05-06 15:10:18 +0200
committerHiroshi DOYU2010-05-14 09:23:36 +0200
commitfa460b88e0cc2b4254271be2da49e68d748db727 (patch)
treefc69bc8bd5e0572690d0c65735b90135330e554d /arch/arm/plat-omap/iovmm.c
parentomap iommu: Make CONFIG_OMAP_IOMMU_DEBUG selectable (diff)
downloadkernel-qcow2-linux-fa460b88e0cc2b4254271be2da49e68d748db727.tar.gz
kernel-qcow2-linux-fa460b88e0cc2b4254271be2da49e68d748db727.tar.xz
kernel-qcow2-linux-fa460b88e0cc2b4254271be2da49e68d748db727.zip
omap iommu: Insert a gap page between IOVMAs against override
Inserting a gap page between IOVMAs could detect an override on other IOVMA with iommu fault. This was originally suggested by Sakari Ailus and based on the work and comment by David Cohen. Signed-off-by: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> Cc: David Cohen <david.cohen@nokia.com> Cc: Sakari Ailus <Sakari.Ailus@nokia.com>
Diffstat (limited to 'arch/arm/plat-omap/iovmm.c')
-rw-r--r--arch/arm/plat-omap/iovmm.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/arm/plat-omap/iovmm.c b/arch/arm/plat-omap/iovmm.c
index 65c6d1ff7237..5afe0135b979 100644
--- a/arch/arm/plat-omap/iovmm.c
+++ b/arch/arm/plat-omap/iovmm.c
@@ -287,16 +287,16 @@ static struct iovm_struct *alloc_iovm_area(struct iommu *obj, u32 da,
prev_end = 0;
list_for_each_entry(tmp, &obj->mmap, list) {
- if ((prev_end <= start) && (start + bytes < tmp->da_start))
+ if ((prev_end < start) && (start + bytes < tmp->da_start))
goto found;
if (flags & IOVMF_DA_ANON)
- start = roundup(tmp->da_end, alignement);
+ start = roundup(tmp->da_end + 1, alignement);
prev_end = tmp->da_end;
}
- if ((start >= prev_end) && (ULONG_MAX - start >= bytes))
+ if ((start > prev_end) && (ULONG_MAX - start >= bytes))
goto found;
dev_dbg(obj->dev, "%s: no space to fit %08x(%x) flags: %08x\n",