|
@@ -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",
|