From 9a573968a2c66c12f97aa032bee711c4ec48c4eb Mon Sep 17 00:00:00 2001 From: David Karoly Date: Fri, 21 Jan 2022 10:20:53 +0100 Subject: [PATCH] boot/efi/arm: use insert_address_range for virtual_ranges_to_keep Change-Id: Iaf67838e8ef3d9a9494791945bd777b92315a948 Reviewed-on: https://review.haiku-os.org/c/haiku/+/4877 Tested-by: Commit checker robot Reviewed-by: Fredrik Holmqvist Reviewed-by: Adrien Destugues --- .../boot/platform/efi/arch/arm/arch_mmu.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/system/boot/platform/efi/arch/arm/arch_mmu.cpp b/src/system/boot/platform/efi/arch/arm/arch_mmu.cpp index 5e1f029195..3b57e14952 100644 --- a/src/system/boot/platform/efi/arch/arm/arch_mmu.cpp +++ b/src/system/boot/platform/efi/arch/arm/arch_mmu.cpp @@ -98,14 +98,17 @@ map_range(addr_t virt_addr, phys_addr_t phys_addr, size_t size, uint32_t flags) static void -insert_virtual_range_to_keep(const addr_range& range) +insert_virtual_range_to_keep(uint64 start, uint64 size) { - if (gKernelArgs.arch_args.num_virtual_ranges_to_keep - >= MAX_VIRTUAL_RANGES_TO_KEEP) - panic("too many virtual ranges to keep"); + status_t status = insert_address_range( + gKernelArgs.arch_args.virtual_ranges_to_keep, + &gKernelArgs.arch_args.num_virtual_ranges_to_keep, + MAX_VIRTUAL_RANGES_TO_KEEP, start, size); - gKernelArgs.arch_args.virtual_ranges_to_keep[ - gKernelArgs.arch_args.num_virtual_ranges_to_keep++] = range; + if (status == B_ENTRY_NOT_FOUND) + panic("too many virtual ranges to keep"); + else if (status != B_OK) + panic("failed to add virtual range to keep"); } @@ -124,7 +127,7 @@ map_range_to_new_area(addr_range& range, uint32_t flags) range.start = virt_addr; - insert_virtual_range_to_keep(range); + insert_virtual_range_to_keep(range.start, range.size); } @@ -134,7 +137,7 @@ map_range_to_new_area(efi_memory_descriptor *entry, uint32_t flags) uint64_t size = entry->NumberOfPages * B_PAGE_SIZE; entry->VirtualStart = get_next_virtual_address(size); map_range(entry->VirtualStart, entry->PhysicalStart, size, flags); - insert_virtual_range_to_keep({start: entry->VirtualStart, size: size}); + insert_virtual_range_to_keep(entry->VirtualStart, size); }