diff --git a/repos/base/include/base/slab.h b/repos/base/include/base/slab.h index cf6b397771..a8eb1f87eb 100644 --- a/repos/base/include/base/slab.h +++ b/repos/base/include/base/slab.h @@ -40,7 +40,7 @@ class Genode::Slab_block enum { FREE, USED }; Slab *_slab; /* back reference to slab allocator */ - unsigned _avail; /* free entries of this block */ + size_t _avail; /* free entries of this block */ /* * Each slab block consists of three areas, a fixed-size header diff --git a/repos/base/src/base/allocator/slab.cc b/repos/base/src/base/allocator/slab.cc index c72e3a36cf..57d5d39844 100644 --- a/repos/base/src/base/allocator/slab.cc +++ b/repos/base/src/base/allocator/slab.cc @@ -45,7 +45,7 @@ Slab_entry *Slab_block::slab_entry(int idx) * of 'num_elem' bytes. We align the first slot to a four-aligned * address. */ - return (Slab_entry *)&_data[align_addr(_slab->num_elem(), 2) + return (Slab_entry *)&_data[align_addr(_slab->num_elem(), log2(sizeof(addr_t))) + _slab->entry_size()*idx]; } diff --git a/repos/base/src/base/heap/heap.cc b/repos/base/src/base/heap/heap.cc index 2018c7658c..47da4e66f4 100644 --- a/repos/base/src/base/heap/heap.cc +++ b/repos/base/src/base/heap/heap.cc @@ -87,7 +87,7 @@ Heap::Dataspace *Heap::_allocate_dataspace(size_t size, bool enforce_separate_me _alloc.add_range((addr_t)ds_addr, size); /* allocate the Dataspace structure */ - if (_alloc.alloc_aligned(sizeof(Heap::Dataspace), &ds_meta_data_addr, 2).is_error()) { + if (_alloc.alloc_aligned(sizeof(Heap::Dataspace), &ds_meta_data_addr, log2(sizeof(addr_t))).is_error()) { PWRN("could not allocate dataspace meta data - this should never happen"); return 0; } @@ -104,7 +104,7 @@ Heap::Dataspace *Heap::_allocate_dataspace(size_t size, bool enforce_separate_me bool Heap::_try_local_alloc(size_t size, void **out_addr) { - if (_alloc.alloc_aligned(size, out_addr, 2).is_error()) + if (_alloc.alloc_aligned(size, out_addr, log2(sizeof(addr_t))).is_error()) return false; _quota_used += size;