From 5b9a61fcb99815c0e82d97fb9a6a237679311a6b Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Mon, 4 Jul 2016 14:49:32 +0200 Subject: [PATCH] sel4: properly detach core local regions Issue #2044 --- repos/base-sel4/src/core/core_region_map.cc | 6 +++++- repos/base-sel4/src/core/include/platform.h | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/repos/base-sel4/src/core/core_region_map.cc b/repos/base-sel4/src/core/core_region_map.cc index 2a463fe183..6401add1c1 100644 --- a/repos/base-sel4/src/core/core_region_map.cc +++ b/repos/base-sel4/src/core/core_region_map.cc @@ -66,4 +66,8 @@ Core_region_map::attach(Dataspace_capability ds_cap, size_t size, } -void Core_region_map::detach(Local_addr) { } +void Core_region_map::detach(Local_addr core_local_addr) +{ + size_t size = platform_specific()->region_alloc_size_at(core_local_addr); + unmap_local(core_local_addr, size >> get_page_size_log2()); +} diff --git a/repos/base-sel4/src/core/include/platform.h b/repos/base-sel4/src/core/include/platform.h index 9d9cee387c..a39ca652df 100644 --- a/repos/base-sel4/src/core/include/platform.h +++ b/repos/base-sel4/src/core/include/platform.h @@ -193,6 +193,14 @@ class Genode::Platform : public Platform_generic Cap_sel asid_pool() const { return _asid_pool_sel; } void wait_for_exit(); + + /** + * Determine size of a core local mapping required for a + * core_rm_session detach(). + */ + size_t region_alloc_size_at(void * addr) { + return (*_core_mem_alloc.virt_alloc())()->size_at(addr); } + }; #endif /* _CORE__INCLUDE__PLATFORM_H_ */