aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHiroshi DOYU <Hiroshi.DOYU@nokia.com>2010-05-06 09:10:18 -0400
committerHiroshi DOYU <Hiroshi.DOYU@nokia.com>2010-05-14 03:23:36 -0400
commitfa460b88e0cc2b4254271be2da49e68d748db727 (patch)
treefc69bc8bd5e0572690d0c65735b90135330e554d
parent347815fcc63ac4c4a975bf3ca2c889c2f843ae0d (diff)
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>
-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 65c6d1ff723..5afe0135b97 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,
287 prev_end = 0; 287 prev_end = 0;
288 list_for_each_entry(tmp, &obj->mmap, list) { 288 list_for_each_entry(tmp, &obj->mmap, list) {
289 289
290 if ((prev_end <= start) && (start + bytes < tmp->da_start)) 290 if ((prev_end < start) && (start + bytes < tmp->da_start))
291 goto found; 291 goto found;
292 292
293 if (flags & IOVMF_DA_ANON) 293 if (flags & IOVMF_DA_ANON)
294 start = roundup(tmp->da_end, alignement); 294 start = roundup(tmp->da_end + 1, alignement);
295 295
296 prev_end = tmp->da_end; 296 prev_end = tmp->da_end;
297 } 297 }
298 298
299 if ((start >= prev_end) && (ULONG_MAX - start >= bytes)) 299 if ((start > prev_end) && (ULONG_MAX - start >= bytes))
300 goto found; 300 goto found;
301 301
302 dev_dbg(obj->dev, "%s: no space to fit %08x(%x) flags: %08x\n", 302 dev_dbg(obj->dev, "%s: no space to fit %08x(%x) flags: %08x\n",