summaryrefslogtreecommitdiff
path: root/payloads/libpayload/arch/arm64
diff options
context:
space:
mode:
authorJulius Werner <jwerner@chromium.org>2016-08-05 10:37:52 -0700
committerMartin Roth <martinroth@google.com>2016-08-08 17:35:31 +0200
commit41ddd4fcc1d2f7f2eccfa2a5795da5d49e09f18d (patch)
treee21b119d48d3fe822e7f665e42fe939a2bd1995d /payloads/libpayload/arch/arm64
parent98c65c1b0167d47e0eb0c362d8edc40a9fab085b (diff)
libpayload: arm64: Fix MMU range overlap check
The ARM64 MMU code maintains a list of used ranges, to avoid mapping the DMA buffer over the coreboot tables and things like that. Unfortunately, the overlap with ranges in that list is checked with (start1 >= start2 && start1 <= end2) || (end1 >= start2 && end1 <= end2) which is not a full overlap check and misses the case where the second region is completely contained within the first. This patch replaces that code with a properly vetted primitive from Stack Overflow. BRANCH=none BUG=chrome-os-partner:54416 TEST=Observe how Kevin recovery screen now gets drawn at 10x the speed. Change-Id: I7e2706426762794e160d743bbfc40da1e26eee12 Signed-off-by: Julius Werner <jwerner@chromium.org> Reviewed-on: https://review.coreboot.org/16075 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'payloads/libpayload/arch/arm64')
-rw-r--r--payloads/libpayload/arch/arm64/mmu.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/payloads/libpayload/arch/arm64/mmu.c b/payloads/libpayload/arch/arm64/mmu.c
index 50e7f6cd17..d84f969dc6 100644
--- a/payloads/libpayload/arch/arm64/mmu.c
+++ b/payloads/libpayload/arch/arm64/mmu.c
@@ -441,8 +441,7 @@ static int mmu_is_range_free(uint64_t r_base,
uint64_t start = r[i].base;
uint64_t end = start + r[i].size;
- if (((r_base >= start) && (r_base <= end)) ||
- ((r_end >= start) && (r_end <= end)))
+ if ((start < r_end) && (end > r_base))
return 0;
}