From 198475b6b365a89546cd23fa8cf3a008b09252a5 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Mon, 18 Jul 2016 11:04:42 +0200 Subject: [PATCH] sel4: startup lib reinit support required for noux Issue #2044 --- repos/base-sel4/src/lib/base/ipc.cc | 16 ++++++++++++++++ repos/base-sel4/src/lib/base/thread_bootstrap.cc | 2 -- repos/base-sel4/src/lib/base/thread_init.cc | 8 ++++++-- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/repos/base-sel4/src/lib/base/ipc.cc b/repos/base-sel4/src/lib/base/ipc.cc index 11d13b008..b475cae4b 100644 --- a/repos/base-sel4/src/lib/base/ipc.cc +++ b/repos/base-sel4/src/lib/base/ipc.cc @@ -60,6 +60,22 @@ static unsigned &rcv_sel() } +/***************************** + ** Startup library support ** + *****************************/ + +void prepare_reinit_main_thread() +{ + /** + * Reset selector to invalid, so that a new fresh will be allocated. + * The IPC buffer of the thread must be configured to point to the + * receive selector which is done by Capability_space::alloc_rcv_sel(), + * which finally calls seL4_SetCapReceivePath(); + */ + rcv_sel() = 0; +} + + /** * Convert Genode::Msgbuf_base content into seL4 message * diff --git a/repos/base-sel4/src/lib/base/thread_bootstrap.cc b/repos/base-sel4/src/lib/base/thread_bootstrap.cc index 509b625b8..f6919dcfa 100644 --- a/repos/base-sel4/src/lib/base/thread_bootstrap.cc +++ b/repos/base-sel4/src/lib/base/thread_bootstrap.cc @@ -25,8 +25,6 @@ void prepare_init_main_thread() { } -void prepare_reinit_main_thread() { prepare_init_main_thread(); } - /************ ** Thread ** diff --git a/repos/base-sel4/src/lib/base/thread_init.cc b/repos/base-sel4/src/lib/base/thread_init.cc index 235f9b4ca..f46086baa 100644 --- a/repos/base-sel4/src/lib/base/thread_init.cc +++ b/repos/base-sel4/src/lib/base/thread_init.cc @@ -13,12 +13,16 @@ /* Genode includes */ #include -#include -#include +#include using namespace Genode; void Thread::_init_platform_thread(size_t, Type type) { + /** + * Reset to default values. The default values trigger initial allocations + * and associations the thread, like IPCbuffer in ipc.cc. + */ + native_thread() = Native_thread(); }