summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJan Dabros <jsd@semihalf.com>2020-07-16 13:45:49 +0200
committerAngel Pons <th3fanbus@gmail.com>2020-07-30 17:13:28 +0000
commit821b1e2f28b875f353b30bcd6b286d3eeae85c7b (patch)
tree04bd4c1f57a390c601514f67014bf1ce35bff34a /src
parent1756e10a3460435a475c1bde06a2587e5da24d84 (diff)
lib/bootmem.c: Improve bootmem_allocate_buffer algorithm
Since regions in bootmem are sorted by increasing base address, we may bail out of the search loop as soon as the region_base is bigger than the max address allowed. Signed-off-by: Jan Dabros <jsd@semihalf.com> Change-Id: I44b44bf9618fd0615103cbf74271235d61d49473 Reviewed-on: https://review.coreboot.org/c/coreboot/+/43512 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Reviewed-by: Paul Fagerburg <pfagerburg@chromium.org> Reviewed-by: Julius Werner <jwerner@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src')
-rw-r--r--src/lib/bootmem.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/lib/bootmem.c b/src/lib/bootmem.c
index fa1f8bc6fd..1fe23c2828 100644
--- a/src/lib/bootmem.c
+++ b/src/lib/bootmem.c
@@ -231,15 +231,15 @@ void *bootmem_allocate_buffer(size_t size)
size = ALIGN(size, 4096);
region = NULL;
memranges_each_entry(r, &bootmem) {
+ if (range_entry_base(r) >= max_addr)
+ break;
+
if (range_entry_size(r) < size)
continue;
if (range_entry_tag(r) != BM_MEM_RAM)
continue;
- if (range_entry_base(r) >= max_addr)
- continue;
-
end = range_entry_end(r);
if (end > max_addr)
end = max_addr;