Integrate core's RAM service into the PD service

Fixes #2407
This commit is contained in:
Norman Feske
2017-05-11 20:03:28 +02:00
committed by Christian Helmuth
parent 5a3a1c704b
commit 0167d5af50
93 changed files with 871 additions and 1545 deletions

View File

@ -8,7 +8,7 @@ SRC_CC = main.cc \
platform.cc \
platform_thread.cc \
platform_services.cc \
ram_session_component.cc \
pd_session_component.cc \
ram_dataspace_support.cc \
rom_session_component.cc \
cpu_session_component.cc \
@ -48,7 +48,7 @@ LD_SCRIPT_STATIC = $(BASE_DIR)/src/ld/genode.ld \
include $(GEN_CORE_DIR)/version.inc
vpath main.cc $(GEN_CORE_DIR)
vpath ram_session_component.cc $(GEN_CORE_DIR)
vpath pd_session_component.cc $(GEN_CORE_DIR)
vpath cpu_session_component.cc $(GEN_CORE_DIR)
vpath cpu_session_support.cc $(GEN_CORE_DIR)
vpath cpu_thread_component.cc $(GEN_CORE_DIR)

View File

@ -19,6 +19,7 @@
#include <linux_native_cpu/client.h>
/* base-internal includes */
#include <base/internal/expanding_pd_session_client.h>
#include <base/internal/local_capability.h>
#include <base/internal/region_map_mmap.h>
#include <base/internal/stack_area.h>
@ -26,13 +27,13 @@
namespace Genode { struct Local_pd_session; }
struct Genode::Local_pd_session : Pd_session_client
struct Genode::Local_pd_session : Expanding_pd_session_client
{
Region_map_mmap _address_space { false };
Region_map_mmap _stack_area { true, stack_area_virtual_size() };
Region_map_mmap _linker_area { true, Pd_session::LINKER_AREA_SIZE };
Local_pd_session(Pd_session_capability pd) : Pd_session_client(pd) { }
Local_pd_session(Pd_session_capability pd) : Expanding_pd_session_client(pd) { }
Capability<Region_map> address_space()
{

View File

@ -21,7 +21,7 @@
/* base-internal includes */
#include <base/internal/expanding_cpu_session_client.h>
#include <base/internal/expanding_region_map_client.h>
#include <base/internal/expanding_ram_session_client.h>
#include <base/internal/expanding_pd_session_client.h>
#include <base/internal/expanding_parent_client.h>
#include <base/internal/region_map_mmap.h>
#include <base/internal/local_rm_session.h>
@ -42,8 +42,6 @@ class Genode::Platform_env_base : public Env_deprecated
{
private:
Ram_session_capability _ram_session_cap;
Expanding_ram_session_client _ram_session_client;
Cpu_session_capability _cpu_session_cap;
Expanding_cpu_session_client _cpu_session_client;
Region_map_mmap _region_map_mmap;
@ -64,12 +62,9 @@ class Genode::Platform_env_base : public Env_deprecated
/**
* Constructor
*/
Platform_env_base(Ram_session_capability ram_cap,
Cpu_session_capability cpu_cap,
Platform_env_base(Cpu_session_capability cpu_cap,
Pd_session_capability pd_cap)
:
_ram_session_cap(ram_cap),
_ram_session_client(_ram_session_cap, Parent::Env::ram()),
_cpu_session_cap(cpu_cap),
_cpu_session_client(cpu_cap, Parent::Env::cpu()),
_region_map_mmap(false),
@ -77,13 +72,21 @@ class Genode::Platform_env_base : public Env_deprecated
_local_pd_session(_pd_session_cap)
{ }
/**
* Constructor used by 'Core_env'
*/
Platform_env_base()
:
Platform_env_base(Cpu_session_capability(), Pd_session_capability())
{ }
/******************************
** Env_deprecated interface **
******************************/
Ram_session *ram_session() override { return &_ram_session_client; }
Ram_session_capability ram_session_cap() override { return _ram_session_cap; }
Ram_session *ram_session() override { return &_local_pd_session; }
Ram_session_capability ram_session_cap() override { return _pd_session_cap; }
Region_map *rm_session() override { return &_region_map_mmap; }
Cpu_session *cpu_session() override { return &_cpu_session_client; }
Cpu_session_capability cpu_session_cap() override { return _cpu_session_cap; }

View File

@ -155,8 +155,7 @@ Local_parent &Platform_env::_parent()
Platform_env::Platform_env()
:
Platform_env_base(static_cap_cast<Ram_session>(_parent().session_cap(Parent::Env::ram())),
static_cap_cast<Cpu_session>(_parent().session_cap(Parent::Env::cpu())),
Platform_env_base(static_cap_cast<Cpu_session>(_parent().session_cap(Parent::Env::cpu())),
static_cap_cast<Pd_session> (_parent().session_cap(Parent::Env::pd()))),
_heap(Platform_env_base::ram_session(), Platform_env_base::rm_session()),
_emergency_ram_ds(ram_session()->alloc(_emergency_ram_size()))

View File

@ -12,7 +12,7 @@
*/
#include <base/component.h>
#include <ram_session/connection.h>
#include <pd_session/connection.h>
#include <timer_session/connection.h>
using namespace Genode;
@ -22,17 +22,16 @@ static void test_linux_rmmap_bug(Env &env)
enum { QUOTA = 1*1024*1024, CHUNK = 0x1000, ROUNDS = 0x10 };
log("line: ", __LINE__);
Ram_connection ram(env);
Pd_connection pd(env);
#if 1 /* transfer quota */
log("line: ", __LINE__);
ram.ref_account(env.ram_session_cap());
env.ram().transfer_quota(ram.cap(), QUOTA);
#endif
pd.ref_account(env.pd_session_cap());
env.pd().transfer_quota(pd.cap(), Ram_quota{QUOTA});
env.pd().transfer_quota(pd.cap(), Cap_quota{30});
log("line: ", __LINE__);
for (unsigned i = 0; i < ROUNDS; ++i) {
Ram_dataspace_capability ds(ram.alloc(CHUNK));
Ram_dataspace_capability ds(pd.alloc(CHUNK));
log(i + 1, " of ", (unsigned)ROUNDS, " pages allocated");
}