diff --git a/repos/base/include/base/allocator.h b/repos/base/include/base/allocator.h index 17729af42f..8e30fae253 100644 --- a/repos/base/include/base/allocator.h +++ b/repos/base/include/base/allocator.h @@ -163,7 +163,7 @@ struct Genode::Range_allocator : Allocator * \param align alignment of new block specified * as the power of two */ - virtual Alloc_return alloc_aligned(size_t size, void **out_addr, int align = 0, addr_t from=0, addr_t to = ~0UL) = 0; + virtual Alloc_return alloc_aligned(size_t size, void **out_addr, int align, addr_t from=0, addr_t to = ~0UL) = 0; /** * Allocate block at address diff --git a/repos/base/include/base/allocator_avl.h b/repos/base/include/base/allocator_avl.h index 2b7fab37de..376b90f18f 100644 --- a/repos/base/include/base/allocator_avl.h +++ b/repos/base/include/base/allocator_avl.h @@ -131,7 +131,7 @@ class Genode::Allocator_avl_base : public Range_allocator /** * Find best-fitting block */ - Block *find_best_fit(size_t size, unsigned align = 1, + Block *find_best_fit(size_t size, unsigned align, addr_t from = 0UL, addr_t to = ~0UL); /** @@ -260,7 +260,7 @@ class Genode::Allocator_avl_base : public Range_allocator int add_range(addr_t base, size_t size) override; int remove_range(addr_t base, size_t size) override; - Alloc_return alloc_aligned(size_t size, void **out_addr, int align = 0, + Alloc_return alloc_aligned(size_t size, void **out_addr, int align, addr_t from = 0, addr_t to = ~0UL) override; Alloc_return alloc_addr(size_t size, addr_t addr) override; void free(void *addr) override; @@ -272,8 +272,11 @@ class Genode::Allocator_avl_base : public Range_allocator ** Allocator interface ** *************************/ - bool alloc(size_t size, void **out_addr) override { - return (Allocator_avl_base::alloc_aligned(size, out_addr).is_ok()); } + bool alloc(size_t size, void **out_addr) override + { + return (Allocator_avl_base::alloc_aligned( + size, out_addr, log2(sizeof(addr_t))).is_ok()); + } void free(void *addr, size_t) override { free(addr); } diff --git a/repos/base/src/core/include/core_mem_alloc.h b/repos/base/src/core/include/core_mem_alloc.h index ceedc335aa..25d5eda827 100644 --- a/repos/base/src/core/include/core_mem_alloc.h +++ b/repos/base/src/core/include/core_mem_alloc.h @@ -159,7 +159,7 @@ class Genode::Mapped_mem_allocator : public Genode::Core_mem_translator int add_range(addr_t base, size_t size) override { return -1; } int remove_range(addr_t base, size_t size) override { return -1; } Alloc_return alloc_aligned(size_t size, void **out_addr, - int align = 0, addr_t from = 0, + int align, addr_t from = 0, addr_t to = ~0UL) override; Alloc_return alloc_addr(size_t size, addr_t addr) override { return Alloc_return::RANGE_CONFLICT; } @@ -174,7 +174,7 @@ class Genode::Mapped_mem_allocator : public Genode::Core_mem_translator *************************/ bool alloc(size_t size, void **out_addr) override { - return alloc_aligned(size, out_addr).is_ok(); } + return alloc_aligned(size, out_addr, log2(sizeof(addr_t))).is_ok(); } void free(void *addr, size_t) override; size_t consumed() const override { return _phys_alloc->consumed(); } size_t overhead(size_t size) const override { @@ -277,7 +277,7 @@ class Genode::Core_mem_allocator : public Genode::Core_mem_translator Alloc_return alloc_addr(size_t size, addr_t addr) override { return Alloc_return::RANGE_CONFLICT; } - Alloc_return alloc_aligned(size_t size, void **out_addr, int align = 0, + Alloc_return alloc_aligned(size_t size, void **out_addr, int align, addr_t from = 0, addr_t to = ~0UL) override { Lock::Guard lock_guard(_lock); @@ -300,7 +300,7 @@ class Genode::Core_mem_allocator : public Genode::Core_mem_translator *************************/ bool alloc(size_t size, void **out_addr) override { - return alloc_aligned(size, out_addr).is_ok(); } + return alloc_aligned(size, out_addr, log2(sizeof(addr_t))).is_ok(); } void free(void *addr, size_t size) override { diff --git a/repos/base/src/core/include/synced_range_allocator.h b/repos/base/src/core/include/synced_range_allocator.h index df84c3cd81..c3ec4b978c 100644 --- a/repos/base/src/core/include/synced_range_allocator.h +++ b/repos/base/src/core/include/synced_range_allocator.h @@ -91,7 +91,7 @@ class Genode::Synced_range_allocator : public Range_allocator int remove_range(addr_t base, size_t size) override { return _synced_object()->remove_range(base, size); } - Alloc_return alloc_aligned(size_t size, void **out_addr, int align = 0, + Alloc_return alloc_aligned(size_t size, void **out_addr, int align, addr_t from = 0, addr_t to = ~0UL) override { return _synced_object()->alloc_aligned(size, out_addr, align, from, to); }