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 e0a49a1e67..c1db6d55ce 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);