diff --git a/repos/base/src/base/env/context_area.cc b/repos/base/src/base/env/context_area.cc index 618eafc37..aa60debc4 100644 --- a/repos/base/src/base/env/context_area.cc +++ b/repos/base/src/base/env/context_area.cc @@ -14,15 +14,32 @@ #include #include #include +#include + +using namespace Genode; -struct Context_area_rm_session : Genode::Rm_connection +struct Expanding_rm_connection : Connection, Expanding_rm_session_client +{ + /** + * Constructor + * + * \param start start of the managed VM-region + * \param size size of the VM-region to manage + */ + Expanding_rm_connection(addr_t start = ~0UL, size_t size = 0) : + Connection( + session("ram_quota=64K, start=0x%p, size=0x%zx", + start, size)), + Expanding_rm_session_client(cap()) { } +}; + + +struct Context_area_rm_session : Expanding_rm_connection { Context_area_rm_session() - : Genode::Rm_connection(0, Genode::Native_config::context_area_virtual_size()) + : Expanding_rm_connection(0, Native_config::context_area_virtual_size()) { - using namespace Genode; - addr_t local_base = Native_config::context_area_virtual_base(); size_t size = Native_config::context_area_virtual_size(); diff --git a/repos/base/src/base/env/platform_env.h b/repos/base/src/base/env/platform_env.h index 1b89dd643..47178969b 100644 --- a/repos/base/src/base/env/platform_env.h +++ b/repos/base/src/base/env/platform_env.h @@ -30,41 +30,11 @@ namespace Genode { - struct Expanding_rm_session_client; struct Expanding_cpu_session_client; class Platform_env; } -struct Genode::Expanding_rm_session_client -: - Upgradeable_client -{ - Expanding_rm_session_client(Rm_session_capability cap) - : Upgradeable_client(cap) { } - - Local_addr attach(Dataspace_capability ds, size_t size, off_t offset, - bool use_local_addr, Local_addr local_addr, - bool executable) - { - return retry( - [&] () { - return Rm_session_client::attach(ds, size, offset, - use_local_addr, - local_addr, - executable); }, - [&] () { upgrade_ram(8*1024); }); - } - - Pager_capability add_client(Thread_capability thread) - { - return retry( - [&] () { return Rm_session_client::add_client(thread); }, - [&] () { upgrade_ram(8*1024); }); - } -}; - - struct Genode::Expanding_cpu_session_client : Upgradeable_client { Expanding_cpu_session_client(Genode::Cpu_session_capability cap) diff --git a/repos/base/src/base/env/platform_env_common.h b/repos/base/src/base/env/platform_env_common.h index 563b2527a..b1891f65d 100644 --- a/repos/base/src/base/env/platform_env_common.h +++ b/repos/base/src/base/env/platform_env_common.h @@ -82,6 +82,35 @@ struct Upgradeable_client : CLIENT }; +struct Genode::Expanding_rm_session_client +: + Upgradeable_client +{ + Expanding_rm_session_client(Rm_session_capability cap) + : Upgradeable_client(cap) { } + + Local_addr attach(Dataspace_capability ds, size_t size, off_t offset, + bool use_local_addr, Local_addr local_addr, + bool executable) + { + return retry( + [&] () { + return Rm_session_client::attach(ds, size, offset, + use_local_addr, + local_addr, + executable); }, + [&] () { upgrade_ram(8*1024); }); + } + + Pager_capability add_client(Thread_capability thread) + { + return retry( + [&] () { return Rm_session_client::add_client(thread); }, + [&] () { upgrade_ram(8*1024); }); + } +}; + + struct Genode::Expanding_ram_session_client : Upgradeable_client { Expanding_ram_session_client(Ram_session_capability cap)