mirror of
https://github.com/mmueller41/genode.git
synced 2026-01-21 20:42:56 +01:00
core: re-design memory allocator (fix #1091)
* Core_mem_allocator: implement Range_allocator interface * Core_mem_allocator: allocate with page-granularity only * Use slab allocators in core where meaningful (e.g. dataspace objects)
This commit is contained in:
committed by
Norman Feske
parent
36bfb56e49
commit
0dece91973
@@ -60,7 +60,7 @@ namespace Genode {
|
||||
Range_allocator *io_port_alloc() { return &_io_port_alloc; }
|
||||
Range_allocator *irq_alloc() { return &_irq_alloc; }
|
||||
Range_allocator *region_alloc() { return _core_mem_alloc.virt_alloc(); }
|
||||
Allocator *core_mem_alloc() { return &_core_mem_alloc; }
|
||||
Range_allocator *core_mem_alloc() { return &_core_mem_alloc; }
|
||||
addr_t vm_start() const { return _vm_base; }
|
||||
size_t vm_size() const { return _vm_size; }
|
||||
Rom_fs *rom_fs() { return &_rom_fs; }
|
||||
|
||||
@@ -23,9 +23,9 @@
|
||||
|
||||
namespace Genode {
|
||||
|
||||
inline size_t get_page_size_log2() { return 12; }
|
||||
inline size_t get_page_size() { return 1 << get_page_size_log2(); }
|
||||
inline addr_t get_page_mask() { return ~(get_page_size() - 1); }
|
||||
constexpr size_t get_page_size_log2() { return 12; }
|
||||
constexpr size_t get_page_size() { return 1 << get_page_size_log2(); }
|
||||
constexpr addr_t get_page_mask() { return ~(get_page_size() - 1); }
|
||||
inline addr_t trunc_page(addr_t addr) { return addr & get_page_mask(); }
|
||||
inline addr_t round_page(addr_t addr) { return trunc_page(addr + get_page_size() - 1); }
|
||||
|
||||
|
||||
@@ -126,9 +126,15 @@ int Platform::_init_rom_fs()
|
||||
** Support for core memory management **
|
||||
****************************************/
|
||||
|
||||
bool Core_mem_allocator::Mapped_mem_allocator::_map_local(addr_t virt_addr, addr_t phys_addr, unsigned size_log2)
|
||||
bool Core_mem_allocator::_map_local(addr_t virt_addr, addr_t phys_addr, unsigned size)
|
||||
{
|
||||
return map_local(phys_addr, virt_addr, 1 << (size_log2 - get_page_size_log2()));
|
||||
return map_local(phys_addr, virt_addr, size / get_page_size());
|
||||
}
|
||||
|
||||
|
||||
bool Core_mem_allocator::_unmap_local(addr_t virt_addr, unsigned size)
|
||||
{
|
||||
return unmap_local(virt_addr, size / get_page_size());
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user