From ea7ed5947a1260025e1a57a899ac95be45c585bd Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Thu, 21 Feb 2013 16:52:12 +0100 Subject: [PATCH] base: hand over Pd_connection label to Platform_pd fix: #656 --- base-codezero/src/core/include/platform_pd.h | 2 +- base-codezero/src/core/platform_pd.cc | 3 ++- base-fiasco/src/core/include/platform.h | 1 + base-fiasco/src/core/include/platform_pd.h | 3 ++- base-fiasco/src/core/platform.cc | 3 ++- base-fiasco/src/core/platform_pd.cc | 2 +- base-host/src/core/include/platform_pd.h | 2 +- base-host/src/core/platform_pd.cc | 2 +- base-hw/src/core/include/platform_pd.h | 3 ++- .../src/core/include/pd_session_component.h | 21 ++++++++++++++++- base-nova/src/core/include/platform_pd.h | 2 +- base-nova/src/core/platform_pd.cc | 2 +- base-pistachio/src/core/include/platform_pd.h | 3 ++- base-pistachio/src/core/platform_pd.cc | 2 +- base/src/core/include/pd_session_component.h | 23 +++++++++++++++++-- 15 files changed, 59 insertions(+), 15 deletions(-) diff --git a/base-codezero/src/core/include/platform_pd.h b/base-codezero/src/core/include/platform_pd.h index 254823e39..32a00397c 100644 --- a/base-codezero/src/core/include/platform_pd.h +++ b/base-codezero/src/core/include/platform_pd.h @@ -42,7 +42,7 @@ namespace Genode { * Constructors */ Platform_pd(bool core); - Platform_pd(signed pd_id = -1, bool create = true); + Platform_pd(char const *, signed pd_id = -1, bool create = true); /** * Destructor diff --git a/base-codezero/src/core/platform_pd.cc b/base-codezero/src/core/platform_pd.cc index 23a8e5724..78f39e1f1 100644 --- a/base-codezero/src/core/platform_pd.cc +++ b/base-codezero/src/core/platform_pd.cc @@ -98,7 +98,8 @@ Platform_pd::Platform_pd(bool core) } -Platform_pd::Platform_pd(signed pd_id, bool create) : _space_id(TASK_ID_INVALID) +Platform_pd::Platform_pd(char const *, signed pd_id, bool create) +: _space_id(TASK_ID_INVALID) { _space_id = TASK_ID_INVALID; diff --git a/base-fiasco/src/core/include/platform.h b/base-fiasco/src/core/include/platform.h index 4b31bdc39..0fa5641ef 100644 --- a/base-fiasco/src/core/include/platform.h +++ b/base-fiasco/src/core/include/platform.h @@ -35,6 +35,7 @@ namespace Genode { */ typedef Synchronized_range_allocator Phys_allocator; + char _core_label[1]; /* to satisfy _core_pd */ Platform_pd *_core_pd; /* core protection domain object */ Phys_allocator _ram_alloc; /* RAM allocator */ Phys_allocator _io_mem_alloc; /* MMIO allocator */ diff --git a/base-fiasco/src/core/include/platform_pd.h b/base-fiasco/src/core/include/platform_pd.h index 12241b47f..f89c79107 100644 --- a/base-fiasco/src/core/include/platform_pd.h +++ b/base-fiasco/src/core/include/platform_pd.h @@ -142,7 +142,8 @@ namespace Genode { /** * Constructor */ - Platform_pd(signed pd_id = PD_INVALID, bool create = true); + Platform_pd(char const *, signed pd_id = PD_INVALID, + bool create = true); /** * Destructor diff --git a/base-fiasco/src/core/platform.cc b/base-fiasco/src/core/platform.cc index a5a3cbdb9..4636bd25f 100644 --- a/base-fiasco/src/core/platform.cc +++ b/base-fiasco/src/core/platform.cc @@ -489,7 +489,8 @@ Platform::Platform() : Platform_pd::init(); /* setup pd object for core pd */ - _core_pd = new(core_mem_alloc()) Platform_pd(myself.id.task, false); + _core_label[0] = 0; + _core_pd = new(core_mem_alloc()) Platform_pd(_core_label, myself.id.task, false); /* * We setup the thread object for thread0 in core pd using a special diff --git a/base-fiasco/src/core/platform_pd.cc b/base-fiasco/src/core/platform_pd.cc index e28b8e404..95489c0eb 100644 --- a/base-fiasco/src/core/platform_pd.cc +++ b/base-fiasco/src/core/platform_pd.cc @@ -236,7 +236,7 @@ void Platform_pd::unbind_thread(Platform_thread *thread) } -Platform_pd::Platform_pd(signed pd_id, bool create) +Platform_pd::Platform_pd(char const *, signed pd_id, bool create) { /* check correct init */ if (!_init) diff --git a/base-host/src/core/include/platform_pd.h b/base-host/src/core/include/platform_pd.h index 65faba905..2a2ac7c8d 100644 --- a/base-host/src/core/include/platform_pd.h +++ b/base-host/src/core/include/platform_pd.h @@ -27,7 +27,7 @@ namespace Genode { * Constructors */ Platform_pd(bool core); - Platform_pd(signed pd_id = -1, bool create = true); + Platform_pd(char const *, signed pd_id = -1, bool create = true); /** * Destructor diff --git a/base-host/src/core/platform_pd.cc b/base-host/src/core/platform_pd.cc index 252bbb8c9..95c8072be 100644 --- a/base-host/src/core/platform_pd.cc +++ b/base-host/src/core/platform_pd.cc @@ -43,7 +43,7 @@ Platform_pd::Platform_pd(bool core) } -Platform_pd::Platform_pd(signed pd_id, bool create) +Platform_pd::Platform_pd(char const *, signed pd_id, bool create) { PWRN("not yet implemented"); } diff --git a/base-hw/src/core/include/platform_pd.h b/base-hw/src/core/include/platform_pd.h index 1b16d5fd5..251dab8f0 100644 --- a/base-hw/src/core/include/platform_pd.h +++ b/base-hw/src/core/include/platform_pd.h @@ -41,13 +41,14 @@ namespace Genode Native_capability _parent; /* our parent interface */ Native_thread_id _main_thread; /* the first thread that gets * executed in this PD */ + char const * _label; /* PD-connection label */ public: /** * Constructor */ - Platform_pd() : _main_thread(0) + Platform_pd(char const *label) : _main_thread(0), _label(label) { /* get some aligned space for the kernel object */ void * kernel_pd; diff --git a/base-nova/src/core/include/pd_session_component.h b/base-nova/src/core/include/pd_session_component.h index 4177b040e..3f84cf0ac 100644 --- a/base-nova/src/core/include/pd_session_component.h +++ b/base-nova/src/core/include/pd_session_component.h @@ -16,6 +16,7 @@ /* Genode includes */ #include +#include #include /* core includes */ @@ -27,6 +28,24 @@ namespace Genode { { private: + /** + * Read and store the PD label + */ + struct Label { + + enum { MAX_LEN = 64 }; + char string[MAX_LEN]; + + /** + * Constructor + */ + Label(char const *args) + { + Arg_string::find_arg(args, "label").string(string, sizeof(string), ""); + } + + } const _label; + Platform_pd _pd; Parent_capability _parent; Rpc_entrypoint *_thread_ep; @@ -34,7 +53,7 @@ namespace Genode { public: Pd_session_component(Rpc_entrypoint *thread_ep, const char *args) - : _thread_ep(thread_ep) { } + : _label(args), _pd(_label.string), _thread_ep(thread_ep) { } /**************************/ diff --git a/base-nova/src/core/include/platform_pd.h b/base-nova/src/core/include/platform_pd.h index 8841a146d..5fca479a9 100644 --- a/base-nova/src/core/include/platform_pd.h +++ b/base-nova/src/core/include/platform_pd.h @@ -39,7 +39,7 @@ namespace Genode { /** * Constructors */ - Platform_pd(signed pd_id = -1, bool create = true); + Platform_pd(char const *, signed pd_id = -1, bool create = true); /** * Destructor diff --git a/base-nova/src/core/platform_pd.cc b/base-nova/src/core/platform_pd.cc index 9cf2287d5..063eec989 100644 --- a/base-nova/src/core/platform_pd.cc +++ b/base-nova/src/core/platform_pd.cc @@ -47,7 +47,7 @@ int Platform_pd::assign_parent(Native_capability parent) } -Platform_pd::Platform_pd(signed pd_id, bool create) +Platform_pd::Platform_pd(char const *, signed pd_id, bool create) : _thread_cnt(0), _pd_sel(~0UL) { } diff --git a/base-pistachio/src/core/include/platform_pd.h b/base-pistachio/src/core/include/platform_pd.h index 986501ab2..f6ac71fcb 100644 --- a/base-pistachio/src/core/include/platform_pd.h +++ b/base-pistachio/src/core/include/platform_pd.h @@ -183,7 +183,8 @@ namespace Genode { * Constructors */ Platform_pd(bool core); - Platform_pd(signed pd_id = PD_INVALID, bool create = true); + Platform_pd(char const *, signed pd_id = PD_INVALID, + bool create = true); /** * Destructor diff --git a/base-pistachio/src/core/platform_pd.cc b/base-pistachio/src/core/platform_pd.cc index 7bb9717fc..4f65b0ca6 100644 --- a/base-pistachio/src/core/platform_pd.cc +++ b/base-pistachio/src/core/platform_pd.cc @@ -340,7 +340,7 @@ Platform_pd::Platform_pd(bool core) : } -Platform_pd::Platform_pd(signed pd_id, bool create) +Platform_pd::Platform_pd(char const *, signed pd_id, bool create) { if (!create) panic("create must be true."); diff --git a/base/src/core/include/pd_session_component.h b/base/src/core/include/pd_session_component.h index e752053ab..efe47d758 100644 --- a/base/src/core/include/pd_session_component.h +++ b/base/src/core/include/pd_session_component.h @@ -17,6 +17,7 @@ /* Genode includes */ #include #include +#include /* core includes */ #include @@ -27,14 +28,32 @@ namespace Genode { { private: + /** + * Read and store the PD label + */ + struct Label { + + enum { MAX_LEN = 64 }; + char string[MAX_LEN]; + + /** + * Constructor + */ + Label(char const *args) + { + Arg_string::find_arg(args, "label").string(string, sizeof(string), ""); + } + + } const _label; + Platform_pd _pd; Parent_capability _parent; Rpc_entrypoint *_thread_ep; public: - Pd_session_component(Rpc_entrypoint *thread_ep, const char *args) - : _thread_ep(thread_ep) { } + Pd_session_component(Rpc_entrypoint *thread_ep, char const *args) + : _label(args), _pd(_label.string), _thread_ep(thread_ep) { } /**************************/