From a894a008eb1ecc409ab938687d0b8c00760f33f1 Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Tue, 29 Nov 2022 12:18:50 +0100 Subject: [PATCH] core: Allocate dataspaces with cache-alignment. --- repos/base/src/lib/base/regional_heap.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/repos/base/src/lib/base/regional_heap.cc b/repos/base/src/lib/base/regional_heap.cc index 0b66fd88b3..2ca2a36d08 100644 --- a/repos/base/src/lib/base/regional_heap.cc +++ b/repos/base/src/lib/base/regional_heap.cc @@ -130,7 +130,7 @@ Regional_heap::_allocate_dataspace(size_t size, bool enforce_separate_metadata) /* add new local address range to our local allocator */ _alloc->add_range((addr_t)attach_guard.ptr, size).with_result( [&] (Range_allocator::Range_ok) { - metadata = _alloc->alloc_aligned(sizeof(Regional_heap::Dataspace), log2(16U)); }, + metadata = _alloc->alloc_aligned(sizeof(Regional_heap::Dataspace), log2(64U)); }, [&] (Alloc_error error) { metadata = error; }); } @@ -153,7 +153,7 @@ Regional_heap::_allocate_dataspace(size_t size, bool enforce_separate_metadata) Allocator::Alloc_result Regional_heap::_try_local_alloc(size_t size) { - return _alloc->alloc_aligned(size, log2(16U)).convert( + return _alloc->alloc_aligned(size, log2(64U)).convert( [&] (void *ptr) { _quota_used += size; @@ -236,6 +236,7 @@ Allocator::Alloc_result Regional_heap::_unsynchronized_alloc(size_t size) Allocator::Alloc_result Regional_heap::try_alloc(size_t size) { + if (size == 0) error("attempt to allocate zero-size block from heap"); @@ -291,7 +292,8 @@ void Regional_heap::free(void *addr, size_t) break; if (!ds) { - warning("heap could not free memory block: invalid address"); + //warning("heap could not free memory block: invalid address"); + throw Region_map::Invalid_dataspace(); return; }