From 119b9f9c2cb098714d77fab21d15ea8d274cad78 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Thu, 15 Mar 2018 13:29:13 +0100 Subject: [PATCH] nic_router: alloc specific bits at bit allocator Method to allocate specific bits at a Bit_allocator_dynamic Ref #2670 --- .../os/src/server/nic_router/bit_allocator_dynamic.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/repos/os/src/server/nic_router/bit_allocator_dynamic.h b/repos/os/src/server/nic_router/bit_allocator_dynamic.h index e0a49a1e6..c1db6d55c 100644 --- a/repos/os/src/server/nic_router/bit_allocator_dynamic.h +++ b/repos/os/src/server/nic_router/bit_allocator_dynamic.h @@ -179,6 +179,7 @@ class Genode::Bit_allocator_dynamic public: struct Out_of_indices : Exception { }; + struct Range_conflict : Exception { }; addr_t alloc(size_t const num_log2 = 0) { @@ -206,6 +207,17 @@ class Genode::Bit_allocator_dynamic throw Out_of_indices(); } + void alloc_addr(addr_t const bit_start, size_t const num_log2 = 0) + { + addr_t const step = 1UL << num_log2; + if (_array.get(bit_start, step)) + throw Range_conflict(); + + _array.set(bit_start, step); + _next = bit_start + step; + return; + } + void free(addr_t const bit_start, size_t const num_log2 = 0) { _array.clear(bit_start, 1UL << num_log2);