diff --git a/repos/base-fiasco/src/core/irq_session_component.cc b/repos/base-fiasco/src/core/irq_session_component.cc index cce0929add..5bb3c2e6e6 100644 --- a/repos/base-fiasco/src/core/irq_session_component.cc +++ b/repos/base-fiasco/src/core/irq_session_component.cc @@ -81,7 +81,7 @@ void Irq_object::_wait_for_irq() void Irq_object::start() { - ::Thread_base::start(); + ::Thread::start(); _sync_bootup.lock(); } @@ -115,7 +115,7 @@ void Irq_object::entry() Irq_object::Irq_object(unsigned irq) : - Thread<4096>("irq"), + Thread_deprecated<4096>("irq"), _sync_ack(Lock::LOCKED), _sync_bootup(Lock::LOCKED), _irq(irq) { } diff --git a/repos/base-fiasco/src/core/thread_start.cc b/repos/base-fiasco/src/core/thread_start.cc index 09a6ae8ecf..b32323b77f 100644 --- a/repos/base-fiasco/src/core/thread_start.cc +++ b/repos/base-fiasco/src/core/thread_start.cc @@ -25,16 +25,16 @@ using namespace Genode; -void Thread_base::_thread_start() +void Thread::_thread_start() { - Thread_base::myself()->_thread_bootstrap(); - Thread_base::myself()->entry(); - Thread_base::myself()->_join_lock.unlock(); + Thread::myself()->_thread_bootstrap(); + Thread::myself()->entry(); + Thread::myself()->_join_lock.unlock(); sleep_forever(); } -void Thread_base::start() +void Thread::start() { /* create and start platform thread */ native_thread().pt = new(platform()->core_mem_alloc()) @@ -49,7 +49,7 @@ void Thread_base::start() } -void Thread_base::cancel_blocking() +void Thread::cancel_blocking() { /* * Within core, we never need to unblock threads @@ -57,7 +57,7 @@ void Thread_base::cancel_blocking() } -void Thread_base::_deinit_platform_thread() +void Thread::_deinit_platform_thread() { /* destruct platform thread */ destroy(platform()->core_mem_alloc(), native_thread().pt); diff --git a/repos/base-fiasco/src/lib/base/thread_bootstrap.cc b/repos/base-fiasco/src/lib/base/thread_bootstrap.cc index 8da83a2aa6..70daa21c3b 100644 --- a/repos/base-fiasco/src/lib/base/thread_bootstrap.cc +++ b/repos/base-fiasco/src/lib/base/thread_bootstrap.cc @@ -27,14 +27,14 @@ void prepare_init_main_thread() { } void prepare_reinit_main_thread() { } -/***************** - ** Thread_base ** - *****************/ +/************ + ** Thread ** + ************/ -void Thread_base::_thread_bootstrap() { } +void Thread::_thread_bootstrap() { } -void Thread_base::_init_platform_thread(size_t, Type type) +void Thread::_init_platform_thread(size_t, Type type) { if (type == NORMAL) { return; } _thread_cap = Genode::env()->parent()->main_thread_cap(); diff --git a/repos/base-foc/include/signal_source/client.h b/repos/base-foc/include/signal_source/client.h index 72268b37a8..286be602e6 100644 --- a/repos/base-foc/include/signal_source/client.h +++ b/repos/base-foc/include/signal_source/client.h @@ -56,7 +56,7 @@ namespace Genode { _sem = call(); l4_msgtag_t tag = l4_irq_attach(_sem.dst(), 0, - Thread_base::myself()->native_thread().kcap); + Thread::myself()->native_thread().kcap); if (l4_error(tag)) PERR("l4_irq_attach failed with %ld!", l4_error(tag)); } diff --git a/repos/base-foc/src/core/irq_session_component.cc b/repos/base-foc/src/core/irq_session_component.cc index 1c1f198ff7..090b39a5ef 100644 --- a/repos/base-foc/src/core/irq_session_component.cc +++ b/repos/base-foc/src/core/irq_session_component.cc @@ -43,11 +43,11 @@ using namespace Genode; /** * Dispatches interrupts from kernel */ -class Genode::Interrupt_handler : public Thread<2048*sizeof(long)> +class Genode::Interrupt_handler : public Thread_deprecated<2048*sizeof(long)> { private: - Interrupt_handler() : Thread("irq_handler") { start(); } + Interrupt_handler() : Thread_deprecated("irq_handler") { start(); } public: diff --git a/repos/base-foc/src/core/pager.cc b/repos/base-foc/src/core/pager.cc index e3602554bd..c95ca9bb09 100644 --- a/repos/base-foc/src/core/pager.cc +++ b/repos/base-foc/src/core/pager.cc @@ -151,7 +151,7 @@ Pager_capability Pager_entrypoint::manage(Pager_object *obj) { using namespace Fiasco; - Native_capability cap(_cap_factory.alloc(Thread_base::_thread_cap)); + Native_capability cap(_cap_factory.alloc(Thread::_thread_cap)); /* add server object to object pool */ obj->cap(cap); diff --git a/repos/base-foc/src/core/thread_start.cc b/repos/base-foc/src/core/thread_start.cc index ac50bd0243..b0eaa8ba39 100644 --- a/repos/base-foc/src/core/thread_start.cc +++ b/repos/base-foc/src/core/thread_start.cc @@ -31,16 +31,16 @@ namespace Fiasco { using namespace Genode; -void Thread_base::_deinit_platform_thread() +void Thread::_deinit_platform_thread() { PWRN("%s: not implemented yet!", __func__); } -void Thread_base::_init_platform_thread(size_t, Type) { } +void Thread::_init_platform_thread(size_t, Type) { } -void Thread_base::start() +void Thread::start() { using namespace Fiasco; @@ -68,7 +68,7 @@ void Thread_base::start() } -void Thread_base::cancel_blocking() +void Thread::cancel_blocking() { /* * Within core, we never need to unblock threads diff --git a/repos/base-foc/src/include/base/internal/lock_helper.h b/repos/base-foc/src/include/base/internal/lock_helper.h index 2377d8a031..ca481e0841 100644 --- a/repos/base-foc/src/include/base/internal/lock_helper.h +++ b/repos/base-foc/src/include/base/internal/lock_helper.h @@ -48,7 +48,7 @@ static inline void thread_yield() { Fiasco::l4_thread_yield(); } * * \return true if the thread was in blocking state */ -static inline bool thread_check_stopped_and_restart(Genode::Thread_base *thread_base) +static inline bool thread_check_stopped_and_restart(Genode::Thread *thread_base) { Fiasco::l4_cap_idx_t tid = thread_base ? thread_base->native_thread().kcap : @@ -62,7 +62,7 @@ static inline bool thread_check_stopped_and_restart(Genode::Thread_base *thread_ /** * Yield CPU time to the specified thread */ -static inline void thread_switch_to(Genode::Thread_base *thread_base) +static inline void thread_switch_to(Genode::Thread *thread_base) { Fiasco::l4_cap_idx_t tid = thread_base ? thread_base->native_thread().kcap : @@ -83,7 +83,7 @@ static void thread_stop_myself() { using namespace Fiasco; - Genode::Thread_base *myself = Genode::Thread_base::myself(); + Genode::Thread *myself = Genode::Thread::myself(); Fiasco::l4_cap_idx_t tid = myself ? myself->native_thread().kcap : Fiasco::MAIN_THREAD_CAP; diff --git a/repos/base-foc/src/lib/base/ipc.cc b/repos/base-foc/src/lib/base/ipc.cc index 0b7814e06a..b28ea5fa6d 100644 --- a/repos/base-foc/src/lib/base/ipc.cc +++ b/repos/base-foc/src/lib/base/ipc.cc @@ -323,7 +323,7 @@ Genode::Rpc_request Genode::ipc_reply_wait(Reply_capability const &last_caller, Msgbuf_base &reply_msg, Msgbuf_base &request_msg) { - Receive_window &rcv_window = Thread_base::myself()->native_thread().rcv_window; + Receive_window &rcv_window = Thread::myself()->native_thread().rcv_window; for (;;) { @@ -371,7 +371,7 @@ Ipc_server::Ipc_server() : Native_capability((Cap_index*)Fiasco::l4_utcb_tcr()->user[Fiasco::UTCB_TCR_BADGE]) { - Thread_base::myself()->native_thread().rcv_window.init(); + Thread::myself()->native_thread().rcv_window.init(); } diff --git a/repos/base-foc/src/lib/base/thread_bootstrap.cc b/repos/base-foc/src/lib/base/thread_bootstrap.cc index b556f1c525..578fc3d84e 100644 --- a/repos/base-foc/src/lib/base/thread_bootstrap.cc +++ b/repos/base-foc/src/lib/base/thread_bootstrap.cc @@ -41,19 +41,19 @@ void prepare_reinit_main_thread() } -/***************** - ** Thread_base ** - *****************/ +/************ + ** Thread ** + ************/ -void Genode::Thread_base::_thread_bootstrap() { } +void Genode::Thread::_thread_bootstrap() { } -void Genode::Thread_base::_thread_start() +void Genode::Thread::_thread_start() { using namespace Genode; - Thread_base::myself()->_thread_bootstrap(); - Thread_base::myself()->entry(); - Thread_base::myself()->_join_lock.unlock(); + Thread::myself()->_thread_bootstrap(); + Thread::myself()->entry(); + Thread::myself()->_join_lock.unlock(); sleep_forever(); } diff --git a/repos/base-foc/src/lib/base/thread_myself.cc b/repos/base-foc/src/lib/base/thread_myself.cc index 4e34a5e84d..593ebc5233 100644 --- a/repos/base-foc/src/lib/base/thread_myself.cc +++ b/repos/base-foc/src/lib/base/thread_myself.cc @@ -14,11 +14,11 @@ #include -Genode::Thread_base *Genode::Thread_base::myself() +Genode::Thread *Genode::Thread::myself() { using namespace Fiasco; - return reinterpret_cast(l4_utcb_tcr()->user[UTCB_TCR_THREAD_OBJ]); + return reinterpret_cast(l4_utcb_tcr()->user[UTCB_TCR_THREAD_OBJ]); } diff --git a/repos/base-foc/src/lib/base/thread_start.cc b/repos/base-foc/src/lib/base/thread_start.cc index b4a3428c51..fcecb7a165 100644 --- a/repos/base-foc/src/lib/base/thread_start.cc +++ b/repos/base-foc/src/lib/base/thread_start.cc @@ -29,7 +29,7 @@ namespace Fiasco { using namespace Genode; -void Thread_base::_deinit_platform_thread() +void Thread::_deinit_platform_thread() { using namespace Fiasco; @@ -41,7 +41,7 @@ void Thread_base::_deinit_platform_thread() } -void Thread_base::_init_platform_thread(size_t weight, Type type) +void Thread::_init_platform_thread(size_t weight, Type type) { /* if no cpu session is given, use it from the environment */ if (!_cpu_session) @@ -50,10 +50,8 @@ void Thread_base::_init_platform_thread(size_t weight, Type type) if (type == NORMAL) { /* create thread at core */ - char buf[48]; - name(buf, sizeof(buf)); - _thread_cap = _cpu_session->create_thread(env()->pd_session_cap(), - weight, buf); + _thread_cap = _cpu_session->create_thread(env()->pd_session_cap(), name(), + Location(), Weight(weight)); /* assign thread to protection domain */ if (!_thread_cap.valid()) @@ -74,7 +72,7 @@ void Thread_base::_init_platform_thread(size_t weight, Type type) } -void Thread_base::start() +void Thread::start() { using namespace Fiasco; @@ -98,7 +96,7 @@ void Thread_base::start() } -void Thread_base::cancel_blocking() +void Thread::cancel_blocking() { _cpu_session->cancel_blocking(_thread_cap); } diff --git a/repos/base-hw/src/core/include/pager.h b/repos/base-hw/src/core/include/pager.h index cd6f466f98..6654c98cb4 100644 --- a/repos/base-hw/src/core/include/pager.h +++ b/repos/base-hw/src/core/include/pager.h @@ -197,7 +197,7 @@ class Genode::Pager_object : public Object_pool::Entry, class Genode::Pager_entrypoint : public Object_pool, - public Thread, + public Thread_deprecated, public Kernel_object, public Ipc_pager { diff --git a/repos/base-hw/src/core/include/spec/riscv/kernel/thread_base.h b/repos/base-hw/src/core/include/spec/riscv/kernel/thread_base.h index 3214d9165e..af2a643b3f 100644 --- a/repos/base-hw/src/core/include/spec/riscv/kernel/thread_base.h +++ b/repos/base-hw/src/core/include/spec/riscv/kernel/thread_base.h @@ -17,7 +17,7 @@ /* core includes */ #include -namespace Kernel { class Thread_base; } +namespace Kernel { class Thread; } /** * Hardware specific base of kernel thread-objects diff --git a/repos/base-hw/src/core/pager.cc b/repos/base-hw/src/core/pager.cc index 8981e04f99..a688590489 100644 --- a/repos/base-hw/src/core/pager.cc +++ b/repos/base-hw/src/core/pager.cc @@ -108,7 +108,7 @@ void Pager_entrypoint::dissolve(Pager_object * const o) Pager_entrypoint::Pager_entrypoint(Rpc_cap_factory &) -: Thread("pager_ep"), +: Thread_deprecated("pager_ep"), Kernel_object(true) { start(); } diff --git a/repos/base-hw/src/core/platform_thread.cc b/repos/base-hw/src/core/platform_thread.cc index ad5670493e..57fd10455e 100644 --- a/repos/base-hw/src/core/platform_thread.cc +++ b/repos/base-hw/src/core/platform_thread.cc @@ -167,7 +167,7 @@ int Platform_thread::start(void * const ip, void * const sp) unsigned const cpu = _location.valid() ? _location.xpos() : Cpu::primary_id(); - Native_utcb * utcb = Thread_base::myself()->utcb(); + Native_utcb * utcb = Thread::myself()->utcb(); /* reset capability counter */ utcb->cap_cnt(0); diff --git a/repos/base-hw/src/core/region_map_support.cc b/repos/base-hw/src/core/region_map_support.cc index 78723cd147..8acca72d9d 100644 --- a/repos/base-hw/src/core/region_map_support.cc +++ b/repos/base-hw/src/core/region_map_support.cc @@ -48,7 +48,7 @@ void Pager_entrypoint::entry() if (Kernel::await_signal(_cap.dst())) continue; Untyped_capability cap = - (*(Pager_object**)Thread_base::myself()->utcb()->data())->cap(); + (*(Pager_object**)Thread::myself()->utcb()->data())->cap(); /* * Synchronize access and ensure that the object is still managed diff --git a/repos/base-hw/src/core/thread_start.cc b/repos/base-hw/src/core/thread_start.cc index 704daaf9cf..1a297936ea 100644 --- a/repos/base-hw/src/core/thread_start.cc +++ b/repos/base-hw/src/core/thread_start.cc @@ -34,7 +34,7 @@ namespace Genode { Rm_session *env_stack_area_rm_session(); } namespace Hw { extern Untyped_capability _main_thread_cap; } -void Thread_base::start() +void Thread::start() { /* start thread with stack pointer at the top of stack */ if (native_thread().platform_thread->start((void *)&_thread_start, stack_top())) @@ -42,20 +42,20 @@ void Thread_base::start() } -void Thread_base::cancel_blocking() +void Thread::cancel_blocking() { native_thread().platform_thread->cancel_blocking(); } -void Thread_base::_deinit_platform_thread() +void Thread::_deinit_platform_thread() { /* destruct platform thread */ destroy(platform()->core_mem_alloc(), native_thread().platform_thread); } -void Thread_base::_init_platform_thread(size_t, Type type) +void Thread::_init_platform_thread(size_t, Type type) { if (type == NORMAL) { native_thread().platform_thread = new (platform()->core_mem_alloc()) diff --git a/repos/base-hw/src/include/base/internal/lock_helper.h b/repos/base-hw/src/include/base/internal/lock_helper.h index 8c33d99232..8bdd8e5cd9 100644 --- a/repos/base-hw/src/include/base/internal/lock_helper.h +++ b/repos/base-hw/src/include/base/internal/lock_helper.h @@ -33,7 +33,7 @@ static inline void thread_yield() { * Return kernel name of thread t */ static inline Kernel::capid_t -native_thread_id(Genode::Thread_base * const t) +native_thread_id(Genode::Thread * const t) { return t ? t->native_thread().cap.dst() : Hw::_main_thread_cap.dst(); } @@ -42,7 +42,7 @@ native_thread_id(Genode::Thread_base * const t) /** * Yield execution time-slice of current thread to thread t */ -static inline void thread_switch_to(Genode::Thread_base * const t) +static inline void thread_switch_to(Genode::Thread * const t) { Kernel::yield_thread(native_thread_id(t)); } @@ -52,7 +52,7 @@ static inline void thread_switch_to(Genode::Thread_base * const t) * Resume thread t and return wether t was paused or not */ static inline bool -thread_check_stopped_and_restart(Genode::Thread_base * const t) +thread_check_stopped_and_restart(Genode::Thread * const t) { return Kernel::resume_local_thread(native_thread_id(t)); } diff --git a/repos/base-hw/src/lib/base/ipc.cc b/repos/base-hw/src/lib/base/ipc.cc index 8f3ee42414..59b123956b 100644 --- a/repos/base-hw/src/lib/base/ipc.cc +++ b/repos/base-hw/src/lib/base/ipc.cc @@ -94,12 +94,12 @@ Rpc_exception_code Genode::ipc_call(Native_capability dst, Msgbuf_base &snd_msg, Msgbuf_base &rcv_msg, size_t rcv_caps) { - Native_utcb &utcb = *Thread_base::myself()->utcb(); + Native_utcb &utcb = *Thread::myself()->utcb(); retry( [&] () { - copy_msg_to_utcb(snd_msg, *Thread_base::myself()->utcb()); + copy_msg_to_utcb(snd_msg, *Thread::myself()->utcb()); switch (Kernel::send_request_msg(dst.dst(), rcv_caps)) { @@ -123,7 +123,7 @@ Rpc_exception_code Genode::ipc_call(Native_capability dst, void Genode::ipc_reply(Native_capability caller, Rpc_exception_code exc, Msgbuf_base &snd_msg) { - Native_utcb &utcb = *Thread_base::myself()->utcb(); + Native_utcb &utcb = *Thread::myself()->utcb(); copy_msg_to_utcb(snd_msg, utcb); utcb.exception_code(exc.value); snd_msg.reset(); @@ -136,7 +136,7 @@ Genode::Rpc_request Genode::ipc_reply_wait(Reply_capability const &, Msgbuf_base &reply_msg, Msgbuf_base &request_msg) { - Native_utcb &utcb = *Thread_base::myself()->utcb(); + Native_utcb &utcb = *Thread::myself()->utcb(); retry( [&] () { @@ -165,8 +165,8 @@ Genode::Rpc_request Genode::ipc_reply_wait(Reply_capability const &, Ipc_server::Ipc_server() : - Native_capability(Thread_base::myself() ? Thread_base::myself()->native_thread().cap - : Hw::_main_thread_cap) + Native_capability(Thread::myself() ? Thread::myself()->native_thread().cap + : Hw::_main_thread_cap) { } diff --git a/repos/base-hw/src/lib/base/signal.cc b/repos/base-hw/src/lib/base/signal.cc index 47bbee3836..e47b5e1288 100644 --- a/repos/base-hw/src/lib/base/signal.cc +++ b/repos/base-hw/src/lib/base/signal.cc @@ -32,8 +32,8 @@ namespace Genode { /* * On base-hw, no signal thread is needed. */ - void init_signal_thread() __attribute__((weak)); - void init_signal_thread() { } + void init_signal_thread(Env &) __attribute__((weak)); + void init_signal_thread(Env &) { } void destroy_signal_thread() { } } @@ -124,7 +124,7 @@ void Signal_receiver::block_for_signal() return; } /* read signal data */ - const void * const utcb = Thread_base::myself()->utcb()->data(); + const void * const utcb = Thread::myself()->utcb()->data(); Signal::Data * const data = (Signal::Data *)utcb; Signal_context * const context = data->context; { diff --git a/repos/base-hw/src/lib/base/thread_bootstrap.cc b/repos/base-hw/src/lib/base/thread_bootstrap.cc index 3e9d474d11..df683f1d93 100644 --- a/repos/base-hw/src/lib/base/thread_bootstrap.cc +++ b/repos/base-hw/src/lib/base/thread_bootstrap.cc @@ -46,7 +46,7 @@ void prepare_init_main_thread() * Make data from the startup info persistantly available by copying it * before the UTCB gets polluted by the following function calls. */ - Native_utcb * utcb = Thread_base::myself()->utcb(); + Native_utcb * utcb = Thread::myself()->utcb(); _parent_cap = utcb->cap_get(Native_utcb::PARENT); Untyped_capability ds_cap(utcb->cap_get(Native_utcb::UTCB_DATASPACE)); _main_thread_utcb_ds = reinterpret_cap_cast(ds_cap); @@ -57,24 +57,24 @@ void prepare_init_main_thread() void prepare_reinit_main_thread() { prepare_init_main_thread(); } -/***************** - ** Thread_base ** - *****************/ +/************ + ** Thread ** + ************/ -Native_utcb *Thread_base::utcb() +Native_utcb *Thread::utcb() { if (this) { return &_stack->utcb(); } return utcb_main_thread(); } -void Thread_base::_thread_start() +void Thread::_thread_start() { - Thread_base::myself()->_thread_bootstrap(); - Thread_base::myself()->entry(); - Thread_base::myself()->_join_lock.unlock(); + Thread::myself()->_thread_bootstrap(); + Thread::myself()->entry(); + Thread::myself()->_join_lock.unlock(); Genode::sleep_forever(); } -void Thread_base::_thread_bootstrap() { +void Thread::_thread_bootstrap() { native_thread().cap = myself()->utcb()->cap_get(Native_utcb::THREAD_MYSELF); } diff --git a/repos/base-hw/src/lib/base/thread_start.cc b/repos/base-hw/src/lib/base/thread_start.cc index 78c77abc80..f9f6fff76a 100644 --- a/repos/base-hw/src/lib/base/thread_start.cc +++ b/repos/base-hw/src/lib/base/thread_start.cc @@ -30,21 +30,20 @@ namespace Hw { extern Untyped_capability _main_thread_cap; } -/***************** - ** Thread_base ** - *****************/ +/************ + ** Thread ** + ************/ -void Thread_base::_init_platform_thread(size_t weight, Type type) +void Thread::_init_platform_thread(size_t weight, Type type) { if (!_cpu_session) { _cpu_session = env()->cpu_session(); } if (type == NORMAL) { /* create server object */ - char buf[48]; - name(buf, sizeof(buf)); addr_t const utcb = (addr_t)&_stack->utcb(); _thread_cap = _cpu_session->create_thread(env()->pd_session_cap(), - weight, buf, _affinity, utcb); + name(), _affinity, + Weight(weight), utcb); return; } /* if we got reinitialized we have to get rid of the old UTCB */ @@ -67,7 +66,7 @@ void Thread_base::_init_platform_thread(size_t weight, Type type) } -void Thread_base::_deinit_platform_thread() +void Thread::_deinit_platform_thread() { if (!_cpu_session) _cpu_session = env()->cpu_session(); @@ -82,7 +81,7 @@ void Thread_base::_deinit_platform_thread() } -void Thread_base::start() +void Thread::start() { /* attach userland stack */ try { @@ -100,7 +99,7 @@ void Thread_base::start() } -void Thread_base::cancel_blocking() +void Thread::cancel_blocking() { _cpu_session->cancel_blocking(_thread_cap); } diff --git a/repos/base-hw/src/test/cpu_quota/main.cc b/repos/base-hw/src/test/cpu_quota/main.cc index 5b15034aa6..57c8af7f73 100644 --- a/repos/base-hw/src/test/cpu_quota/main.cc +++ b/repos/base-hw/src/test/cpu_quota/main.cc @@ -73,7 +73,7 @@ class Sync::Signal } }; -class Counter : private Thread<2 * 1024 * sizeof(Genode::addr_t)> +class Counter : private Thread_deprecated<2 * 1024 * sizeof(Genode::addr_t)> { private: @@ -106,7 +106,7 @@ class Counter : private Thread<2 * 1024 * sizeof(Genode::addr_t)> Counter(char const name, size_t const weight, Sync::Session * const sync) : - Thread(weight, "counter"), _name(name), _value(0) , + Thread_deprecated(weight, "counter"), _name(name), _value(0) , _sync_sig(sync, SYNC_SIG), _stage(1) { Thread::start(); diff --git a/repos/base-linux/src/core/platform.cc b/repos/base-linux/src/core/platform.cc index cd5e355cff..566699e121 100644 --- a/repos/base-linux/src/core/platform.cc +++ b/repos/base-linux/src/core/platform.cc @@ -160,7 +160,7 @@ namespace Genode { Socket_pair server_socket_pair() { - return create_server_socket_pair(Thread_base::myself()->native_thread().tid); + return create_server_socket_pair(Thread::myself()->native_thread().tid); } void destroy_server_socket_pair(Socket_pair socket_pair) diff --git a/repos/base-linux/src/core/thread_linux.cc b/repos/base-linux/src/core/thread_linux.cc index eac6cd635d..f0478b5b93 100644 --- a/repos/base-linux/src/core/thread_linux.cc +++ b/repos/base-linux/src/core/thread_linux.cc @@ -28,7 +28,7 @@ static void empty_signal_handler(int) { } static char signal_stack[0x2000] __attribute__((aligned(0x1000))); -void Thread_base::_thread_start() +void Thread::_thread_start() { lx_sigaltstack(signal_stack, sizeof(signal_stack)); @@ -46,23 +46,23 @@ void Thread_base::_thread_start() */ lx_sigsetmask(LX_SIGCHLD, false); - Thread_base::myself()->entry(); - Thread_base::myself()->_join_lock.unlock(); + Thread::myself()->entry(); + Thread::myself()->_join_lock.unlock(); sleep_forever(); } -void Thread_base::_init_platform_thread(size_t, Type) { } +void Thread::_init_platform_thread(size_t, Type) { } -void Thread_base::_deinit_platform_thread() { } +void Thread::_deinit_platform_thread() { } -void Thread_base::start() +void Thread::start() { - native_thread().tid = lx_create_thread(Thread_base::_thread_start, stack_top(), this); + native_thread().tid = lx_create_thread(Thread::_thread_start, stack_top(), this); native_thread().pid = lx_getpid(); } -void Thread_base::cancel_blocking() { } +void Thread::cancel_blocking() { } diff --git a/repos/base-linux/src/include/base/internal/lock_helper.h b/repos/base-linux/src/include/base/internal/lock_helper.h index 4f59644f47..f2115599ee 100644 --- a/repos/base-linux/src/include/base/internal/lock_helper.h +++ b/repos/base-linux/src/include/base/internal/lock_helper.h @@ -38,7 +38,7 @@ static inline void thread_yield() } -static inline bool thread_check_stopped_and_restart(Genode::Thread_base *thread_base) +static inline bool thread_check_stopped_and_restart(Genode::Thread *thread_base) { const int *futex_counter_ptr = thread_base ? &thread_base->native_thread().futex_counter : @@ -47,7 +47,7 @@ static inline bool thread_check_stopped_and_restart(Genode::Thread_base *thread_ } -static inline void thread_switch_to(Genode::Thread_base *thread_base) +static inline void thread_switch_to(Genode::Thread *thread_base) { thread_yield(); } @@ -60,7 +60,7 @@ static inline void thread_stop_myself() * 'thread_check_stopped_and_restart()' function will get called * repeatedly until this thread has actually executed the syscall. */ - Genode::Thread_base *myself = Genode::Thread_base::myself(); + Genode::Thread *myself = Genode::Thread::myself(); const int *futex_counter_ptr = myself ? &myself->native_thread().futex_counter : &main_thread_futex_counter; diff --git a/repos/base-linux/src/lib/base/child_process.cc b/repos/base-linux/src/lib/base/child_process.cc index 590b39b9bc..2992be9807 100644 --- a/repos/base-linux/src/lib/base/child_process.cc +++ b/repos/base-linux/src/lib/base/child_process.cc @@ -37,7 +37,7 @@ Child::Process::Initial_thread::Initial_thread(Cpu_session &cpu, char const *name) : cpu(cpu), - cap(cpu.create_thread(pd, Cpu_session::DEFAULT_WEIGHT, name)) + cap(cpu.create_thread(pd, name, Affinity::Location(), Cpu_session::Weight())) { } diff --git a/repos/base-linux/src/lib/base/ipc.cc b/repos/base-linux/src/lib/base/ipc.cc index 4b77b680ec..d1fd3f102e 100644 --- a/repos/base-linux/src/lib/base/ipc.cc +++ b/repos/base-linux/src/lib/base/ipc.cc @@ -431,7 +431,7 @@ Genode::Rpc_request Genode::ipc_reply_wait(Reply_capability const &last_caller, * Block infinitely if called from the main thread. This may happen if the * main thread calls 'sleep_forever()'. */ - if (!Thread_base::myself()) { + if (!Thread::myself()) { struct timespec ts = { 1000, 0 }; for (;;) lx_nanosleep(&ts, 0); } @@ -443,7 +443,7 @@ Genode::Rpc_request Genode::ipc_reply_wait(Reply_capability const &last_caller, msg.accept_sockets(Message::MAX_SDS_PER_MSG); - Native_thread &native_thread = Thread_base::myself()->native_thread(); + Native_thread &native_thread = Thread::myself()->native_thread(); request_msg.reset(); int const ret = lx_recvmsg(native_thread.socket_pair.server_sd, msg.msg(), 0); @@ -479,10 +479,10 @@ Ipc_server::Ipc_server() * definition, main is never an RPC entrypoint. However, the main thread * may call 'sleep_forever()', which instantiates 'Ipc_server'. */ - if (!Thread_base::myself()) + if (!Thread::myself()) return; - Native_thread &native_thread = Thread_base::myself()->native_thread(); + Native_thread &native_thread = Thread::myself()->native_thread(); if (native_thread.is_ipc_server) { PRAW("[%d] unexpected multiple instantiation of Ipc_server by one thread", @@ -504,14 +504,14 @@ Ipc_server::Ipc_server() Ipc_server::~Ipc_server() { - if (!Thread_base::myself()) + if (!Thread::myself()) return; /* * Reset thread role to non-server such that we can enter 'sleep_forever' * without getting a warning. */ - Native_thread &native_thread = Thread_base::myself()->native_thread(); + Native_thread &native_thread = Thread::myself()->native_thread(); Genode::ep_sd_registry()->disassociate(native_thread.socket_pair.client_sd); native_thread.is_ipc_server = false; diff --git a/repos/base-linux/src/lib/base/platform_env.cc b/repos/base-linux/src/lib/base/platform_env.cc index aa94a8f8b3..90ad7fc382 100644 --- a/repos/base-linux/src/lib/base/platform_env.cc +++ b/repos/base-linux/src/lib/base/platform_env.cc @@ -175,7 +175,7 @@ namespace Genode { Socket_pair socket_pair; - Thread_base *thread = Thread_base::myself(); + Thread *thread = Thread::myself(); if (thread) { socket_pair.server_sd = native_cpu.server_sd(thread->cap()).dst().socket; socket_pair.client_sd = native_cpu.client_sd(thread->cap()).dst().socket; diff --git a/repos/base-linux/src/lib/base/thread_linux.cc b/repos/base-linux/src/lib/base/thread_linux.cc index 71211911d3..e2a25c7dee 100644 --- a/repos/base-linux/src/lib/base/thread_linux.cc +++ b/repos/base-linux/src/lib/base/thread_linux.cc @@ -47,7 +47,7 @@ static void thread_exit_signal_handler(int) { lx_exit(0); } static char signal_stack[0x2000] __attribute__((aligned(0x1000))); -void Thread_base::_thread_start() +void Thread::_thread_start() { lx_sigaltstack(signal_stack, sizeof(signal_stack)); @@ -57,7 +57,7 @@ void Thread_base::_thread_start() */ lx_sigaction(LX_SIGUSR1, empty_signal_handler); - Thread_base * const thread = Thread_base::myself(); + Thread * const thread = Thread::myself(); /* inform core about the new thread and process ID of the new thread */ Linux_native_cpu_client native_cpu(thread->_cpu_session->native_cpu()); @@ -75,7 +75,7 @@ void Thread_base::_thread_start() } -void Thread_base::_init_platform_thread(size_t weight, Type type) +void Thread::_init_platform_thread(size_t weight, Type type) { /* if no cpu session is given, use it from the environment */ if (!_cpu_session) @@ -84,7 +84,9 @@ void Thread_base::_init_platform_thread(size_t weight, Type type) /* for normal threads create an object at the CPU session */ if (type == NORMAL) { _thread_cap = _cpu_session->create_thread(env()->pd_session_cap(), - weight, _stack->name().string()); + _stack->name().string(), + Affinity::Location(), + Weight()); return; } /* adjust initial object state for main threads */ @@ -93,7 +95,7 @@ void Thread_base::_init_platform_thread(size_t weight, Type type) } -void Thread_base::_deinit_platform_thread() +void Thread::_deinit_platform_thread() { /* * Kill thread until it is really really dead @@ -124,7 +126,7 @@ void Thread_base::_deinit_platform_thread() } -void Thread_base::start() +void Thread::start() { /* synchronize calls of the 'start' function */ static Lock lock; @@ -142,7 +144,7 @@ void Thread_base::start() threadlib_initialized = true; } - native_thread().tid = lx_create_thread(Thread_base::_thread_start, stack_top(), this); + native_thread().tid = lx_create_thread(Thread::_thread_start, stack_top(), this); native_thread().pid = lx_getpid(); /* wait until the 'thread_start' function got entered */ @@ -150,7 +152,7 @@ void Thread_base::start() } -void Thread_base::cancel_blocking() +void Thread::cancel_blocking() { _cpu_session->cancel_blocking(_thread_cap); } diff --git a/repos/base-linux/src/lib/lx_hybrid/lx_hybrid.cc b/repos/base-linux/src/lib/lx_hybrid/lx_hybrid.cc index 05a26f7594..deb6015a47 100644 --- a/repos/base-linux/src/lib/lx_hybrid/lx_hybrid.cc +++ b/repos/base-linux/src/lib/lx_hybrid/lx_hybrid.cc @@ -194,7 +194,7 @@ namespace Genode { * Filled out by 'thread_start' function in the stack of the new * thread */ - Thread_base * const thread_base; + Thread * const thread_base; /** * POSIX thread handle @@ -204,9 +204,9 @@ namespace Genode { /** * Constructor * - * \param thread associated 'Thread_base' object + * \param thread associated 'Thread' object */ - Meta_data(Thread_base *thread) : thread_base(thread) + Meta_data(Thread *thread) : thread_base(thread) { native_thread.meta_data = this; } @@ -261,7 +261,7 @@ namespace Genode { public: - Thread_meta_data_created(Thread_base *thread) + Thread_meta_data_created(Thread *thread) : Native_thread::Meta_data(thread) { } void wait_for_construction() @@ -302,7 +302,7 @@ namespace Genode { { public: - Thread_meta_data_adopted(Thread_base *thread) + Thread_meta_data_adopted(Thread *thread) : Native_thread::Meta_data(thread) { } void wait_for_construction() @@ -374,13 +374,13 @@ static void *thread_start(void *arg) adopt_thread(meta_data); - /* unblock 'Thread_base' constructor */ + /* unblock 'Thread' constructor */ meta_data->constructed(); - /* block until the 'Thread_base::start' gets called */ + /* block until the 'Thread::start' gets called */ meta_data->wait_for_start(); - Thread_base::myself()->entry(); + Thread::myself()->entry(); meta_data->joined(); return 0; @@ -390,7 +390,7 @@ static void *thread_start(void *arg) extern "C" void *malloc(::size_t size); -Thread_base *Thread_base::myself() +Thread *Thread::myself() { void * const tls = pthread_getspecific(tls_key()); @@ -406,26 +406,26 @@ Thread_base *Thread_base::myself() * Genode's thread API. This may happen if a native Linux library creates * threads via the pthread library. If such a thread calls Genode code, * which then tries to perform IPC, the program fails because there exists - * no 'Thread_base' object. We recover from this unfortunate situation by - * creating a dummy 'Thread_base' object and associate it with the calling + * no 'Thread' object. We recover from this unfortunate situation by + * creating a dummy 'Thread' object and associate it with the calling * thread. */ /* - * Create dummy 'Thread_base' object but suppress the execution of its + * Create dummy 'Thread' object but suppress the execution of its * constructor. If we called the constructor, we would create a new Genode * thread, which is not what we want. For the allocation, we use glibc * malloc because 'Genode::env()->heap()->alloc()' uses IPC. * - * XXX Both the 'Thread_base' and 'Native_thread::Meta_data' objects are + * XXX Both the 'Thread' and 'Native_thread::Meta_data' objects are * never freed. */ - Thread_base *thread = (Thread_base *)malloc(sizeof(Thread_base)); + Thread *thread = (Thread *)malloc(sizeof(Thread)); memset(thread, 0, sizeof(*thread)); Native_thread::Meta_data *meta_data = new Thread_meta_data_adopted(thread); /* - * Initialize 'Thread_base::_native_thread' to point to the default- + * Initialize 'Thread::_native_thread' to point to the default- * constructed 'Native_thread' (part of 'Meta_data'). */ meta_data->thread_base->_native_thread = &meta_data->native_thread; @@ -435,7 +435,7 @@ Thread_base *Thread_base::myself() } -void Thread_base::start() +void Thread::start() { /* * Unblock thread that is supposed to slumber in 'thread_start'. @@ -444,17 +444,17 @@ void Thread_base::start() } -void Thread_base::join() +void Thread::join() { native_thread().meta_data->wait_for_join(); } -Native_thread &Thread_base::native_thread() { return *_native_thread; } +Native_thread &Thread::native_thread() { return *_native_thread; } -Thread_base::Thread_base(size_t weight, const char *name, size_t stack_size, - Type type, Cpu_session * cpu_sess, Affinity::Location) +Thread::Thread(size_t weight, const char *name, size_t stack_size, + Type type, Cpu_session * cpu_sess, Affinity::Location) : _cpu_session(cpu_sess) { Native_thread::Meta_data *meta_data = @@ -472,18 +472,31 @@ Thread_base::Thread_base(size_t weight, const char *name, size_t stack_size, native_thread().meta_data->wait_for_construction(); - _thread_cap = _cpu_session->create_thread(env()->pd_session_cap(), weight, name); + _thread_cap = _cpu_session->create_thread(env()->pd_session_cap(), name, + Location(), Weight(weight)); Linux_native_cpu_client native_cpu(_cpu_session->native_cpu()); native_cpu.thread_id(_thread_cap, native_thread().pid, native_thread().tid); } -Thread_base::Thread_base(size_t weight, const char *name, size_t stack_size, - Type type, Affinity::Location) -: Thread_base(weight, name, stack_size, type, env()->cpu_session()) { } +Thread::Thread(size_t weight, const char *name, size_t stack_size, + Type type, Affinity::Location) +: Thread(weight, name, stack_size, type, env()->cpu_session()) { } -void Thread_base::cancel_blocking() + +Thread::Thread(Env &env, Name const &name, size_t stack_size, Location location, + Weight weight, Cpu_session &cpu) +: Thread(weight.value, name.string(), stack_size, NORMAL, + &cpu, location) +{ } + + +Thread::Thread(Env &env, Name const &name, size_t stack_size) +: Thread(env, name, stack_size, Location(), Weight(), env.cpu()) { } + + +void Thread::cancel_blocking() { /* * XXX implement interaction with CPU session @@ -491,7 +504,7 @@ void Thread_base::cancel_blocking() } -Thread_base::~Thread_base() +Thread::~Thread() { bool const needs_join = (pthread_cancel(native_thread().meta_data->pt) == 0); diff --git a/repos/base-linux/src/test/lx_hybrid_errno/main.cc b/repos/base-linux/src/test/lx_hybrid_errno/main.cc index b4c0ab5dd1..11142915a9 100644 --- a/repos/base-linux/src/test/lx_hybrid_errno/main.cc +++ b/repos/base-linux/src/test/lx_hybrid_errno/main.cc @@ -17,12 +17,12 @@ enum { STACK_SIZE = 4096 }; -struct Thread : Genode::Thread +struct Thread : Genode::Thread_deprecated { Genode::Lock &_barrier; Thread(Genode::Lock &barrier) - : Genode::Thread("stat"), _barrier(barrier) { start(); } + : Genode::Thread_deprecated("stat"), _barrier(barrier) { start(); } void entry() { diff --git a/repos/base-linux/src/test/lx_hybrid_pthread_ipc/main.cc b/repos/base-linux/src/test/lx_hybrid_pthread_ipc/main.cc index 50282f4d6d..f80c7781be 100644 --- a/repos/base-linux/src/test/lx_hybrid_pthread_ipc/main.cc +++ b/repos/base-linux/src/test/lx_hybrid_pthread_ipc/main.cc @@ -34,11 +34,11 @@ static void *pthread_entry(void *) PINF("first message"); /* - * Without the lazy initialization of 'Thread_base' objects for threads + * Without the lazy initialization of 'Thread' objects for threads * created w/o Genode's Thread API, the printing of the first message will * never return because the IPC reply could not be delivered. * - * With the on-demand creation of 'Thread_base' objects, the second message + * With the on-demand creation of 'Thread' objects, the second message * will appear in the LOG output. */ diff --git a/repos/base-linux/src/test/lx_rmap/main.cc b/repos/base-linux/src/test/lx_rmap/main.cc index 33f31384d3..5d68878a65 100644 --- a/repos/base-linux/src/test/lx_rmap/main.cc +++ b/repos/base-linux/src/test/lx_rmap/main.cc @@ -44,7 +44,7 @@ int main() using namespace Genode; /* activate for early printf in Rm_session_mmap::attach() etc. */ - if (0) Thread_base::trace("FOO"); + if (0) Thread::trace("FOO"); /* induce initial heap expansion to remove RM noise */ if (1) { diff --git a/repos/base-nova/include/cpu_session/client.h b/repos/base-nova/include/cpu_session/client.h index ad1a735ddd..d576d47a3d 100644 --- a/repos/base-nova/include/cpu_session/client.h +++ b/repos/base-nova/include/cpu_session/client.h @@ -29,9 +29,9 @@ namespace Genode { : Rpc_client(static_cap_cast(session)) { } Thread_capability - create_thread(Capability pd, size_t quota, Name const &name, - Affinity::Location affinity, addr_t utcb = 0) override { - return call(pd, quota, name, affinity, utcb); } + create_thread(Capability pd, Name const &name, + Affinity::Location affinity, Weight weight, addr_t utcb = 0) override { + return call(pd, name, affinity, weight, utcb); } Ram_dataspace_capability utcb(Thread_capability thread) override { return call(thread); } diff --git a/repos/base-nova/include/nova/util.h b/repos/base-nova/include/nova/util.h index 464ab31e11..b2372efc73 100644 --- a/repos/base-nova/include/nova/util.h +++ b/repos/base-nova/include/nova/util.h @@ -33,7 +33,7 @@ inline void request_event_portal(Genode::Native_capability const &cap, Genode::addr_t sel, Genode::addr_t event, unsigned short log2_count = 0) { - Genode::Thread_base * myself = Genode::Thread_base::myself(); + Genode::Thread * myself = Genode::Thread::myself(); Nova::Utcb *utcb = reinterpret_cast(myself->utcb()); /* save original receive window */ @@ -73,7 +73,7 @@ inline void request_signal_sm_cap(Genode::Native_capability const &cap, inline void delegate_vcpu_portals(Genode::Native_capability const &cap, Genode::addr_t const sel) { - Genode::Thread_base * myself = Genode::Thread_base::myself(); + Genode::Thread * myself = Genode::Thread::myself(); Nova::Utcb *utcb = reinterpret_cast(myself->utcb()); /* save original receive window */ diff --git a/repos/base-nova/include/signal_source/client.h b/repos/base-nova/include/signal_source/client.h index 8735552f2c..26ebbbcbe6 100644 --- a/repos/base-nova/include/signal_source/client.h +++ b/repos/base-nova/include/signal_source/client.h @@ -52,7 +52,7 @@ namespace Genode { : Rpc_client(static_cap_cast(cap)) { /* request mapping of semaphore capability selector */ - Thread_base * myself = Thread_base::myself(); + Thread * myself = Thread::myself(); request_signal_sm_cap(Native_capability(myself->native_thread().ec_sel + 1), myself->native_thread().exc_pt_sel + Nova::PT_SEL_STARTUP); _sem = Native_capability(myself->native_thread().exc_pt_sel + Nova::PT_SEL_STARTUP); diff --git a/repos/base-nova/src/core/core_region_map.cc b/repos/base-nova/src/core/core_region_map.cc index f325da3d88..c7407aa019 100644 --- a/repos/base-nova/src/core/core_region_map.cc +++ b/repos/base-nova/src/core/core_region_map.cc @@ -75,7 +75,7 @@ Core_region_map::attach(Dataspace_capability ds_cap, size_t size, throw Out_of_metadata(); /* map it */ - Nova::Utcb * const utcb = reinterpret_cast(Thread_base::myself()->utcb()); + Nova::Utcb * const utcb = reinterpret_cast(Thread::myself()->utcb()); const Nova::Rights rights(true, ds->writable(), executable); if (map_local(utcb, ds->phys_addr(), reinterpret_cast(virt_ptr), @@ -94,7 +94,7 @@ void Core_region_map::detach(Local_addr core_local_addr) { size_t size = platform_specific()->region_alloc_size_at(core_local_addr); - unmap_local(reinterpret_cast(Thread_base::myself()->utcb()), + unmap_local(reinterpret_cast(Thread::myself()->utcb()), core_local_addr, size >> get_page_size_log2()); platform()->region_alloc()->free(core_local_addr); diff --git a/repos/base-nova/src/core/include/cpu_session_component.h b/repos/base-nova/src/core/include/cpu_session_component.h index 5fb3a1fc3d..5f6916184a 100644 --- a/repos/base-nova/src/core/include/cpu_session_component.h +++ b/repos/base-nova/src/core/include/cpu_session_component.h @@ -63,7 +63,7 @@ namespace Genode { Pager_entrypoint &_pager_ep; Capability _pd; Region_map_component &_address_space_region_map; - size_t const _weight; + Cpu_session::Weight const _weight; Session_label const _session_label; Thread_name const _name; Platform_thread _platform_thread; @@ -119,7 +119,8 @@ namespace Genode { * \param pager_ep pager entrypoint used for handling the page * faults of the thread * \param pd PD session where the thread is executed - * \param weight weighting regarding the CPU session quota + * \param weight scheduling weight relative to the other + * threads of the same CPU session * \param quota initial quota counter-value of the weight * \param labal label of the threads session * \param name name for the thread @@ -127,24 +128,25 @@ namespace Genode { * \param utcb user-local UTCB base * \param sigh initial exception handler */ - Cpu_thread_component(Cpu_session_capability cpu_session_cap, - Rpc_entrypoint &ep, - Pager_entrypoint &pager_ep, - Pd_session_component &pd, - Trace::Control_area &trace_control_area, - size_t const weight, - size_t const quota, - Affinity::Location affinity, - Session_label const &label, - Thread_name const &name, - unsigned priority, addr_t utcb, + Cpu_thread_component(Cpu_session_capability cpu_session_cap, + Rpc_entrypoint &ep, + Pager_entrypoint &pager_ep, + Pd_session_component &pd, + Trace::Control_area &trace_control_area, + Cpu_session::Weight weight, + size_t quota, + Affinity::Location location, + Session_label const &label, + Thread_name const &name, + unsigned priority, + addr_t utcb, Signal_context_capability sigh) : _ep(ep), _pager_ep(pager_ep), _pd(pd.cap()), _address_space_region_map(pd.address_space_region_map()), _weight(weight), _session_label(label), _name(name), - _platform_thread(name.string(), priority, affinity, utcb), + _platform_thread(name.string(), priority, location, utcb), _bound_to_pd(_bind_to_pd(pd)), _sigh(sigh), _trace_control_slot(trace_control_area), @@ -193,9 +195,10 @@ namespace Genode { ************************/ Platform_thread *platform_thread() { return &_platform_thread; } - Trace::Source *trace_source() { return &_trace_source; } - size_t weight() const { return Cpu_session::DEFAULT_WEIGHT; } + Trace::Source *trace_source() { return &_trace_source; } + + size_t weight() const { return Cpu_session::Weight::DEFAULT_WEIGHT; } void sigh(Signal_context_capability sigh) { @@ -317,8 +320,8 @@ namespace Genode { ** CPU session interface ** ***************************/ - Thread_capability create_thread(Capability, size_t, Name const &, - Affinity::Location, addr_t) override; + Thread_capability create_thread(Capability, Name const &, + Affinity::Location, Weight, addr_t) override; Ram_dataspace_capability utcb(Thread_capability thread) override; void kill_thread(Thread_capability) override; int start(Thread_capability, addr_t, addr_t) override; diff --git a/repos/base-nova/src/core/include/map_local.h b/repos/base-nova/src/core/include/map_local.h index e59d0c5623..7019581015 100644 --- a/repos/base-nova/src/core/include/map_local.h +++ b/repos/base-nova/src/core/include/map_local.h @@ -38,7 +38,7 @@ namespace Genode { inline bool map_local(addr_t from_phys, addr_t to_virt, size_t num_pages, bool read = true, bool write = true, bool exec = true) { - return (::map_local((Nova::Utcb *)Thread_base::myself()->utcb(), + return (::map_local((Nova::Utcb *)Thread::myself()->utcb(), from_phys, to_virt, num_pages, Nova::Rights(read, write, exec), true) == 0); } @@ -51,7 +51,7 @@ namespace Genode { */ inline void unmap_local(addr_t virt, size_t num_pages) { - ::unmap_local((Nova::Utcb *)Thread_base::myself()->utcb(), + ::unmap_local((Nova::Utcb *)Thread::myself()->utcb(), virt, num_pages); } } diff --git a/repos/base-nova/src/core/include/pager.h b/repos/base-nova/src/core/include/pager.h index 364529fc4f..247ffbe8c0 100644 --- a/repos/base-nova/src/core/include/pager.h +++ b/repos/base-nova/src/core/include/pager.h @@ -364,7 +364,7 @@ namespace Genode { * A 'Pager_activation' processes one page fault of a 'Pager_object' at a time. */ class Pager_entrypoint; - class Pager_activation_base: public Thread_base + class Pager_activation_base: public Thread { private: diff --git a/repos/base-nova/src/core/ipc_pager.cc b/repos/base-nova/src/core/ipc_pager.cc index 31cf213a9c..414b7a4b9a 100644 --- a/repos/base-nova/src/core/ipc_pager.cc +++ b/repos/base-nova/src/core/ipc_pager.cc @@ -30,7 +30,7 @@ void Ipc_pager::wait_for_fault() * fault already occurred. So we never wait but immediately read the * page-fault information from our UTCB. */ - Nova::Utcb *utcb = (Nova::Utcb *)Thread_base::myself()->utcb(); + Nova::Utcb *utcb = (Nova::Utcb *)Thread::myself()->utcb(); _fault_type = utcb->qual[0]; _fault_addr = utcb->qual[1]; _fault_ip = utcb->ip; @@ -39,7 +39,7 @@ void Ipc_pager::wait_for_fault() void Ipc_pager::set_reply_mapping(Mapping m) { - Nova::Utcb *utcb = (Nova::Utcb *)Thread_base::myself()->utcb(); + Nova::Utcb *utcb = (Nova::Utcb *)Thread::myself()->utcb(); utcb->set_msg_word(0); bool res = utcb->append_item(m.mem_crd(), m.dst_addr(), true, false, false, m.dma(), m.write_combined()); @@ -50,5 +50,5 @@ void Ipc_pager::set_reply_mapping(Mapping m) void Ipc_pager::reply_and_wait_for_fault(unsigned sm) { - Nova::reply(Thread_base::myself()->stack_top(), sm); + Nova::reply(Thread::myself()->stack_top(), sm); } diff --git a/repos/base-nova/src/core/irq_session_component.cc b/repos/base-nova/src/core/irq_session_component.cc index e130e962de..2a24c863a7 100644 --- a/repos/base-nova/src/core/irq_session_component.cc +++ b/repos/base-nova/src/core/irq_session_component.cc @@ -82,7 +82,7 @@ static bool msi(Genode::addr_t irq_sel, Genode::addr_t phys_mem, Nova::Mem_crd phys_crd(phys_mem >> 12, 0, Rights(true, false, false)); Nova::Mem_crd virt_crd(virt_addr >> 12, 0, Rights(true, false, false)); - Utcb * utcb = reinterpret_cast(Thread_base::myself()->utcb()); + Utcb * utcb = reinterpret_cast(Thread::myself()->utcb()); if (map_local_phys_to_virt(utcb, phys_crd, virt_crd)) { platform()->region_alloc()->free(virt, 4096); @@ -142,7 +142,7 @@ void Irq_object::start(unsigned irq, Genode::addr_t const device_phys) Obj_crd dst(irq_sel(), 0); enum { MAP_FROM_KERNEL_TO_CORE = true }; - int ret = map_local((Nova::Utcb *)Thread_base::myself()->utcb(), + int ret = map_local((Nova::Utcb *)Thread::myself()->utcb(), src, dst, MAP_FROM_KERNEL_TO_CORE); if (ret) { PERR("Getting IRQ from kernel failed - %u", irq); diff --git a/repos/base-nova/src/core/pager.cc b/repos/base-nova/src/core/pager.cc index 0a8d8cb627..ed7efc4a19 100644 --- a/repos/base-nova/src/core/pager.cc +++ b/repos/base-nova/src/core/pager.cc @@ -74,7 +74,7 @@ void Pager_object::_page_fault_handler(addr_t pager_obj) Ipc_pager ipc_pager; ipc_pager.wait_for_fault(); - Thread_base * myself = Thread_base::myself(); + Thread * myself = Thread::myself(); Pager_object * obj = reinterpret_cast(pager_obj); Utcb * utcb = reinterpret_cast(myself->utcb()); Pager_activation_base * pager_thread = static_cast(myself); @@ -130,7 +130,7 @@ void Pager_object::_page_fault_handler(addr_t pager_obj) void Pager_object::exception(uint8_t exit_id) { - Thread_base *myself = Thread_base::myself(); + Thread *myself = Thread::myself(); Utcb * utcb = reinterpret_cast(myself->utcb()); Pager_activation_base * pager_thread = static_cast(myself); @@ -187,7 +187,7 @@ void Pager_object::exception(uint8_t exit_id) void Pager_object::_recall_handler(addr_t pager_obj) { - Thread_base * myself = Thread_base::myself(); + Thread * myself = Thread::myself(); Pager_object * obj = reinterpret_cast(pager_obj); Utcb * utcb = reinterpret_cast(myself->utcb()); @@ -234,7 +234,7 @@ void Pager_object::_recall_handler(addr_t pager_obj) void Pager_object::_startup_handler(addr_t pager_obj) { - Thread_base *myself = Thread_base::myself(); + Thread *myself = Thread::myself(); Pager_object * obj = reinterpret_cast(pager_obj); Utcb * utcb = reinterpret_cast(myself->utcb()); @@ -250,7 +250,7 @@ void Pager_object::_startup_handler(addr_t pager_obj) void Pager_object::_invoke_handler(addr_t pager_obj) { - Thread_base *myself = Thread_base::myself(); + Thread *myself = Thread::myself(); Pager_object * obj = reinterpret_cast(pager_obj); Utcb * utcb = reinterpret_cast(myself->utcb()); @@ -406,7 +406,7 @@ void Pager_object::cleanup_call() /* revoke all portals handling the client. */ revoke(Obj_crd(exc_pt_sel_client(), NUM_INITIAL_PT_LOG2)); - Utcb *utcb = reinterpret_cast(Thread_base::myself()->utcb()); + Utcb *utcb = reinterpret_cast(Thread::myself()->utcb()); utcb->set_msg_word(0); utcb->mtd = 0; if (uint8_t res = call(sel_pt_cleanup())) @@ -694,7 +694,7 @@ void Pager_object::_oom_handler(addr_t pager_dst, addr_t pager_src, asm volatile ("" : "=S" (reason)); } - Thread_base * myself = Thread_base::myself(); + Thread * myself = Thread::myself(); Utcb * utcb = reinterpret_cast(myself->utcb()); Pager_object * obj_dst = reinterpret_cast(pager_dst); Pager_object * obj_src = reinterpret_cast(pager_src); @@ -822,14 +822,14 @@ addr_t Pager_object::get_oom_portal() Pager_activation_base::Pager_activation_base(const char *name, size_t stack_size) : - Thread_base(Cpu_session::DEFAULT_WEIGHT, name, stack_size, - Affinity::Location(which_cpu(this), 0)), + Thread(Cpu_session::Weight::DEFAULT_WEIGHT, name, stack_size, + Affinity::Location(which_cpu(this), 0)), _cap(Native_capability()), _ep(0), _cap_valid(Lock::LOCKED) { /* creates local EC */ - Thread_base::start(); + Thread::start(); - reinterpret_cast(Thread_base::utcb())->crd_xlt = Obj_crd(0, ~0UL); + reinterpret_cast(Thread::utcb())->crd_xlt = Obj_crd(0, ~0UL); } diff --git a/repos/base-nova/src/core/platform.cc b/repos/base-nova/src/core/platform.cc index 5c603f1658..efecf3b377 100644 --- a/repos/base-nova/src/core/platform.cc +++ b/repos/base-nova/src/core/platform.cc @@ -282,7 +282,7 @@ Platform::Platform() : * the y component of the affinity location. When adding support * for two-dimensional affinity spaces, look out and adjust the use of * 'Platform_thread::_location' in 'platform_thread.cc'. Also look - * at the 'Thread_base::start' function in core/thread_start.cc. + * at the 'Thread::start' function in core/thread_start.cc. */ _cpus = Affinity::Space(hip->cpus(), 1); @@ -765,7 +765,7 @@ Platform::Platform() : bool Mapped_mem_allocator::_map_local(addr_t virt_addr, addr_t phys_addr, unsigned size) { - map_local((Utcb *)Thread_base::myself()->utcb(), phys_addr, + map_local((Utcb *)Thread::myself()->utcb(), phys_addr, virt_addr, size / get_page_size(), Rights(true, true, true), true); return true; @@ -774,7 +774,7 @@ bool Mapped_mem_allocator::_map_local(addr_t virt_addr, addr_t phys_addr, bool Mapped_mem_allocator::_unmap_local(addr_t virt_addr, unsigned size) { - unmap_local((Utcb *)Thread_base::myself()->utcb(), + unmap_local((Utcb *)Thread::myself()->utcb(), virt_addr, size / get_page_size()); return true; } diff --git a/repos/base-nova/src/core/platform_thread.cc b/repos/base-nova/src/core/platform_thread.cc index 0b12fc456b..9e23cc0c7d 100644 --- a/repos/base-nova/src/core/platform_thread.cc +++ b/repos/base-nova/src/core/platform_thread.cc @@ -62,7 +62,7 @@ int Platform_thread::start(void *ip, void *sp) } addr_t const pt_oom = _pager->get_oom_portal(); - if (!pt_oom || map_local((Utcb *)Thread_base::myself()->utcb(), + if (!pt_oom || map_local((Utcb *)Thread::myself()->utcb(), Obj_crd(pt_oom, 0), Obj_crd(_sel_pt_oom(), 0))) { PERR("setup of out-of-memory notification portal - failed"); return -8; @@ -124,7 +124,7 @@ int Platform_thread::start(void *ip, void *sp) /* remap exception portals for first thread */ for (unsigned i = 0; i < sizeof(remap_dst)/sizeof(remap_dst[0]); i++) { - if (map_local((Utcb *)Thread_base::myself()->utcb(), + if (map_local((Utcb *)Thread::myself()->utcb(), Obj_crd(remap_src[i], 0), Obj_crd(_sel_exc_base + remap_dst[i], 0))) return -6; diff --git a/repos/base-nova/src/core/ram_session_support.cc b/repos/base-nova/src/core/ram_session_support.cc index 75e19e25d8..6ec234dde1 100644 --- a/repos/base-nova/src/core/ram_session_support.cc +++ b/repos/base-nova/src/core/ram_session_support.cc @@ -64,7 +64,7 @@ void Ram_session_component::_clear_ds(Dataspace_component *ds) memset(reinterpret_cast(memset_ptr), 0, page_rounded_size); /* we don't keep any core-local mapping */ - unmap_local(reinterpret_cast(Thread_base::myself()->utcb()), + unmap_local(reinterpret_cast(Thread::myself()->utcb()), ds->core_local_addr(), page_rounded_size >> get_page_size_log2()); @@ -85,7 +85,7 @@ void Ram_session_component::_export_ram_ds(Dataspace_component *ds) { throw Out_of_metadata(); /* map it writeable for _clear_ds */ - Nova::Utcb * const utcb = reinterpret_cast(Thread_base::myself()->utcb()); + Nova::Utcb * const utcb = reinterpret_cast(Thread::myself()->utcb()); const Nova::Rights rights_rw(true, true, false); if (map_local(utcb, ds->phys_addr(), reinterpret_cast(virt_ptr), diff --git a/repos/base-nova/src/core/thread_start.cc b/repos/base-nova/src/core/thread_start.cc index 2f53b64866..53bfd1b3ca 100644 --- a/repos/base-nova/src/core/thread_start.cc +++ b/repos/base-nova/src/core/thread_start.cc @@ -30,7 +30,7 @@ using namespace Genode; -void Thread_base::_init_platform_thread(size_t, Type type) +void Thread::_init_platform_thread(size_t, Type type) { /* * This function is called for constructing server activations and pager @@ -46,7 +46,7 @@ void Thread_base::_init_platform_thread(size_t, Type type) /* * Exception base of first thread in core is 0. We have to set - * it here so that Thread_base code finds the semaphore of the + * it here so that Thread code finds the semaphore of the * main thread. */ native_thread().exc_pt_sel = 0; @@ -67,7 +67,7 @@ void Thread_base::_init_platform_thread(size_t, Type type) } -void Thread_base::_deinit_platform_thread() +void Thread::_deinit_platform_thread() { unmap_local(Nova::Obj_crd(native_thread().ec_sel, 1)); unmap_local(Nova::Obj_crd(native_thread().exc_pt_sel, Nova::NUM_INITIAL_PT_LOG2)); @@ -82,7 +82,7 @@ void Thread_base::_deinit_platform_thread() } -void Thread_base::start() +void Thread::start() { /* * On NOVA, core almost never starts regular threads. This simply creates a @@ -113,7 +113,7 @@ void Thread_base::start() utcb_obj->crd_rcv = Obj_crd(); utcb_obj->crd_xlt = Obj_crd(); - if (map_local(reinterpret_cast(Thread_base::myself()->utcb()), + if (map_local(reinterpret_cast(Thread::myself()->utcb()), Obj_crd(PT_SEL_PAGE_FAULT, 0), Obj_crd(native_thread().exc_pt_sel + PT_SEL_PAGE_FAULT, 0))) { PERR("could not create page fault portal"); @@ -122,7 +122,7 @@ void Thread_base::start() } -void Thread_base::cancel_blocking() +void Thread::cancel_blocking() { using namespace Nova; diff --git a/repos/base-nova/src/include/base/internal/lock_helper.h b/repos/base-nova/src/include/base/internal/lock_helper.h index 7379868ad8..112ea3801a 100644 --- a/repos/base-nova/src/include/base/internal/lock_helper.h +++ b/repos/base-nova/src/include/base/internal/lock_helper.h @@ -34,7 +34,7 @@ extern int main_thread_running_semaphore(); -static inline bool thread_check_stopped_and_restart(Genode::Thread_base *thread_base) +static inline bool thread_check_stopped_and_restart(Genode::Thread *thread_base) { Genode::addr_t sem = thread_base ? thread_base->native_thread().exc_pt_sel + Nova::SM_SEL_EC : @@ -45,7 +45,7 @@ static inline bool thread_check_stopped_and_restart(Genode::Thread_base *thread_ } -static inline void thread_switch_to(Genode::Thread_base *thread_base) { } +static inline void thread_switch_to(Genode::Thread *thread_base) { } static inline void thread_stop_myself() @@ -54,7 +54,7 @@ static inline void thread_stop_myself() using namespace Nova; addr_t sem; - Thread_base *myself = Thread_base::myself(); + Thread *myself = Thread::myself(); if (myself) sem = myself->native_thread().exc_pt_sel + SM_SEL_EC; else diff --git a/repos/base-nova/src/include/base/internal/spin_lock.h b/repos/base-nova/src/include/base/internal/spin_lock.h index a0c1e4dd2b..59c31f6863 100644 --- a/repos/base-nova/src/include/base/internal/spin_lock.h +++ b/repos/base-nova/src/include/base/internal/spin_lock.h @@ -34,7 +34,7 @@ static inline void spinlock_lock(volatile T *lock_variable) { using Genode::cmpxchg; - Genode::Thread_base * myself = Genode::Thread_base::myself(); + Genode::Thread * myself = Genode::Thread::myself(); T const tid = myself ? myself->native_thread().ec_sel : Nova::PT_SEL_MAIN_EC; unsigned help_counter = 0; @@ -77,7 +77,7 @@ static inline void spinlock_unlock(volatile T *lock_variable) { using Nova::Utcb; - Genode::Thread_base * myself = Genode::Thread_base::myself(); + Genode::Thread * myself = Genode::Thread::myself(); Utcb * utcb = myself ? reinterpret_cast(myself->utcb()) : 0; /* unlock */ diff --git a/repos/base-nova/src/lib/base/ipc.cc b/repos/base-nova/src/lib/base/ipc.cc index 4c331a0a04..fd4821b713 100644 --- a/repos/base-nova/src/lib/base/ipc.cc +++ b/repos/base-nova/src/lib/base/ipc.cc @@ -43,7 +43,7 @@ Rpc_exception_code Genode::ipc_call(Native_capability dst, rcv_window.rcv_wnd(log2_max); } - Nova::Utcb &utcb = *(Nova::Utcb *)Thread_base::myself()->utcb(); + Nova::Utcb &utcb = *(Nova::Utcb *)Thread::myself()->utcb(); /* the protocol value is unused as the badge is delivered by the kernel */ if (!copy_msgbuf_to_utcb(utcb, snd_msg, 0)) { diff --git a/repos/base-nova/src/lib/base/rpc_entrypoint.cc b/repos/base-nova/src/lib/base/rpc_entrypoint.cc index 35ef276828..7442f71400 100644 --- a/repos/base-nova/src/lib/base/rpc_entrypoint.cc +++ b/repos/base-nova/src/lib/base/rpc_entrypoint.cc @@ -83,7 +83,7 @@ void Rpc_entrypoint::_dissolve(Rpc_object_base *obj) */ using namespace Nova; - Utcb *utcb = reinterpret_cast(Thread_base::myself()->utcb()); + Utcb *utcb = reinterpret_cast(Thread::myself()->utcb()); /* don't call ourself */ if (utcb == reinterpret_cast(this->utcb())) return; @@ -111,7 +111,7 @@ static void reply(Nova::Utcb &utcb, Rpc_exception_code exc, Msgbuf_base &snd_msg { copy_msgbuf_to_utcb(utcb, snd_msg, exc.value); - Nova::reply(Thread_base::myself()->stack_top()); + Nova::reply(Thread::myself()->stack_top()); } @@ -124,8 +124,8 @@ void Rpc_entrypoint::_activation_entry() addr_t id_pt; asm volatile ("" : "=a" (id_pt)); #endif - Rpc_entrypoint &ep = *static_cast(Thread_base::myself()); - Nova::Utcb &utcb = *(Nova::Utcb *)Thread_base::myself()->utcb(); + Rpc_entrypoint &ep = *static_cast(Thread::myself()); + Nova::Utcb &utcb = *(Nova::Utcb *)Thread::myself()->utcb(); Receive_window &rcv_window = ep.native_thread().rcv_window; rcv_window.post_ipc(utcb); @@ -219,7 +219,7 @@ Rpc_entrypoint::Rpc_entrypoint(Pd_session *pd_session, size_t stack_size, const char *name, bool start_on_construction, Affinity::Location location) : - Thread_base(Cpu_session::DEFAULT_WEIGHT, name, stack_size, location), + Thread(Cpu_session::Weight::DEFAULT_WEIGHT, name, stack_size, location), _delay_start(Lock::LOCKED), _pd_session(*pd_session) { @@ -228,7 +228,7 @@ Rpc_entrypoint::Rpc_entrypoint(Pd_session *pd_session, size_t stack_size, native_thread().ec_sel = Native_thread::INVALID_INDEX - 1; /* required to create a 'local' EC */ - Thread_base::start(); + Thread::start(); /* create cleanup portal */ _cap = _alloc_rpc_cap(_pd_session, Native_capability(native_thread().ec_sel), @@ -236,7 +236,7 @@ Rpc_entrypoint::Rpc_entrypoint(Pd_session *pd_session, size_t stack_size, if (!_cap.valid()) throw Cpu_session::Thread_creation_failed(); - Receive_window &rcv_window = Thread_base::native_thread().rcv_window; + Receive_window &rcv_window = Thread::native_thread().rcv_window; /* prepare portal receive window of new thread */ if (!rcv_window.prepare_rcv_window(*(Nova::Utcb *)&_stack->utcb())) diff --git a/repos/base-nova/src/lib/base/sleep.cc b/repos/base-nova/src/lib/base/sleep.cc index e6b6174797..d22864cba1 100644 --- a/repos/base-nova/src/lib/base/sleep.cc +++ b/repos/base-nova/src/lib/base/sleep.cc @@ -27,7 +27,7 @@ void Genode::sleep_forever() { using namespace Nova; - Thread_base *myself = Thread_base::myself(); + Thread *myself = Thread::myself(); addr_t sem = myself ? myself->native_thread().exc_pt_sel + SM_SEL_EC : SM_SEL_EC; while (1) { diff --git a/repos/base-nova/src/lib/base/stack.cc b/repos/base-nova/src/lib/base/stack.cc index bed75f6446..9e549d3213 100644 --- a/repos/base-nova/src/lib/base/stack.cc +++ b/repos/base-nova/src/lib/base/stack.cc @@ -109,11 +109,11 @@ void prepare_reinit_main_thread() } -/***************** - ** Thread_base ** - *****************/ +/************ + ** Thread ** + ************/ -Native_utcb *Thread_base::utcb() +Native_utcb *Thread::utcb() { /* * If 'utcb' is called on the object returned by 'myself', diff --git a/repos/base-nova/src/lib/base/thread_start.cc b/repos/base-nova/src/lib/base/thread_start.cc index 3bc9f9d1cd..d2f8b8aa60 100644 --- a/repos/base-nova/src/lib/base/thread_start.cc +++ b/repos/base-nova/src/lib/base/thread_start.cc @@ -36,19 +36,17 @@ using namespace Genode; /** * Entry point entered by new threads */ -void Thread_base::_thread_start() +void Thread::_thread_start() { using namespace Genode; /* catch any exception at this point and try to print an error message */ try { - Thread_base::myself()->entry(); + Thread::myself()->entry(); } catch (...) { - char thread_name[48]; - Thread_base::myself()->name(thread_name, sizeof(thread_name)); - try { - PERR("Thread '%s' died because of an uncaught exception", thread_name); + PERR("Thread '%s' died because of an uncaught exception", + Thread::myself()->name().string()); } catch (...) { /* die in a noisy way */ nova_die(); @@ -57,7 +55,7 @@ void Thread_base::_thread_start() throw; } - Thread_base::myself()->_join_lock.unlock(); + Thread::myself()->_join_lock.unlock(); /* sleep silently */ Genode::sleep_forever(); @@ -68,7 +66,7 @@ void Thread_base::_thread_start() ** Thread base ** *****************/ -void Thread_base::_init_platform_thread(size_t weight, Type type) +void Thread::_init_platform_thread(size_t weight, Type type) { using namespace Nova; @@ -113,16 +111,14 @@ void Thread_base::_init_platform_thread(size_t weight, Type type) _cpu_session = env()->cpu_session(); /* create thread at core */ - char buf[48]; - name(buf, sizeof(buf)); - - _thread_cap = _cpu_session->create_thread(env()->pd_session_cap(), weight, buf, _affinity); + _thread_cap = _cpu_session->create_thread(env()->pd_session_cap(), name(), + _affinity, Weight(weight)); if (!_thread_cap.valid()) throw Cpu_session::Thread_creation_failed(); } -void Thread_base::_deinit_platform_thread() +void Thread::_deinit_platform_thread() { using namespace Nova; @@ -139,7 +135,7 @@ void Thread_base::_deinit_platform_thread() } -void Thread_base::start() +void Thread::start() { if (native_thread().ec_sel < Native_thread::INVALID_INDEX - 1) throw Cpu_session::Thread_creation_failed(); @@ -201,7 +197,7 @@ void Thread_base::start() } -void Thread_base::cancel_blocking() +void Thread::cancel_blocking() { using namespace Nova; diff --git a/repos/base-nova/src/test/platform/main.cc b/repos/base-nova/src/test/platform/main.cc index 0df899c3ff..bd00ae80cf 100644 --- a/repos/base-nova/src/test/platform/main.cc +++ b/repos/base-nova/src/test/platform/main.cc @@ -76,7 +76,7 @@ void test_pat() */ Nova::Mem_crd snd_crd(map_addr >> PAGE_4K, DS_ORDER, all); - Nova::Utcb *utcb = reinterpret_cast(Thread_base::myself()->utcb()); + Nova::Utcb *utcb = reinterpret_cast(Thread::myself()->utcb()); enum { HOTSPOT = 0, USER_PD = false, HOST_PGT = false, SOLELY_MAP = false, NO_DMA = false, EVILLY_DONT_WRITE_COMBINE = false @@ -186,13 +186,13 @@ void test_server_oom() ep.dissolve(&component); } -class Greedy : public Thread<4096> { +class Greedy : public Thread_deprecated<4096> { public: Greedy() : - Thread<0x1000>("greedy") + Thread_deprecated<0x1000>("greedy") { } void entry() @@ -272,7 +272,7 @@ int main(int argc, char **argv) Genode::config()->xml_node().attribute("check_pat").value(&check_pat); } catch (...) { } - Thread_base * myself = Thread_base::myself(); + Thread * myself = Thread::myself(); if (!myself) return -__LINE__; diff --git a/repos/base-nova/src/test/platform/server.h b/repos/base-nova/src/test/platform/server.h index 5452b6e5de..74e8576705 100644 --- a/repos/base-nova/src/test/platform/server.h +++ b/repos/base-nova/src/test/platform/server.h @@ -92,4 +92,4 @@ Genode::Native_capability Test::Component::void_cap() { } Genode::addr_t Test::Component::leak_utcb_address() { - return reinterpret_cast(Genode::Thread_base::myself()->utcb()); } + return reinterpret_cast(Genode::Thread::myself()->utcb()); } diff --git a/repos/base-okl4/src/core/irq_session_component.cc b/repos/base-okl4/src/core/irq_session_component.cc index 840901a424..db8d5934c6 100644 --- a/repos/base-okl4/src/core/irq_session_component.cc +++ b/repos/base-okl4/src/core/irq_session_component.cc @@ -87,7 +87,7 @@ void Irq_object::_wait_for_irq() void Irq_object::start() { - ::Thread_base::start(); + ::Thread::start(); _sync_bootup.lock(); } @@ -122,7 +122,7 @@ void Irq_object::entry() Irq_object::Irq_object(unsigned irq) : - Thread<4096>("irq"), + Thread_deprecated<4096>("irq"), _sync_ack(Lock::LOCKED), _sync_bootup(Lock::LOCKED), _irq(irq) { } diff --git a/repos/base-okl4/src/core/thread_start.cc b/repos/base-okl4/src/core/thread_start.cc index 04dd3d9f48..354156c8d2 100644 --- a/repos/base-okl4/src/core/thread_start.cc +++ b/repos/base-okl4/src/core/thread_start.cc @@ -25,16 +25,16 @@ using namespace Genode; -void Thread_base::_thread_start() +void Thread::_thread_start() { - Thread_base::myself()->_thread_bootstrap(); - Thread_base::myself()->entry(); - Thread_base::myself()->_join_lock.unlock(); + Thread::myself()->_thread_bootstrap(); + Thread::myself()->entry(); + Thread::myself()->_join_lock.unlock(); sleep_forever(); } -void Thread_base::start() +void Thread::start() { /* create and start platform thread */ native_thread().pt = new(platform_specific()->thread_slab()) @@ -46,7 +46,7 @@ void Thread_base::start() } -void Thread_base::cancel_blocking() +void Thread::cancel_blocking() { /* * Within core, we never need to unblock threads @@ -54,7 +54,7 @@ void Thread_base::cancel_blocking() } -void Thread_base::_deinit_platform_thread() +void Thread::_deinit_platform_thread() { /* destruct platform thread */ destroy(platform_specific()->thread_slab(), native_thread().pt); diff --git a/repos/base-okl4/src/include/base/internal/lock_helper.h b/repos/base-okl4/src/include/base/internal/lock_helper.h index 077a5c432b..3ea8817485 100644 --- a/repos/base-okl4/src/include/base/internal/lock_helper.h +++ b/repos/base-okl4/src/include/base/internal/lock_helper.h @@ -46,7 +46,7 @@ extern Okl4::L4_ThreadId_t main_thread_tid; * * \return true if the thread was in blocking state */ -static inline bool thread_check_stopped_and_restart(Genode::Thread_base *thread_base) +static inline bool thread_check_stopped_and_restart(Genode::Thread *thread_base) { using namespace Okl4; @@ -69,7 +69,7 @@ static inline bool thread_check_stopped_and_restart(Genode::Thread_base *thread_ /** * Yield CPU time to the specified thread */ -static inline void thread_switch_to(Genode::Thread_base *thread_base) +static inline void thread_switch_to(Genode::Thread *thread_base) { Okl4::L4_ThreadId_t tid = thread_base ? thread_base->native_thread().l4id : @@ -83,7 +83,7 @@ static inline void thread_switch_to(Genode::Thread_base *thread_base) */ static inline void thread_stop_myself() { - Genode::Thread_base *myself = Genode::Thread_base::myself(); + Genode::Thread *myself = Genode::Thread::myself(); Okl4::L4_ThreadId_t tid = myself ? myself->native_thread().l4id : main_thread_tid; diff --git a/repos/base-okl4/src/lib/base/thread_bootstrap.cc b/repos/base-okl4/src/lib/base/thread_bootstrap.cc index 99357bf73f..b7c7c23ff8 100644 --- a/repos/base-okl4/src/lib/base/thread_bootstrap.cc +++ b/repos/base-okl4/src/lib/base/thread_bootstrap.cc @@ -69,17 +69,17 @@ void prepare_init_main_thread() void prepare_reinit_main_thread() { prepare_init_main_thread(); } -/***************** - ** Thread_base ** - *****************/ +/************ + ** Thread ** + ************/ -void Genode::Thread_base::_thread_bootstrap() +void Genode::Thread::_thread_bootstrap() { native_thread().l4id.raw = Okl4::copy_uregister_to_utcb(); } -void Genode::Thread_base::_init_platform_thread(size_t, Type type) +void Genode::Thread::_init_platform_thread(size_t, Type type) { if (type == NORMAL) { return; } native_thread().l4id.raw = main_thread_tid.raw; diff --git a/repos/base-pistachio/src/core/irq_session_component.cc b/repos/base-pistachio/src/core/irq_session_component.cc index e4e40e2000..68bc158345 100644 --- a/repos/base-pistachio/src/core/irq_session_component.cc +++ b/repos/base-pistachio/src/core/irq_session_component.cc @@ -60,7 +60,7 @@ void Irq_object::_wait_for_irq() void Irq_object::start() { - ::Thread_base::start(); + ::Thread::start(); _sync_bootup.lock(); } @@ -115,7 +115,7 @@ void Irq_object::entry() Irq_object::Irq_object(unsigned irq) : - Thread<4096>("irq"), + Thread_deprecated<4096>("irq"), _sync_ack(Lock::LOCKED), _sync_bootup(Lock::LOCKED), _irq(irq) { } diff --git a/repos/base-pistachio/src/core/thread_start.cc b/repos/base-pistachio/src/core/thread_start.cc index 09a6ae8ecf..b32323b77f 100644 --- a/repos/base-pistachio/src/core/thread_start.cc +++ b/repos/base-pistachio/src/core/thread_start.cc @@ -25,16 +25,16 @@ using namespace Genode; -void Thread_base::_thread_start() +void Thread::_thread_start() { - Thread_base::myself()->_thread_bootstrap(); - Thread_base::myself()->entry(); - Thread_base::myself()->_join_lock.unlock(); + Thread::myself()->_thread_bootstrap(); + Thread::myself()->entry(); + Thread::myself()->_join_lock.unlock(); sleep_forever(); } -void Thread_base::start() +void Thread::start() { /* create and start platform thread */ native_thread().pt = new(platform()->core_mem_alloc()) @@ -49,7 +49,7 @@ void Thread_base::start() } -void Thread_base::cancel_blocking() +void Thread::cancel_blocking() { /* * Within core, we never need to unblock threads @@ -57,7 +57,7 @@ void Thread_base::cancel_blocking() } -void Thread_base::_deinit_platform_thread() +void Thread::_deinit_platform_thread() { /* destruct platform thread */ destroy(platform()->core_mem_alloc(), native_thread().pt); diff --git a/repos/base-pistachio/src/include/base/internal/lock_helper.h b/repos/base-pistachio/src/include/base/internal/lock_helper.h index eef5fe3be4..177ab98ed2 100644 --- a/repos/base-pistachio/src/include/base/internal/lock_helper.h +++ b/repos/base-pistachio/src/include/base/internal/lock_helper.h @@ -46,7 +46,7 @@ static inline void thread_yield() { Pistachio::L4_Yield(); } * * \return true if the thread was in blocking state */ -static inline bool thread_check_stopped_and_restart(Genode::Thread_base *thread_base) +static inline bool thread_check_stopped_and_restart(Genode::Thread *thread_base) { using namespace Pistachio; @@ -70,7 +70,7 @@ static inline bool thread_check_stopped_and_restart(Genode::Thread_base *thread_ /** * Yield CPU time to the specified thread */ -static inline void thread_switch_to(Genode::Thread_base *thread_base) +static inline void thread_switch_to(Genode::Thread *thread_base) { Pistachio::L4_ThreadId_t tid = thread_base ? thread_base->native_thread().l4id : @@ -84,7 +84,7 @@ static inline void thread_switch_to(Genode::Thread_base *thread_base) */ static inline void thread_stop_myself() { - Genode::Thread_base *myself = Genode::Thread_base::myself(); + Genode::Thread *myself = Genode::Thread::myself(); Pistachio::L4_ThreadId_t tid = myself ? myself->native_thread().l4id : main_thread_tid; diff --git a/repos/base-pistachio/src/lib/base/thread_bootstrap.cc b/repos/base-pistachio/src/lib/base/thread_bootstrap.cc index 1cad1ee109..c5942e2aad 100644 --- a/repos/base-pistachio/src/lib/base/thread_bootstrap.cc +++ b/repos/base-pistachio/src/lib/base/thread_bootstrap.cc @@ -38,17 +38,17 @@ void prepare_init_main_thread() void prepare_reinit_main_thread() { prepare_init_main_thread(); } -/***************** - ** Thread_base ** - *****************/ +/************ + ** Thread ** + ************/ -void Genode::Thread_base::_thread_bootstrap() +void Genode::Thread::_thread_bootstrap() { native_thread().l4id = Pistachio::L4_Myself(); } -void Genode::Thread_base::_init_platform_thread(size_t, Type type) +void Genode::Thread::_init_platform_thread(size_t, Type type) { if (type == NORMAL) { return; } native_thread().l4id = main_thread_tid; diff --git a/repos/base-sel4/src/core/capability_space.cc b/repos/base-sel4/src/core/capability_space.cc index e1546975fe..24679d6a98 100644 --- a/repos/base-sel4/src/core/capability_space.cc +++ b/repos/base-sel4/src/core/capability_space.cc @@ -122,7 +122,7 @@ Capability_space::create_rpc_obj_cap(Native_capability ep_cap, ** Implementation of the Capability_space interface ** ******************************************************/ -Native_capability Capability_space::create_ep_cap(Thread_base &ep_thread) +Native_capability Capability_space::create_ep_cap(Thread &ep_thread) { Cap_sel const ep_sel(ep_thread.native_thread().ep_sel); diff --git a/repos/base-sel4/src/core/irq_session_component.cc b/repos/base-sel4/src/core/irq_session_component.cc index d9aaa1edb7..2e5b8e339e 100644 --- a/repos/base-sel4/src/core/irq_session_component.cc +++ b/repos/base-sel4/src/core/irq_session_component.cc @@ -44,7 +44,7 @@ void Irq_object::entry() Irq_object::Irq_object(unsigned irq) : - Thread<4096>("irq"), + Thread_deprecated<4096>("irq"), _sync_ack(Lock::LOCKED), _sync_bootup(Lock::LOCKED), _irq(irq) { } diff --git a/repos/base-sel4/src/core/pager.cc b/repos/base-sel4/src/core/pager.cc index 9c67fcab1e..925e6acf4f 100644 --- a/repos/base-sel4/src/core/pager.cc +++ b/repos/base-sel4/src/core/pager.cc @@ -74,11 +74,11 @@ void Ipc_pager::reply_and_wait_for_fault() seL4_MessageInfo_t const reply_msg = seL4_MessageInfo_new(0, 0, 0, 0); page_fault_msg_info = - seL4_ReplyRecv(Thread_base::myself()->native_thread().ep_sel, reply_msg, &badge); + seL4_ReplyRecv(Thread::myself()->native_thread().ep_sel, reply_msg, &badge); } else { page_fault_msg_info = - seL4_Recv(Thread_base::myself()->native_thread().ep_sel, &badge); + seL4_Recv(Thread::myself()->native_thread().ep_sel, &badge); } Fault_info const fault_info(page_fault_msg_info); diff --git a/repos/base-sel4/src/core/platform_thread.cc b/repos/base-sel4/src/core/platform_thread.cc index e233f7d034..49b4fa8dfb 100644 --- a/repos/base-sel4/src/core/platform_thread.cc +++ b/repos/base-sel4/src/core/platform_thread.cc @@ -137,7 +137,7 @@ int Platform_thread::start(void *ip, void *sp, unsigned int cpu_no) /* * Populate the thread's IPC buffer with initial information about the * thread. Once started, the thread picks up this information in the - * 'Thread_base::_thread_bootstrap' method. + * 'Thread::_thread_bootstrap' method. */ prepopulate_ipc_buffer(_info.ipc_buffer_phys, _ep_sel); diff --git a/repos/base-sel4/src/core/thread_start.cc b/repos/base-sel4/src/core/thread_start.cc index f0b6ea73c2..633f74fff0 100644 --- a/repos/base-sel4/src/core/thread_start.cc +++ b/repos/base-sel4/src/core/thread_start.cc @@ -27,7 +27,7 @@ using namespace Genode; -void Thread_base::_init_platform_thread(size_t, Type type) +void Thread::_init_platform_thread(size_t, Type type) { addr_t const utcb_virt_addr = (addr_t)&_stack->utcb(); @@ -57,29 +57,29 @@ void Thread_base::_init_platform_thread(size_t, Type type) } -void Thread_base::_deinit_platform_thread() +void Thread::_deinit_platform_thread() { PDBG("not implemented"); } -void Thread_base::_thread_start() +void Thread::_thread_start() { - Thread_base::myself()->_thread_bootstrap(); - Thread_base::myself()->entry(); + Thread::myself()->_thread_bootstrap(); + Thread::myself()->entry(); sleep_forever(); } -void Thread_base::start() +void Thread::start() { start_sel4_thread(Cap_sel(native_thread().tcb_sel), (addr_t)&_thread_start, (addr_t)stack_top()); } -void Thread_base::cancel_blocking() +void Thread::cancel_blocking() { PWRN("not implemented"); } diff --git a/repos/base-sel4/src/include/base/internal/capability_space.h b/repos/base-sel4/src/include/base/internal/capability_space.h index bca777b775..e75d360dda 100644 --- a/repos/base-sel4/src/include/base/internal/capability_space.h +++ b/repos/base-sel4/src/include/base/internal/capability_space.h @@ -31,7 +31,7 @@ namespace Genode { namespace Capability_space { /** * Create capability for RPC entrypoint thread */ - Native_capability create_ep_cap(Thread_base &ep_thread); + Native_capability create_ep_cap(Thread &ep_thread); /** * Increment reference counter diff --git a/repos/base-sel4/src/include/base/internal/kernel_debugger.h b/repos/base-sel4/src/include/base/internal/kernel_debugger.h index 47b779a1a5..c0255298c6 100644 --- a/repos/base-sel4/src/include/base/internal/kernel_debugger.h +++ b/repos/base-sel4/src/include/base/internal/kernel_debugger.h @@ -34,7 +34,7 @@ static inline void kernel_debugger_panic(char const *msg) { kernel_debugger_outstring(msg); kernel_debugger_outstring("\n"); - seL4_TCB_Suspend(Genode::Thread_base::myself()->native_thread().tcb_sel); + seL4_TCB_Suspend(Genode::Thread::myself()->native_thread().tcb_sel); } #endif /* _INCLUDE__BASE__INTERNAL__KERNEL_DEBUGGER_H_ */ diff --git a/repos/base-sel4/src/lib/base/capability_space.cc b/repos/base-sel4/src/lib/base/capability_space.cc index fc4da8df78..d3c3b128c8 100644 --- a/repos/base-sel4/src/lib/base/capability_space.cc +++ b/repos/base-sel4/src/lib/base/capability_space.cc @@ -93,7 +93,7 @@ namespace { ** Implementation of the Capability_space interface ** ******************************************************/ -Native_capability Capability_space::create_ep_cap(Thread_base &ep_thread) +Native_capability Capability_space::create_ep_cap(Thread &ep_thread) { Cap_sel const ep_sel = Cap_sel(ep_thread.native_thread().ep_sel); diff --git a/repos/base-sel4/src/lib/base/ipc.cc b/repos/base-sel4/src/lib/base/ipc.cc index 7ef0b2314d..71e1105777 100644 --- a/repos/base-sel4/src/lib/base/ipc.cc +++ b/repos/base-sel4/src/lib/base/ipc.cc @@ -47,12 +47,12 @@ static unsigned &rcv_sel() { /* * When the function is called at the very early initialization phase, we - * cannot access Thread_base::myself()->native_thread() because the - * Thread_base object of the main thread does not exist yet. During this + * cannot access Thread::myself()->native_thread() because the + * Thread object of the main thread does not exist yet. During this * phase, we return a reference to the 'main_rcv_sel' variable. */ - if (Thread_base::myself()) { - return Thread_base::myself()->native_thread().rcv_sel; + if (Thread::myself()) { + return Thread::myself()->native_thread().rcv_sel; } static unsigned main_rcv_sel = Capability_space::alloc_rcv_sel(); @@ -313,7 +313,7 @@ Genode::Rpc_request Genode::ipc_reply_wait(Reply_capability const &last_caller, if (exc.value == Rpc_exception_code::INVALID_OBJECT) { seL4_MessageInfo_t const request_msg_info = - seL4_Recv(Thread_base::myself()->native_thread().ep_sel, &badge); + seL4_Recv(Thread::myself()->native_thread().ep_sel, &badge); decode_seL4_message(request_msg_info, request_msg); @@ -324,7 +324,7 @@ Genode::Rpc_request Genode::ipc_reply_wait(Reply_capability const &last_caller, seL4_SetMR(MR_IDX_EXC_CODE, exc.value); seL4_MessageInfo_t const request_msg_info = - seL4_ReplyRecv(Thread_base::myself()->native_thread().ep_sel, + seL4_ReplyRecv(Thread::myself()->native_thread().ep_sel, reply_msg_info, &badge); decode_seL4_message(request_msg_info, request_msg); @@ -336,7 +336,7 @@ Genode::Rpc_request Genode::ipc_reply_wait(Reply_capability const &last_caller, Ipc_server::Ipc_server() : - Native_capability(Capability_space::create_ep_cap(*Thread_base::myself())) + Native_capability(Capability_space::create_ep_cap(*Thread::myself())) { } diff --git a/repos/base-sel4/src/lib/base/thread_bootstrap.cc b/repos/base-sel4/src/lib/base/thread_bootstrap.cc index 742ba05fe8..509b625b8f 100644 --- a/repos/base-sel4/src/lib/base/thread_bootstrap.cc +++ b/repos/base-sel4/src/lib/base/thread_bootstrap.cc @@ -28,11 +28,11 @@ void prepare_init_main_thread() { } void prepare_reinit_main_thread() { prepare_init_main_thread(); } -/***************** - ** Thread_base ** - *****************/ +/************ + ** Thread ** + ************/ -void Genode::Thread_base::_thread_bootstrap() +void Genode::Thread::_thread_bootstrap() { if (native_thread().ep_sel == 0) { native_thread().ep_sel = _stack->utcb().ep_sel; diff --git a/repos/base-sel4/src/lib/base/thread_init.cc b/repos/base-sel4/src/lib/base/thread_init.cc index e28c2c0394..235f9b4caf 100644 --- a/repos/base-sel4/src/lib/base/thread_init.cc +++ b/repos/base-sel4/src/lib/base/thread_init.cc @@ -19,6 +19,6 @@ using namespace Genode; -void Thread_base::_init_platform_thread(size_t, Type type) +void Thread::_init_platform_thread(size_t, Type type) { } diff --git a/repos/base-sel4/src/lib/base/thread_sel4.cc b/repos/base-sel4/src/lib/base/thread_sel4.cc index 1cf78b872d..54fc59cdcb 100644 --- a/repos/base-sel4/src/lib/base/thread_sel4.cc +++ b/repos/base-sel4/src/lib/base/thread_sel4.cc @@ -24,38 +24,29 @@ using namespace Genode; -/** - * Entry point entered by new threads - */ -//void Thread_base::_thread_start() -//{ -// PDBG("not implemented"); -//} +/************ + ** Thread ** + ************/ - -/***************** - ** Thread base ** - *****************/ - -void Thread_base::_init_platform_thread(size_t, Type type) +void Thread::_init_platform_thread(size_t, Type type) { PDBG("not implemented"); } -void Thread_base::_deinit_platform_thread() +void Thread::_deinit_platform_thread() { PDBG("not implemented"); } -void Thread_base::start() +void Thread::start() { PDBG("not implemented"); } -void Thread_base::cancel_blocking() +void Thread::cancel_blocking() { PDBG("not implemented"); } diff --git a/repos/base/include/base/cancelable_lock.h b/repos/base/include/base/cancelable_lock.h index babc747122..28315f9314 100644 --- a/repos/base/include/base/cancelable_lock.h +++ b/repos/base/include/base/cancelable_lock.h @@ -19,7 +19,7 @@ namespace Genode { - class Thread_base; + class Thread; class Cancelable_lock; } @@ -32,12 +32,12 @@ class Genode::Cancelable_lock { private: - Thread_base *_thread_base; - Applicant *_to_wake_up; + Thread *_thread_base; + Applicant *_to_wake_up; public: - explicit Applicant(Thread_base *thread_base) + explicit Applicant(Thread *thread_base) : _thread_base(thread_base), _to_wake_up(0) { } void applicant_to_wake_up(Applicant *to_wake_up) { @@ -45,7 +45,7 @@ class Genode::Cancelable_lock Applicant *applicant_to_wake_up() { return _to_wake_up; } - Thread_base *thread_base() { return _thread_base; } + Thread *thread_base() { return _thread_base; } /** * Called from previous lock owner diff --git a/repos/base/include/base/entrypoint.h b/repos/base/include/base/entrypoint.h index 30a327b957..bb60434ae4 100644 --- a/repos/base/include/base/entrypoint.h +++ b/repos/base/include/base/entrypoint.h @@ -53,14 +53,13 @@ class Genode::Entrypoint : Genode::Noncopyable } }; - enum { STACK_SIZE = 1024*sizeof(long) }; - - struct Signal_proxy_thread : Thread + struct Signal_proxy_thread : Thread { + enum { STACK_SIZE = 1024*sizeof(long) }; Entrypoint &ep; - Signal_proxy_thread(Entrypoint &ep) + Signal_proxy_thread(Env &env, Entrypoint &ep) : - Thread("signal_proxy"), + Thread(env, "signal_proxy", STACK_SIZE), ep(ep) { } diff --git a/repos/base/include/base/rpc_server.h b/repos/base/include/base/rpc_server.h index 51d2a354f2..e314ae6a00 100644 --- a/repos/base/include/base/rpc_server.h +++ b/repos/base/include/base/rpc_server.h @@ -249,7 +249,7 @@ struct Genode::Rpc_object : Rpc_object_base, Rpc_dispatcher +class Genode::Rpc_entrypoint : Thread, public Object_pool { private: diff --git a/repos/base/include/base/thread.h b/repos/base/include/base/thread.h index e709ced6ba..94ee27b80f 100644 --- a/repos/base/include/base/thread.h +++ b/repos/base/include/base/thread.h @@ -26,19 +26,20 @@ namespace Genode { struct Native_utcb; struct Native_thread; - class Thread_base; + class Thread; class Stack; - template class Thread; + class Env; + template class Thread_deprecated; } /** * Concurrent flow of control * - * A 'Thread_base' object corresponds to a physical thread. The execution + * A 'Thread' object corresponds to a physical thread. The execution * starts at the 'entry()' method as soon as 'start()' is called. */ -class Genode::Thread_base +class Genode::Thread { public: @@ -46,6 +47,10 @@ class Genode::Thread_base class Stack_too_large : public Exception { }; class Stack_alloc_failed : public Exception { }; + typedef Affinity::Location Location; + typedef Cpu_session::Name Name; + typedef Cpu_session::Weight Weight; + private: /** @@ -157,13 +162,17 @@ class Genode::Thread_base * gets skipped but we should at least set Stack::ds_cap in a * way that it references the dataspace of the already attached * stack. + * + * \deprecated superseded by the 'Thread(Env &...' constructor */ - Thread_base(size_t weight, const char *name, size_t stack_size, - Type type, Affinity::Location affinity = Affinity::Location()); + Thread(size_t weight, const char *name, size_t stack_size, + Type type, Affinity::Location affinity = Affinity::Location()); /** * Constructor * + * \noapi + * * \param weight weighting regarding the CPU session quota * \param name thread name (for debugging) * \param stack_size stack size @@ -176,10 +185,12 @@ class Genode::Thread_base * of the component environment. A small portion of the stack size is * internally used by the framework for storing thread-specific * information such as the thread's name. + * + * \deprecated superseded by the 'Thread(Env &...' constructor */ - Thread_base(size_t weight, const char *name, size_t stack_size, - Affinity::Location affinity = Affinity::Location()) - : Thread_base(weight, name, stack_size, NORMAL, affinity) { } + Thread(size_t weight, const char *name, size_t stack_size, + Affinity::Location affinity = Affinity::Location()) + : Thread(weight, name, stack_size, NORMAL, affinity) { } /** * Constructor @@ -199,15 +210,51 @@ class Genode::Thread_base * \throw Stack_too_large * \throw Stack_alloc_failed * \throw Out_of_stack_space + * + * \deprecated superseded by the 'Thread(Env &...' constructor */ - Thread_base(size_t weight, const char *name, size_t stack_size, - Type type, Cpu_session *, - Affinity::Location affinity = Affinity::Location()); + Thread(size_t weight, const char *name, size_t stack_size, + Type type, Cpu_session *, + Affinity::Location affinity = Affinity::Location()); + + /** + * Constructor + * + * \param env component environment + * \param name thread name, used for debugging + * \param stack_size stack size + * \param location CPU affinity relative to the CPU-session's + * affinity space + * \param weight scheduling weight relative to the other threads + * sharing the same CPU session + * \param cpu_session CPU session used to create the thread. Normally + * 'env.cpu()' should be specified. + * + * The 'env' argument is needed because the thread creation procedure + * needs to interact with the environment for attaching the thread's + * stack, the trace-control dataspace, and the thread's trace buffer + * and policy. + * + * \throw Stack_too_large + * \throw Stack_alloc_failed + * \throw Out_of_stack_space + */ + Thread(Env &env, Name const &name, size_t stack_size, Location location, + Weight weight, Cpu_session &cpu); + + /** + * Constructor + * + * This is a shortcut for the common case of creating a thread via + * the environment's CPU session, at the default affinity location, and + * with the default weight. + */ + Thread(Env &env, Name const &name, size_t stack_size); /** * Destructor */ - virtual ~Thread_base(); + virtual ~Thread(); /** * Entry method of the thread @@ -224,9 +271,17 @@ class Genode::Thread_base /** * Request name of thread + * + * \noapi + * \deprecated use the 'Name name() const' method instead */ void name(char *dst, size_t dst_len); + /** + * Request name of thread + */ + Name name() const; + /** * Add an additional stack to the thread * @@ -293,11 +348,11 @@ class Genode::Thread_base static size_t stack_area_virtual_size(); /** - * Return 'Thread_base' object corresponding to the calling thread + * Return 'Thread' object corresponding to the calling thread * - * \return pointer to caller's 'Thread_base' object + * \return pointer to caller's 'Thread' object */ - static Thread_base *myself(); + static Thread *myself(); /** * Ensure that the stack has a given size at the minimum @@ -352,7 +407,7 @@ class Genode::Thread_base template -class Genode::Thread : public Thread_base +class Genode::Thread_deprecated : public Thread { public: @@ -363,8 +418,8 @@ class Genode::Thread : public Thread_base * \param name thread name (for debugging) * \param type enables selection of special construction */ - explicit Thread(size_t weight, const char *name) - : Thread_base(weight, name, STACK_SIZE, Type::NORMAL) { } + explicit Thread_deprecated(size_t weight, const char *name) + : Thread(weight, name, STACK_SIZE, Type::NORMAL) { } /** * Constructor @@ -375,8 +430,8 @@ class Genode::Thread : public Thread_base * * \noapi */ - explicit Thread(size_t weight, const char *name, Type type) - : Thread_base(weight, name, STACK_SIZE, type) { } + explicit Thread_deprecated(size_t weight, const char *name, Type type) + : Thread(weight, name, STACK_SIZE, type) { } /** * Constructor @@ -387,25 +442,25 @@ class Genode::Thread : public Thread_base * * \noapi */ - explicit Thread(size_t weight, const char *name, + explicit Thread_deprecated(size_t weight, const char *name, Cpu_session * cpu_session) - : Thread_base(weight, name, STACK_SIZE, Type::NORMAL, cpu_session) { } + : Thread(weight, name, STACK_SIZE, Type::NORMAL, cpu_session) { } /** * Shortcut for 'Thread(DEFAULT_WEIGHT, name, type)' * * \noapi */ - explicit Thread(const char *name, Type type = NORMAL) - : Thread_base(Cpu_session::DEFAULT_WEIGHT, name, STACK_SIZE, type) { } + explicit Thread_deprecated(const char *name, Type type = NORMAL) + : Thread(Weight::DEFAULT_WEIGHT, name, STACK_SIZE, type) { } /** * Shortcut for 'Thread(DEFAULT_WEIGHT, name, cpu_session)' * * \noapi */ - explicit Thread(const char *name, Cpu_session * cpu_session) - : Thread_base(Cpu_session::DEFAULT_WEIGHT, name, STACK_SIZE, + explicit Thread_deprecated(const char *name, Cpu_session * cpu_session) + : Thread(Weight::DEFAULT_WEIGHT, name, STACK_SIZE, Type::NORMAL, cpu_session) { } }; diff --git a/repos/base/include/base/trace/events.h b/repos/base/include/base/trace/events.h index b7e4b74532..35449a2169 100644 --- a/repos/base/include/base/trace/events.h +++ b/repos/base/include/base/trace/events.h @@ -36,7 +36,7 @@ struct Genode::Trace::Rpc_call Rpc_call(char const *rpc_name, Msgbuf_base const &msg) : rpc_name(rpc_name), msg(msg) { - Thread_base::trace(this); + Thread::trace(this); } size_t generate(Policy_module &policy, char *dst) const { @@ -52,7 +52,7 @@ struct Genode::Trace::Rpc_returned Rpc_returned(char const *rpc_name, Msgbuf_base const &msg) : rpc_name(rpc_name), msg(msg) { - Thread_base::trace(this); + Thread::trace(this); } size_t generate(Policy_module &policy, char *dst) const { @@ -68,7 +68,7 @@ struct Genode::Trace::Rpc_dispatch : rpc_name(rpc_name) { - Thread_base::trace(this); + Thread::trace(this); } size_t generate(Policy_module &policy, char *dst) const { @@ -84,7 +84,7 @@ struct Genode::Trace::Rpc_reply : rpc_name(rpc_name) { - Thread_base::trace(this); + Thread::trace(this); } size_t generate(Policy_module &policy, char *dst) const { @@ -97,7 +97,7 @@ struct Genode::Trace::Signal_submit unsigned const num; Signal_submit(unsigned const num) : num(num) - { Thread_base::trace(this); } + { Thread::trace(this); } size_t generate(Policy_module &policy, char *dst) const { return policy.signal_submit(dst, num); } @@ -113,7 +113,7 @@ struct Genode::Trace::Signal_received : signal_context(signal_context), num(num) { - Thread_base::trace(this); + Thread::trace(this); } size_t generate(Policy_module &policy, char *dst) const { diff --git a/repos/base/include/cpu_session/client.h b/repos/base/include/cpu_session/client.h index 4980cfb71b..f2484196df 100644 --- a/repos/base/include/cpu_session/client.h +++ b/repos/base/include/cpu_session/client.h @@ -26,9 +26,9 @@ struct Genode::Cpu_session_client : Rpc_client : Rpc_client(session) { } Thread_capability - create_thread(Capability pd, size_t quota, Name const &name, - Affinity::Location affinity, addr_t utcb = 0) override { - return call(pd, quota, name, affinity, utcb); } + create_thread(Capability pd, Name const &name, + Affinity::Location affinity, Weight weight, addr_t utcb = 0) override { + return call(pd, name, affinity, weight, utcb); } Ram_dataspace_capability utcb(Thread_capability thread) override { return call(thread); } diff --git a/repos/base/include/cpu_session/cpu_session.h b/repos/base/include/cpu_session/cpu_session.h index 9e5a7a418c..8f07f33c8b 100644 --- a/repos/base/include/cpu_session/cpu_session.h +++ b/repos/base/include/cpu_session/cpu_session.h @@ -42,14 +42,24 @@ struct Genode::Cpu_session : Session static const char *service_name() { return "CPU"; } - enum { THREAD_NAME_LEN = 48 }; + enum { THREAD_NAME_LEN = 32 }; enum { PRIORITY_LIMIT = 1 << 16 }; enum { QUOTA_LIMIT_LOG2 = 15 }; enum { QUOTA_LIMIT = 1 << QUOTA_LIMIT_LOG2 }; enum { DEFAULT_PRIORITY = 0 }; - enum { DEFAULT_WEIGHT = 10 }; - typedef Rpc_in_buffer Name; + /** + * Thread weight argument type for 'create_thread' + */ + struct Weight + { + enum { DEFAULT_WEIGHT = 10 }; + size_t value = DEFAULT_WEIGHT; + Weight() { } + explicit Weight(size_t value) : value(value) { } + }; + + typedef String Name; /** * Physical quota configuration @@ -62,20 +72,20 @@ struct Genode::Cpu_session : Session * Create a new thread * * \param pd protection domain where the thread will be executed - * \param quota CPU quota that shall be granted to the thread * \param name name for the thread * \param affinity CPU affinity, referring to the session-local * affinity space - * \param utcb Base of the UTCB that will be used by the thread + * \param weight CPU quota that shall be granted to the thread + * \param utcb base of the UTCB that will be used by the thread * \return capability representing the new thread * \throw Thread_creation_failed * \throw Out_of_metadata * \throw Quota_exceeded */ virtual Thread_capability create_thread(Capability pd, - size_t quota, Name const &name, - Affinity::Location affinity = Affinity::Location(), + Affinity::Location affinity, + Weight weight, addr_t utcb = 0) = 0; /** @@ -317,8 +327,8 @@ struct Genode::Cpu_session : Session GENODE_RPC_THROW(Rpc_create_thread, Thread_capability, create_thread, GENODE_TYPE_LIST(Thread_creation_failed, Out_of_metadata), - Capability, size_t, Name const &, - Affinity::Location, addr_t); + Capability, Name const &, Affinity::Location, + Weight, addr_t); GENODE_RPC(Rpc_utcb, Ram_dataspace_capability, utcb, Thread_capability); GENODE_RPC(Rpc_kill_thread, void, kill_thread, Thread_capability); GENODE_RPC(Rpc_start, int, start, Thread_capability, addr_t, addr_t); diff --git a/repos/base/run/thread.run b/repos/base/run/thread.run index 0dc3eb6979..e49cf4e6d9 100644 --- a/repos/base/run/thread.run +++ b/repos/base/run/thread.run @@ -2,11 +2,21 @@ build "core init test/thread" create_boot_directory -install_config { +# +# We skip pause-resume test on platforms where this functionality is not +# supported. +# +proc pause_resume_supported { } { + if {[have_spec pistachio]} { return 0 } + if {[have_spec linux]} { return 0 } + if {[have_spec fiasco]} { return 0 } + return 1; +} + +set config { - @@ -14,27 +24,21 @@ install_config { + } + +append_if [pause_resume_supported] config { } + +append config { + } +install_config $config + build_boot_image "core init test-thread" append qemu_args "-nographic -m 64" -run_genode_until {child "test-thread" exited with exit value .*\n} 60 +run_genode_until {.*test completed successfully.*\n} 60 -# determine error code of child exit -set exit_code [regexp -inline {child "test-thread" exited with exit value .*\n} $output] -set exit_code [regexp -inline {[-+]?[0-9]+} $exit_code] - -# good case -if {$exit_code eq 0} { - return -} -# no pause/resume support for Fiasco and Pistachio - they may return a error -if {[expr [have_spec fiasco] || [have_spec pistachio]] && $exit_code eq -11} { return } -# no puase/resume support for Linux - it may return a error -if {[have_spec linux] && $exit_code eq -10} { return } - -exit -1 diff --git a/repos/base/src/core/cpu_session_component.cc b/repos/base/src/core/cpu_session_component.cc index 63d368ec36..55b1955702 100644 --- a/repos/base/src/core/cpu_session_component.cc +++ b/repos/base/src/core/cpu_session_component.cc @@ -35,27 +35,27 @@ void Cpu_thread_component::update_exception_sigh() Thread_capability Cpu_session_component::create_thread(Capability pd_cap, - size_t weight, Name const &name, Affinity::Location affinity, + Weight weight, addr_t utcb) { Trace::Thread_name thread_name(name.string()); Cpu_thread_component *thread = 0; - if (weight == 0) { + if (weight.value == 0) { PWRN("Thread %s: Bad weight 0, using %i instead.", - name.string(), DEFAULT_WEIGHT); - weight = DEFAULT_WEIGHT; + name.string(), Weight::DEFAULT_WEIGHT); + weight = Weight(); } - if (weight > QUOTA_LIMIT) { + if (weight.value > QUOTA_LIMIT) { PWRN("Thread %s: Oversized weight %zu, using %i instead.", - name.string(), weight, QUOTA_LIMIT); - weight = QUOTA_LIMIT; + name.string(), weight.value, QUOTA_LIMIT); + weight = Weight(QUOTA_LIMIT); } Lock::Guard thread_list_lock_guard(_thread_list_lock); - _incr_weight(weight); + _incr_weight(weight.value); /* * Create thread associated with its protection domain @@ -69,7 +69,7 @@ Thread_capability Cpu_session_component::create_thread(Capability pd thread = new (&_thread_alloc) Cpu_thread_component( cap(), *_thread_ep, *_pager_ep, *pd, _trace_control_area, - weight, _weight_to_quota(weight), + weight, _weight_to_quota(weight.value), _thread_affinity(affinity), _label, thread_name, _priority, utcb, _default_exception_handler); }; diff --git a/repos/base/src/core/include/cpu_session_component.h b/repos/base/src/core/include/cpu_session_component.h index 67de5b1d67..ccdeb8720d 100644 --- a/repos/base/src/core/include/cpu_session_component.h +++ b/repos/base/src/core/include/cpu_session_component.h @@ -60,7 +60,7 @@ namespace Genode { Pager_entrypoint &_pager_ep; Capability _pd; Region_map_component &_address_space_region_map; - size_t const _weight; + Cpu_session::Weight const _weight; Session_label const _session_label; Thread_name const _name; Platform_thread _platform_thread; @@ -116,7 +116,8 @@ namespace Genode { * \param pager_ep pager entrypoint used for handling the page * faults of the thread * \param pd PD session where the thread is executed - * \param weight weighting regarding the CPU session quota + * \param weight scheduling weight relative to the other + * threads of the same CPU session * \param quota initial quota counter-value of the weight * \param labal label of the threads session * \param name name for the thread @@ -124,24 +125,25 @@ namespace Genode { * \param utcb user-local UTCB base * \param sigh initial exception handler */ - Cpu_thread_component(Cpu_session_capability cpu_session_cap, - Rpc_entrypoint &ep, - Pager_entrypoint &pager_ep, - Pd_session_component &pd, - Trace::Control_area &trace_control_area, - size_t const weight, - size_t const quota, - Affinity::Location affinity, - Session_label const &label, - Thread_name const &name, - unsigned priority, addr_t utcb, + Cpu_thread_component(Cpu_session_capability cpu_session_cap, + Rpc_entrypoint &ep, + Pager_entrypoint &pager_ep, + Pd_session_component &pd, + Trace::Control_area &trace_control_area, + Cpu_session::Weight weight, + size_t quota, + Affinity::Location location, + Session_label const &label, + Thread_name const &name, + unsigned priority, + addr_t utcb, Signal_context_capability sigh) : _ep(ep), _pager_ep(pager_ep), _pd(pd.cap()), _address_space_region_map(pd.address_space_region_map()), _weight(weight), _session_label(label), _name(name), - _platform_thread(quota, name.string(), priority, affinity, utcb), + _platform_thread(quota, name.string(), priority, location, utcb), _bound_to_pd(_bind_to_pd(pd)), _sigh(sigh), _trace_control_slot(trace_control_area), @@ -195,7 +197,7 @@ namespace Genode { Trace::Source *trace_source() { return &_trace_source; } - size_t weight() const { return _weight; } + size_t weight() const { return _weight.value; } void sigh(Signal_context_capability sigh) { @@ -340,8 +342,8 @@ namespace Genode { ** CPU session interface ** ***************************/ - Thread_capability create_thread(Capability, size_t, Name const &, - Affinity::Location, addr_t) override; + Thread_capability create_thread(Capability, Name const &, + Affinity::Location, Weight, addr_t) override; Ram_dataspace_capability utcb(Thread_capability thread) override; void kill_thread(Thread_capability) override; int start(Thread_capability, addr_t, addr_t) override; diff --git a/repos/base/src/core/include/irq_object.h b/repos/base/src/core/include/irq_object.h index 9e4b199f2b..e0f70387ae 100644 --- a/repos/base/src/core/include/irq_object.h +++ b/repos/base/src/core/include/irq_object.h @@ -18,7 +18,7 @@ namespace Genode { class Irq_object; } -class Genode::Irq_object : public Thread<4096> { +class Genode::Irq_object : public Thread_deprecated<4096> { private: diff --git a/repos/base/src/core/include/pager.h b/repos/base/src/core/include/pager.h index ba9657417a..4488036cb6 100644 --- a/repos/base/src/core/include/pager.h +++ b/repos/base/src/core/include/pager.h @@ -141,7 +141,7 @@ class Genode::Pager_object : public Object_pool::Entry class Genode::Pager_entrypoint : public Object_pool, - public Thread + public Thread_deprecated { private: @@ -161,7 +161,7 @@ class Genode::Pager_entrypoint : public Object_pool, */ Pager_entrypoint(Rpc_cap_factory &cap_factory) : - Thread("pager_ep"), + Thread_deprecated("pager_ep"), _cap_factory(cap_factory) { start(); } diff --git a/repos/base/src/core/main.cc b/repos/base/src/core/main.cc index 998322c8f5..a6affd2d8e 100644 --- a/repos/base/src/core/main.cc +++ b/repos/base/src/core/main.cc @@ -22,6 +22,9 @@ #include #include +/* base-internal includes */ +#include + /* core includes */ #include #include @@ -195,7 +198,7 @@ class Core_child : public Child_policy * the creation of regular threads within core is unsupported. */ -namespace Genode { void init_signal_thread() { } } +namespace Genode { void init_signal_thread(Env &) { } } /******************* diff --git a/repos/base/src/include/base/internal/expanding_cpu_session_client.h b/repos/base/src/include/base/internal/expanding_cpu_session_client.h index 7a82977425..57fb107cb7 100644 --- a/repos/base/src/include/base/internal/expanding_cpu_session_client.h +++ b/repos/base/src/include/base/internal/expanding_cpu_session_client.h @@ -40,13 +40,13 @@ struct Genode::Expanding_cpu_session_client : Upgradeable_client( [&] () { - return Cpu_session_client::create_thread(pd, quota, name, - location, utcb); }, + return Cpu_session_client::create_thread(pd, name, location, + weight, utcb); }, [&] () { upgrade_ram(8*1024); }); } }; diff --git a/repos/base/src/include/base/internal/globals.h b/repos/base/src/include/base/internal/globals.h index 7b6df12ca8..9b279256f5 100644 --- a/repos/base/src/include/base/internal/globals.h +++ b/repos/base/src/include/base/internal/globals.h @@ -21,11 +21,12 @@ namespace Genode { class Region_map; class Ram_session; + class Env; extern Region_map *env_stack_area_region_map; extern Ram_session *env_stack_area_ram_session; - void init_signal_thread(); + void init_signal_thread(Env &); void init_log(); } diff --git a/repos/base/src/include/base/internal/stack.h b/repos/base/src/include/base/internal/stack.h index 7a21eaef7f..fb4734694f 100644 --- a/repos/base/src/include/base/internal/stack.h +++ b/repos/base/src/include/base/internal/stack.h @@ -30,14 +30,14 @@ * data shared between the user-level thread and the kernel. It is typically * used for transferring IPC message payload or for system-call arguments. * The additional stack members are a reference to the corresponding - * 'Thread_base' object and the name of the thread. + * 'Thread' object and the name of the thread. * * The stack area is a virtual memory area, initially not backed by real * memory. When a new thread is created, an empty slot gets assigned to the new * thread and populated with memory pages for the stack and thread-specific * data. Note that this memory is allocated from the RAM session of the * component environment and not accounted for when using the 'sizeof()' - * operand on a 'Thread_base' object. + * operand on a 'Thread' object. * * A thread may be associated with more than one stack. Additional secondary * stacks can be associated with a thread, and used for user level scheduling. @@ -58,6 +58,7 @@ #include /* for 'Native_utcb' */ #include #include /* for 'Ram_dataspace_capability' type */ +#include /* for 'Cpu_session::Name' type */ /* base-internal includes */ #include @@ -75,7 +76,7 @@ class Genode::Stack { public: - typedef String<64> Name; + typedef Cpu_session::Name Name; private: @@ -93,9 +94,9 @@ class Genode::Stack Name const _name; /** - * Pointer to corresponding 'Thread_base' object + * Pointer to corresponding 'Thread' object */ - Thread_base &_thread; + Thread &_thread; /** * Virtual address of the start of the stack @@ -135,7 +136,7 @@ class Genode::Stack /** * Constructor */ - Stack(Name const &name, Thread_base &thread, addr_t base, + Stack(Name const &name, Thread &thread, addr_t base, Ram_dataspace_capability ds_cap) : _name(name), _thread(thread), _base(base), _ds_cap(ds_cap) @@ -179,9 +180,9 @@ class Genode::Stack Name name() const { return _name; } /** - * Return 'Thread_base' object of the stack's thread + * Return 'Thread' object of the stack's thread */ - Thread_base &thread() { return _thread; } + Thread &thread() { return _thread; } /** * Return dataspace used as the stack's backing storage diff --git a/repos/base/src/include/base/internal/stack_allocator.h b/repos/base/src/include/base/internal/stack_allocator.h index 1f80a954b0..8ae6ed3ddc 100644 --- a/repos/base/src/include/base/internal/stack_allocator.h +++ b/repos/base/src/include/base/internal/stack_allocator.h @@ -59,7 +59,7 @@ class Genode::Stack_allocator * \return virtual address of new stack, or * 0 if the allocation failed */ - Stack *alloc(Thread_base *thread, bool main_thread); + Stack *alloc(Thread *thread, bool main_thread); /** * Release stack diff --git a/repos/base/src/lib/base/child_process.cc b/repos/base/src/lib/base/child_process.cc index c9112cad5a..f181030e2c 100644 --- a/repos/base/src/lib/base/child_process.cc +++ b/repos/base/src/lib/base/child_process.cc @@ -167,7 +167,7 @@ Child::Process::Initial_thread::Initial_thread(Cpu_session &cpu, char const *name) : cpu(cpu), - cap(cpu.create_thread(pd, Cpu_session::DEFAULT_WEIGHT, name)) + cap(cpu.create_thread(pd, name, Affinity::Location(), Cpu_session::Weight())) { } diff --git a/repos/base/src/lib/base/entrypoint.cc b/repos/base/src/lib/base/entrypoint.cc index 2edb368950..b4e1c2ac6e 100644 --- a/repos/base/src/lib/base/entrypoint.cc +++ b/repos/base/src/lib/base/entrypoint.cc @@ -12,11 +12,14 @@ * under the terms of the GNU General Public License version 2. */ +/* Genode includes */ #include #include #include #include +/* base-internal includes */ +#include using namespace Genode; @@ -27,7 +30,6 @@ namespace Genode { extern bool inhibit_tracing; void call_global_static_constructors(); - void init_signal_thread(); void destroy_signal_thread(); extern void (*call_component_construct)(Genode::Env &); @@ -76,7 +78,7 @@ void Entrypoint::_process_incoming_signals() /* execute fork magic in noux plugin */ _suspended_callback(); - init_signal_thread(); + init_signal_thread(_env); _rpc_ep.construct(&_env.pd(), Component::stack_size(), Component::name()); _signal_proxy_cap = manage(_signal_proxy); _sig_rec.construct(); @@ -155,7 +157,7 @@ Entrypoint::Entrypoint(Env &env) _rpc_ep(&env.pd(), Component::stack_size(), Component::name()) { /* initialize signalling after initializing but before calling the entrypoint */ - init_signal_thread(); + init_signal_thread(_env); /* * Invoke Component::construct function in the context of the entrypoint. @@ -186,6 +188,6 @@ Entrypoint::Entrypoint(Env &env, size_t stack_size, char const *name) _env(env), _rpc_ep(&env.pd(), stack_size, name) { - _signal_proxy_thread.construct(*this); + _signal_proxy_thread.construct(env, *this); } diff --git a/repos/base/src/lib/base/lock.cc b/repos/base/src/lib/base/lock.cc index a345bc1b16..447062ee7e 100644 --- a/repos/base/src/lib/base/lock.cc +++ b/repos/base/src/lib/base/lock.cc @@ -21,13 +21,13 @@ using namespace Genode; -static inline Genode::Thread_base *invalid_thread_base() +static inline Genode::Thread *invalid_thread_base() { - return (Genode::Thread_base*)~0; + return (Genode::Thread*)~0; } -static inline bool thread_base_valid(Genode::Thread_base *thread_base) +static inline bool thread_base_valid(Genode::Thread *thread_base) { return (thread_base != invalid_thread_base()); } @@ -62,7 +62,7 @@ void Cancelable_lock::Applicant::wake_up() void Cancelable_lock::lock() { - Applicant myself(Thread_base::myself()); + Applicant myself(Thread::myself()); spinlock_lock(&_spinlock_state); diff --git a/repos/base/src/lib/base/rpc_entrypoint.cc b/repos/base/src/lib/base/rpc_entrypoint.cc index 70043f7c4b..68f4da924d 100644 --- a/repos/base/src/lib/base/rpc_entrypoint.cc +++ b/repos/base/src/lib/base/rpc_entrypoint.cc @@ -60,7 +60,7 @@ void Rpc_entrypoint::activate() bool Rpc_entrypoint::is_myself() const { - return (Thread_base::myself() == this); + return (Thread::myself() == this); } @@ -68,13 +68,13 @@ Rpc_entrypoint::Rpc_entrypoint(Pd_session *pd_session, size_t stack_size, char const *name, bool start_on_construction, Affinity::Location location) : - Thread_base(Cpu_session::DEFAULT_WEIGHT, name, stack_size, location), + Thread(Cpu_session::Weight::DEFAULT_WEIGHT, name, stack_size, location), _cap(Untyped_capability()), _cap_valid(Lock::LOCKED), _delay_start(Lock::LOCKED), _delay_exit(Lock::LOCKED), _pd_session(*pd_session) { - Thread_base::start(); + Thread::start(); _block_until_cap_valid(); if (start_on_construction) diff --git a/repos/base/src/lib/base/signal.cc b/repos/base/src/lib/base/signal.cc index 7665467f73..348741e01e 100644 --- a/repos/base/src/lib/base/signal.cc +++ b/repos/base/src/lib/base/signal.cc @@ -11,6 +11,7 @@ * under the terms of the GNU General Public License version 2. */ +/* Genode includes */ #include #include #include @@ -20,11 +21,12 @@ #include #include +/* base-internal includes */ +#include + using namespace Genode; -enum { STACK_SIZE = 4*1024*sizeof(addr_t) }; - -class Signal_handler_thread : Thread, Lock +class Signal_handler_thread : Thread, Lock { private: @@ -44,13 +46,15 @@ class Signal_handler_thread : Thread, Lock Signal_receiver::dispatch_signals(&(*_signal_source)); } + enum { STACK_SIZE = 4*1024*sizeof(addr_t) }; + public: /** * Constructor */ - Signal_handler_thread() - : Thread("signal handler"), Lock(Lock::LOCKED) + Signal_handler_thread(Env &env) + : Thread(env, "signal handler", STACK_SIZE), Lock(Lock::LOCKED) { start(); @@ -92,10 +96,10 @@ namespace Genode { * We allow this function to be overridden in to enable core to omit the * creation of the signal thread. */ - void init_signal_thread() __attribute__((weak)); - void init_signal_thread() + void init_signal_thread(Env &env) __attribute__((weak)); + void init_signal_thread(Env &env) { - signal_handler_thread().construct(); + signal_handler_thread().construct(env); } void destroy_signal_thread() diff --git a/repos/base/src/lib/base/stack_allocator.cc b/repos/base/src/lib/base/stack_allocator.cc index eb1942e3b9..7fc5154379 100644 --- a/repos/base/src/lib/base/stack_allocator.cc +++ b/repos/base/src/lib/base/stack_allocator.cc @@ -45,7 +45,7 @@ addr_t Stack_allocator::idx_to_base(size_t idx) Stack * -Stack_allocator::alloc(Thread_base *thread_base, bool main_thread) +Stack_allocator::alloc(Thread *thread_base, bool main_thread) { if (main_thread) /* the main-thread stack is the first one */ diff --git a/repos/base/src/lib/base/thread.cc b/repos/base/src/lib/base/thread.cc index 53048bcb21..4e895d925c 100644 --- a/repos/base/src/lib/base/thread.cc +++ b/repos/base/src/lib/base/thread.cc @@ -52,7 +52,7 @@ void Stack::size(size_t const size) addr_t const stack_slot_base = Stack_allocator::addr_to_base(this); size_t const ds_size = align_addr(size - stack_size, PAGE_SIZE_LOG2); if (_base - ds_size < stack_slot_base) - throw Thread_base::Stack_too_large(); + throw Thread::Stack_too_large(); /* allocate and attach backing store for the stack enhancement */ addr_t const ds_addr = _base - ds_size - stack_area_virtual_base(); @@ -63,10 +63,10 @@ void Stack::size(size_t const size) void * const attach_addr = rm->attach_at(ds_cap, ds_addr, ds_size); if (ds_addr != (addr_t)attach_addr) - throw Thread_base::Out_of_stack_space(); + throw Thread::Out_of_stack_space(); } catch (Ram_session::Alloc_failed) { - throw Thread_base::Stack_alloc_failed(); + throw Thread::Stack_alloc_failed(); } /* update stack information */ @@ -75,7 +75,7 @@ void Stack::size(size_t const size) Stack * -Thread_base::_alloc_stack(size_t stack_size, char const *name, bool main_thread) +Thread::_alloc_stack(size_t stack_size, char const *name, bool main_thread) { /* * Synchronize stack list when creating new threads from multiple threads @@ -134,7 +134,7 @@ Thread_base::_alloc_stack(size_t stack_size, char const *name, bool main_thread) } -void Thread_base::_free_stack(Stack *stack) +void Thread::_free_stack(Stack *stack) { addr_t ds_addr = stack->base() - stack_area_virtual_base(); Ram_dataspace_capability ds_cap = stack->ds_cap(); @@ -150,63 +150,66 @@ void Thread_base::_free_stack(Stack *stack) } -void Thread_base::name(char *dst, size_t dst_len) +void Thread::name(char *dst, size_t dst_len) { snprintf(dst, dst_len, "%s", _stack->name().string()); } -void Thread_base::join() { _join_lock.lock(); } +Thread::Name Thread::name() const { return _stack->name(); } -void *Thread_base::alloc_secondary_stack(char const *name, size_t stack_size) +void Thread::join() { _join_lock.lock(); } + + +void *Thread::alloc_secondary_stack(char const *name, size_t stack_size) { Stack *stack = _alloc_stack(stack_size, name, false); return (void *)stack->top(); } -void Thread_base::free_secondary_stack(void* stack_addr) +void Thread::free_secondary_stack(void* stack_addr) { addr_t base = Stack_allocator::addr_to_base(stack_addr); _free_stack(Stack_allocator::base_to_stack(base)); } -Native_thread &Thread_base::native_thread() { +Native_thread &Thread::native_thread() { return _stack->native_thread(); } -void *Thread_base::stack_top() const { return (void *)_stack->top(); } +void *Thread::stack_top() const { return (void *)_stack->top(); } -void *Thread_base::stack_base() const { return (void*)_stack->base(); } +void *Thread::stack_base() const { return (void*)_stack->base(); } -void Thread_base::stack_size(size_t const size) { _stack->size(size); } +void Thread::stack_size(size_t const size) { _stack->size(size); } -size_t Thread_base::stack_virtual_size() +size_t Thread::stack_virtual_size() { return Genode::stack_virtual_size(); } -addr_t Thread_base::stack_area_virtual_base() +addr_t Thread::stack_area_virtual_base() { return Genode::stack_area_virtual_base(); } -size_t Thread_base::stack_area_virtual_size() +size_t Thread::stack_area_virtual_size() { return Genode::stack_area_virtual_size(); } -Thread_base::Thread_base(size_t weight, const char *name, size_t stack_size, - Type type, Cpu_session *cpu_session, Affinity::Location affinity) +Thread::Thread(size_t weight, const char *name, size_t stack_size, + Type type, Cpu_session *cpu_session, Affinity::Location affinity) : _cpu_session(cpu_session), _affinity(affinity), @@ -225,14 +228,25 @@ Thread_base::Thread_base(size_t weight, const char *name, size_t stack_size, } -Thread_base::Thread_base(size_t weight, const char *name, size_t stack_size, - Type type, Affinity::Location affinity) -: Thread_base(weight, name, stack_size, type, nullptr, affinity) { } +Thread::Thread(size_t weight, const char *name, size_t stack_size, + Type type, Affinity::Location affinity) +: Thread(weight, name, stack_size, type, nullptr, affinity) { } -Thread_base::~Thread_base() +Thread::Thread(Env &env, Name const &name, size_t stack_size, Location location, + Weight weight, Cpu_session &cpu) +: Thread(weight.value, name.string(), stack_size, NORMAL, + &cpu == &env.cpu() ? nullptr : &cpu, location) +{ } + + +Thread::Thread(Env &env, Name const &name, size_t stack_size) +: Thread(env, name, stack_size, Location(), Weight(), env.cpu()) { } + + +Thread::~Thread() { - if (Thread_base::myself() == this) { + if (Thread::myself() == this) { PERR("thread '%s' tried to self de-struct - sleeping forever.", _stack->name().string()); sleep_forever(); diff --git a/repos/base/src/lib/base/thread_bootstrap.cc b/repos/base/src/lib/base/thread_bootstrap.cc index c7a8b40954..0824aa76f5 100644 --- a/repos/base/src/lib/base/thread_bootstrap.cc +++ b/repos/base/src/lib/base/thread_bootstrap.cc @@ -15,4 +15,4 @@ using namespace Genode; -void Thread_base::_thread_bootstrap() { } +void Thread::_thread_bootstrap() { } diff --git a/repos/base/src/lib/base/thread_myself.cc b/repos/base/src/lib/base/thread_myself.cc index 6f2b13a304..a727192b9e 100644 --- a/repos/base/src/lib/base/thread_myself.cc +++ b/repos/base/src/lib/base/thread_myself.cc @@ -19,7 +19,7 @@ #include -Genode::Thread_base *Genode::Thread_base::myself() +Genode::Thread *Genode::Thread::myself() { int dummy = 0; /* used for determining the stack pointer */ diff --git a/repos/base/src/lib/base/thread_start.cc b/repos/base/src/lib/base/thread_start.cc index 6e89244f78..824426bd60 100644 --- a/repos/base/src/lib/base/thread_start.cc +++ b/repos/base/src/lib/base/thread_start.cc @@ -26,20 +26,20 @@ using namespace Genode; /** * Entry point entered by new threads */ -void Thread_base::_thread_start() +void Thread::_thread_start() { - Thread_base::myself()->_thread_bootstrap(); - Thread_base::myself()->entry(); - Thread_base::myself()->_join_lock.unlock(); + Thread::myself()->_thread_bootstrap(); + Thread::myself()->entry(); + Thread::myself()->_join_lock.unlock(); Genode::sleep_forever(); } -/***************** - ** Thread base ** - *****************/ +/************ + ** Thread ** + ************/ -void Thread_base::_deinit_platform_thread() +void Thread::_deinit_platform_thread() { if (!_cpu_session) _cpu_session = env()->cpu_session(); @@ -48,19 +48,16 @@ void Thread_base::_deinit_platform_thread() } -void Thread_base::start() +void Thread::start() { - /* if no cpu session is given, use it from the environment */ + /* if no CPU session is given, use it from the environment */ if (!_cpu_session) _cpu_session = env()->cpu_session(); /* create thread at core */ - char buf[48]; - name(buf, sizeof(buf)); - enum { WEIGHT = Cpu_session::DEFAULT_WEIGHT }; addr_t const utcb = (addr_t)&_stack->utcb(); - _thread_cap = _cpu_session->create_thread(env()->pd_session_cap(), - WEIGHT, buf, _affinity, utcb); + _thread_cap = _cpu_session->create_thread(env()->pd_session_cap(), name(), + _affinity, Weight(), utcb); if (!_thread_cap.valid()) throw Cpu_session::Thread_creation_failed(); @@ -69,7 +66,7 @@ void Thread_base::start() } -void Thread_base::cancel_blocking() +void Thread::cancel_blocking() { _cpu_session->cancel_blocking(_thread_cap); } diff --git a/repos/base/src/lib/base/trace.cc b/repos/base/src/lib/base/trace.cc index 25d7b864de..19e9a577a8 100644 --- a/repos/base/src/lib/base/trace.cc +++ b/repos/base/src/lib/base/trace.cc @@ -163,9 +163,9 @@ Trace::Logger::Logger() { } -/***************** - ** Thread_base ** - *****************/ +/************ + ** Thread ** + ************/ /** * return logger instance for the main thread ** @@ -180,12 +180,12 @@ static Trace::Logger *main_trace_logger() static Trace::Control *main_trace_control; -Trace::Logger *Thread_base::_logger() +Trace::Logger *Thread::_logger() { if (inhibit_tracing) return 0; - Thread_base * const myself = Thread_base::myself(); + Thread * const myself = Thread::myself(); Trace::Logger * const logger = myself ? &myself->_trace_logger : main_trace_logger(); diff --git a/repos/base/src/lib/base/utcb.cc b/repos/base/src/lib/base/utcb.cc index 53db690516..cace01c66c 100644 --- a/repos/base/src/lib/base/utcb.cc +++ b/repos/base/src/lib/base/utcb.cc @@ -19,4 +19,4 @@ #include -Genode::Native_utcb *Genode::Thread_base::utcb() { return &_stack->utcb(); } +Genode::Native_utcb *Genode::Thread::utcb() { return &_stack->utcb(); } diff --git a/repos/base/src/lib/cxx/misc.cc b/repos/base/src/lib/cxx/misc.cc index c875f6e44a..daec9109f1 100644 --- a/repos/base/src/lib/cxx/misc.cc +++ b/repos/base/src/lib/cxx/misc.cc @@ -12,7 +12,7 @@ */ #include -#include +#include #include #include #include @@ -23,14 +23,14 @@ using namespace Genode; extern "C" void __cxa_pure_virtual() { - PWRN("cxa pure virtual function called, return addr is %p", - __builtin_return_address(0)); + Genode::warning("cxa pure virtual function called, return addr is ", + __builtin_return_address(0)); } extern "C" void __pure_virtual() { - PWRN("pure virtual function called"); + Genode::warning("pure virtual function called"); } @@ -103,15 +103,16 @@ extern "C" __attribute__((weak)) void raise() extern "C" void *abort(void) { - Genode::Thread_base * myself = Genode::Thread_base::myself(); - char thread_name[64] = { "unknown" }; + Genode::Thread const * const myself = Genode::Thread::myself(); + Thread::Name name = "unknown"; if (myself) - myself->name(thread_name, sizeof(thread_name)); - PWRN("abort called - thread: '%s'", thread_name); + name = myself->name(); + + Genode::warning("abort called - thread: ", name.string()); /* Notify the parent of failure */ - if (!strcmp("main", thread_name, sizeof(thread_name))) + if (name != "main") env()->parent()->exit(1); sleep_forever(); @@ -125,7 +126,7 @@ extern "C" void *fputc(void) { extern "C" void *fputs(const char *s, void *) { - PWRN("C++ runtime: %s", s); + Genode::warning("C++ runtime: ", s); return 0; } @@ -166,7 +167,7 @@ void *memset(void *s, int c, size_t n) extern "C" void *stderr(void) { - PWRN("stderr - not yet implemented"); + Genode::warning("stderr - not yet implemented"); return 0; } @@ -180,7 +181,7 @@ FILE *__stderrp; extern "C" void *strcat(void) { - PWRN("strcat - not yet implemented"); + Genode::warning("strcat - not yet implemented"); return 0; } @@ -214,7 +215,7 @@ extern "C" int strcmp(const char *s1, const char *s2) */ extern "C" int sprintf(char *str, const char *format, ...) { - PWRN("sprintf - not implemented"); + Genode::warning("sprintf - not implemented"); return 0; } @@ -225,5 +226,5 @@ extern "C" int sprintf(char *str, const char *format, ...) extern "C" __attribute__((weak)) void __stack_chk_fail_local(void) { - PERR("Violated stack boundary"); + Genode::error("Violated stack boundary"); } diff --git a/repos/base/src/lib/ldso/main.cc b/repos/base/src/lib/ldso/main.cc index 30d1003c18..aca79df4bb 100644 --- a/repos/base/src/lib/ldso/main.cc +++ b/repos/base/src/lib/ldso/main.cc @@ -567,9 +567,9 @@ void Component::construct(Genode::Env &env) try { if (Genode::config()->xml_node().attribute("ld_verbose").has_value("yes")) { PINF(" %lx .. %lx: stack area", - Genode::Thread_base::stack_area_virtual_base(), - Genode::Thread_base::stack_area_virtual_base() + - Genode::Thread_base::stack_area_virtual_size() - 1); + Genode::Thread::stack_area_virtual_base(), + Genode::Thread::stack_area_virtual_base() + + Genode::Thread::stack_area_virtual_size() - 1); dump_link_map(Elf_object::obj_list()->head()); } } catch (...) { } diff --git a/repos/base/src/lib/startup/init_main_thread.cc b/repos/base/src/lib/startup/init_main_thread.cc index 5cccb31598..afe99a9c11 100644 --- a/repos/base/src/lib/startup/init_main_thread.cc +++ b/repos/base/src/lib/startup/init_main_thread.cc @@ -44,7 +44,7 @@ void init_rtld() { } /** * The first thread in a program */ -class Main_thread : public Thread +class Main_thread : public Thread_deprecated { public: @@ -55,7 +55,7 @@ class Main_thread : public Thread */ Main_thread(bool reinit) : - Thread("main", reinit ? REINITIALIZED_MAIN : MAIN) + Thread_deprecated("main", reinit ? REINITIALIZED_MAIN : MAIN) { } /********************** diff --git a/repos/base/src/test/affinity/main.cc b/repos/base/src/test/affinity/main.cc index aceb9843e3..dadd7a9f1f 100644 --- a/repos/base/src/test/affinity/main.cc +++ b/repos/base/src/test/affinity/main.cc @@ -20,7 +20,7 @@ enum { STACK_SIZE = sizeof(long)*1024, COUNT_VALUE = 10 * 1024 * 1024 }; -struct Spinning_thread : Genode::Thread +struct Spinning_thread : Genode::Thread_deprecated { Genode::Affinity::Location const _location; @@ -50,10 +50,10 @@ struct Spinning_thread : Genode::Thread Spinning_thread(Genode::Affinity::Location location, char const *name) : - Genode::Thread(name), _location(location), cnt(0ULL), + Genode::Thread_deprecated(name), _location(location), cnt(0ULL), barrier(Genode::Lock::LOCKED) { - Genode::env()->cpu_session()->affinity(Thread_base::cap(), location); + Genode::env()->cpu_session()->affinity(Thread::cap(), location); start(); } }; diff --git a/repos/base/src/test/fpu/main.cc b/repos/base/src/test/fpu/main.cc index 528b9e500b..37ee424b9f 100644 --- a/repos/base/src/test/fpu/main.cc +++ b/repos/base/src/test/fpu/main.cc @@ -39,7 +39,7 @@ class Sync_signal_transmitter : public Signal_transmitter } }; -class Fpu_user : public Thread<4 * 1024> +class Fpu_user : public Thread_deprecated<4 * 1024> { private: @@ -56,7 +56,7 @@ class Fpu_user : public Thread<4 * 1024> public: - Fpu_user() : Thread("fpu_user"), _x(0), _st(0) { } + Fpu_user() : Thread_deprecated("fpu_user"), _x(0), _st(0) { } void start(float const x, Sync_signal_transmitter * const st) { diff --git a/repos/base/src/test/rm_nested/main.cc b/repos/base/src/test/rm_nested/main.cc index dff4b6a450..4848f70df3 100644 --- a/repos/base/src/test/rm_nested/main.cc +++ b/repos/base/src/test/rm_nested/main.cc @@ -39,7 +39,7 @@ enum { /** * Region-manager fault handler resolves faults by attaching new dataspaces */ -class Local_fault_handler : public Thread<4096> +class Local_fault_handler : public Thread_deprecated<4096> { private: @@ -50,7 +50,7 @@ class Local_fault_handler : public Thread<4096> Local_fault_handler(Region_map ®ion_map, Signal_receiver &receiver) : - Thread("local_fault_handler"), + Thread_deprecated("local_fault_handler"), _region_map(region_map), _receiver(receiver) { } diff --git a/repos/base/src/test/thread/main.cc b/repos/base/src/test/thread/main.cc index 1a4ba07560..98ab8e4489 100644 --- a/repos/base/src/test/thread/main.cc +++ b/repos/base/src/test/thread/main.cc @@ -14,8 +14,12 @@ /* Genode includes */ #include +#include #include -#include +#include +#include +#include +#include #include @@ -27,27 +31,34 @@ using namespace Genode; *********************************/ template -struct Helper : Thread<0x2000> +struct Helper : Thread { void *child[CHILDREN]; - Helper() : Thread<0x2000>("helper") { } + enum { STACK_SIZE = 0x2000 }; + + Env &_env; + + Helper(Env &env) : Thread(env, "helper", STACK_SIZE), _env(env) { } void *stack() const { return _stack; } void entry() { - Helper helper[CHILDREN]; + Lazy_volatile_object helper[CHILDREN]; for (unsigned i = 0; i < CHILDREN; ++i) - child[i] = helper[i].stack(); + helper[i].construct(_env); + + for (unsigned i = 0; i < CHILDREN; ++i) + child[i] = helper[i]->stack(); } }; -static void test_stack_alloc() +static void test_stack_alloc(Env &env) { - printf("running '%s'\n", __func__); + log("running '", __func__, "'"); /* * Create HELPER threads, which concurrently create CHILDREN threads each. @@ -55,15 +66,16 @@ static void test_stack_alloc() */ enum { HELPER = 10, CHILDREN = 9 }; - Helper helper[HELPER]; + Lazy_volatile_object > helper[HELPER]; - for (unsigned i = 0; i < HELPER; ++i) helper[i].start(); - for (unsigned i = 0; i < HELPER; ++i) helper[i].join(); + for (unsigned i = 0; i < HELPER; ++i) helper[i].construct(env); + for (unsigned i = 0; i < HELPER; ++i) helper[i]->start(); + for (unsigned i = 0; i < HELPER; ++i) helper[i]->join(); if (0) for (unsigned i = 0; i < HELPER; ++i) for (unsigned j = 0; j < CHILDREN; ++j) - printf("%p [%d.%d]\n", helper[i].child[j], i, j); + log(helper[i]->child[j], " [", i, ".", j, "]"); } @@ -92,13 +104,15 @@ static void test_stack_alignment_varargs(char const *format, ...) static void log_stack_address(char const *who) { long dummy; - printf("%s stack @ %p\n", who, &dummy); + log(who, " stack @ ", &dummy); } -struct Stack_helper : Thread<0x2000> +struct Stack_helper : Thread { - Stack_helper() : Thread<0x2000>("stack_helper") { } + enum { STACK_SIZE = 0x2000 }; + + Stack_helper(Env &env) : Thread(env, "stack_helper", STACK_SIZE) { } void entry() { @@ -108,11 +122,11 @@ struct Stack_helper : Thread<0x2000> }; -static void test_stack_alignment() +static void test_stack_alignment(Env &env) { - printf("running '%s'\n", __func__); + log("running '", __func__, "'"); - Stack_helper helper; + Stack_helper helper(env); helper.start(); helper.join(); @@ -128,16 +142,16 @@ static void test_stack_alignment() static void test_main_thread() { - printf("running '%s'\n", __func__); + log("running '", __func__, "'"); /* check wether my thread object exists */ - Thread_base * myself = Genode::Thread_base::myself(); + Thread * myself = Thread::myself(); if (!myself) { throw -1; } - printf("thread base %p\n", myself); + log("thread base ", myself); /* check whether my stack is inside the first stack region */ - addr_t const stack_slot_base = Thread_base::stack_area_virtual_base(); - addr_t const stack_slot_size = Thread_base::stack_area_virtual_size(); + addr_t const stack_slot_base = Thread::stack_area_virtual_base(); + addr_t const stack_slot_size = Thread::stack_area_virtual_size(); addr_t const stack_slot_top = stack_slot_base + stack_slot_size; addr_t const stack_top = (addr_t)myself->stack_top(); @@ -148,15 +162,15 @@ static void test_main_thread() if (stack_base >= stack_slot_top) { throw -4; } if (stack_base < stack_slot_base) { throw -5; } - printf("thread stack top %p\n", myself->stack_top()); - printf("thread stack bottom %p\n", myself->stack_base()); + log("thread stack top ", myself->stack_top()); + log("thread stack bottom ", myself->stack_base()); /* check wether my stack pointer is inside my stack */ unsigned dummy = 0; addr_t const sp = (addr_t)&dummy; if (sp >= stack_top) { throw -6; } if (sp < stack_base) { throw -7; } - printf("thread stack pointer %p\n", (void *)sp); + log("thread stack pointer ", (void *)sp); } @@ -164,56 +178,63 @@ static void test_main_thread() ** Using cpu-session for thread creation * ******************************************/ -struct Cpu_helper : Thread<0x2000> +struct Cpu_helper : Thread { - Cpu_helper(const char * name, Cpu_session * cpu) - : Thread<0x2000>(name, cpu) { } + enum { STACK_SIZE = 0x2000 }; + + Env &_env; + + Cpu_helper(Env &env, const char * name, Cpu_session &cpu) + : + Thread(env, name, STACK_SIZE, Thread::Location(), Thread::Weight(), cpu), + _env(env) + { } void entry() { - char name[64]; - Thread_base::name(name, sizeof(name)); - printf("%s : _cpu_session=0x%p env()->cpu_session()=0x%p\n", - name, _cpu_session, env()->cpu_session()); + log(Thread::name().string(), " : _cpu_session=", _cpu_session, + " env.cpu()=", &_env.cpu()); } }; -static void test_cpu_session() +static void test_cpu_session(Env &env) { - printf("running '%s'\n", __func__); + log("running '", __func__, "'"); - Cpu_helper thread0("prio high ", env()->cpu_session()); + Cpu_helper thread0(env, "prio high ", env.cpu()); thread0.start(); thread0.join(); Cpu_connection con1("prio middle", Cpu_session::PRIORITY_LIMIT / 4); - Cpu_helper thread1("prio middle", &con1); + Cpu_helper thread1(env, "prio middle", con1); thread1.start(); thread1.join(); Cpu_connection con2("prio low", Cpu_session::PRIORITY_LIMIT / 2); - Cpu_helper thread2("prio low ", &con2); + Cpu_helper thread2(env, "prio low ", con2); thread2.start(); thread2.join(); } -struct Pause_helper : Thread<0x1000> +struct Pause_helper : Thread { volatile unsigned loop = 0; volatile bool beep = false; - Pause_helper(const char * name, Cpu_session * cpu) - : Thread<0x1000>(name, cpu) { } + enum { STACK_SIZE = 0x1000 }; + + Pause_helper(Env &env, const char * name, Cpu_session &cpu) + : Thread(env, name, STACK_SIZE, Thread::Location(), Thread::Weight(), cpu) { } void entry() { while (1) { - /** - * Don't use printf here, since this thread becomes "paused". - * If it is holding the lock of the printf backend being paused, - * all other threads of this task trying to do printf will + /* + * Don't log here, since this thread becomes "paused". + * If it is holding the lock of the log backend being paused, all + * other threads of this task trying to print log messages will * block - looks like a deadlock. */ // printf("stop me if you can\n"); @@ -228,25 +249,26 @@ struct Pause_helper : Thread<0x1000> } }; -static void test_pause_resume() -{ - printf("running '%s'\n", __func__); - Pause_helper thread("pause", env()->cpu_session()); +static void test_pause_resume(Env &env) +{ + log("running '", __func__, "'"); + + Pause_helper thread(env, "pause", env.cpu()); thread.start(); while (thread.loop < 1) { } Thread_state state; - printf("--- pausing ---\n"); - env()->cpu_session()->pause(thread.cap()); + log("--- pausing ---"); + env.cpu().pause(thread.cap()); unsigned loop_paused = thread.loop; - printf("--- paused ---\n"); + log("--- paused ---"); - printf("--- reading thread state ---\n"); + log("--- reading thread state ---"); try { - state = env()->cpu_session()->state(thread.cap()); + state = env.cpu().state(thread.cap()); } catch (Cpu_session::State_access_failed) { throw -10; } @@ -254,47 +276,50 @@ static void test_pause_resume() throw -11; thread.beep = true; - printf("--- resuming thread ---\n"); - env()->cpu_session()->resume(thread.cap()); + log("--- resuming thread ---"); + env.cpu().resume(thread.cap()); while (thread.loop == loop_paused) { } - printf("--- thread resumed ---\n"); + log("--- thread resumed ---"); thread.join(); } + /* * Test to check that core as the used kernel behaves well if up to the * supported Genode maximum threads are created. */ -static void test_create_as_many_threads() +static void test_create_as_many_threads(Env &env) { - printf("running '%s'\n", __func__); + log("running '", __func__, "'"); - addr_t const max = Thread_base::stack_area_virtual_size() / - Thread_base::stack_virtual_size(); + addr_t const max = Thread::stack_area_virtual_size() / + Thread::stack_virtual_size(); Cpu_helper * threads[max]; static char thread_name[8]; + Heap heap(env.ram(), env.rm()); + unsigned i = 0; try { for (; i < max; i++) { try { snprintf(thread_name, sizeof(thread_name), "%u", i + 1); - threads[i] = new (env()->heap()) Cpu_helper(thread_name, env()->cpu_session()); + threads[i] = new (heap) Cpu_helper(env, thread_name, env.cpu()); threads[i]->start(); threads[i]->join(); } catch (Cpu_session::Thread_creation_failed) { throw "Thread_creation_failed"; - } catch (Thread_base::Out_of_stack_space) { + } catch (Thread::Out_of_stack_space) { throw "Out_of_stack_space"; } } } catch (const char * ex) { PINF("created %u threads before I got '%s'", i, ex); for (unsigned j = i; j > 0; j--) { - destroy(env()->heap(), threads[j - 1]); + destroy(heap, threads[j - 1]); threads[j - 1] = nullptr; } return; @@ -307,18 +332,33 @@ static void test_create_as_many_threads() throw -21; } -int main() + +char const *Component::name() { return "test-thread"; } + + +size_t Component::stack_size() { return 16*1024*sizeof(long); } + + +void Component::construct(Env &env) { - printf("--- thread test started ---\n"); + log("--- thread test started ---"); + + Xml_node config = Genode::config()->xml_node(); try { - test_stack_alloc(); - test_stack_alignment(); + test_stack_alloc(env); + test_stack_alignment(env); test_main_thread(); - test_cpu_session(); - test_pause_resume(); - test_create_as_many_threads(); + test_cpu_session(env); + + if (config.has_sub_node("pause_resume")) + test_pause_resume(env); + + test_create_as_many_threads(env); } catch (int error) { - return error; + Genode::error("error ", error); + throw; } + + log("--- test completed successfully ---"); } diff --git a/repos/base/src/test/thread/target.mk b/repos/base/src/test/thread/target.mk index bf2a0e7884..f369116beb 100644 --- a/repos/base/src/test/thread/target.mk +++ b/repos/base/src/test/thread/target.mk @@ -1,3 +1,3 @@ TARGET = test-thread SRC_CC = main.cc -LIBS = base +LIBS = base config diff --git a/repos/base/src/test/weak_ptr/main.cc b/repos/base/src/test/weak_ptr/main.cc index ba387e4273..a913df80f9 100644 --- a/repos/base/src/test/weak_ptr/main.cc +++ b/repos/base/src/test/weak_ptr/main.cc @@ -143,7 +143,7 @@ static void test_weak_pointer_tracking() *******************************************/ template -struct Destruct_thread : Genode::Thread<4096> +struct Destruct_thread : Genode::Thread_deprecated<4096> { O *obj; @@ -155,7 +155,7 @@ struct Destruct_thread : Genode::Thread<4096> PLOG("thread: destruction completed, job done"); } - Destruct_thread(O *obj) : Thread("object_destructor"), obj(obj) { } + Destruct_thread(O *obj) : Thread_deprecated("object_destructor"), obj(obj) { } }; diff --git a/repos/dde_bsd/src/lib/audio/scheduler.cc b/repos/dde_bsd/src/lib/audio/scheduler.cc index 00c157bfd9..a8f19bac70 100644 --- a/repos/dde_bsd/src/lib/audio/scheduler.cc +++ b/repos/dde_bsd/src/lib/audio/scheduler.cc @@ -60,7 +60,7 @@ bool Bsd::Task::run() if (_state == STATE_INIT) { /* setup execution environment and call task's function */ _state = STATE_RUNNING; - Genode::Thread_base *th = Genode::Thread_base::myself(); + Genode::Thread *th = Genode::Thread::myself(); _stack = th->alloc_secondary_stack(_name, _stack_size); @@ -107,7 +107,7 @@ Bsd::Task::Task(void (*func)(void*), void *arg, char const *name, Bsd::Task::~Task() { if (_stack) - Genode::Thread_base::myself()->free_secondary_stack(_stack); + Genode::Thread::myself()->free_secondary_stack(_stack); } @@ -191,7 +191,7 @@ void Bsd::Scheduler::schedule() #include namespace { - struct Logger : Genode::Thread<0x4000> + struct Logger : Genode::Thread_deprecated<0x4000> { Timer::Connection _timer; Bsd::Scheduler &_scheduler; @@ -199,7 +199,7 @@ namespace { Logger(Bsd::Scheduler &scheduler, unsigned interval_seconds) : - Genode::Thread<0x4000>("logger"), + Genode::Thread_deprecated<0x4000>("logger"), _scheduler(scheduler), _interval(interval_seconds) { start(); diff --git a/repos/dde_linux/src/drivers/wifi/wpa.h b/repos/dde_linux/src/drivers/wifi/wpa.h index c8ac211ea1..d74dfceb00 100644 --- a/repos/dde_linux/src/drivers/wifi/wpa.h +++ b/repos/dde_linux/src/drivers/wifi/wpa.h @@ -21,7 +21,7 @@ extern "C" int wpa_main(void); extern "C" void wpa_conf_reload(void); -class Wpa_thread : public Genode::Thread<8 * 1024 * sizeof(long)> +class Wpa_thread : public Genode::Thread_deprecated<8 * 1024 * sizeof(long)> { private: @@ -31,7 +31,7 @@ class Wpa_thread : public Genode::Thread<8 * 1024 * sizeof(long)> public: Wpa_thread(Genode::Lock &lock) - : Thread("wpa_supplicant"), _lock(lock), _exit(-1) { } + : Thread_deprecated("wpa_supplicant"), _lock(lock), _exit(-1) { } void entry() { diff --git a/repos/dde_linux/src/include/lx_emul/impl/internal/scheduler.h b/repos/dde_linux/src/include/lx_emul/impl/internal/scheduler.h index efd2acb0e1..6f2a9c4fc8 100644 --- a/repos/dde_linux/src/include/lx_emul/impl/internal/scheduler.h +++ b/repos/dde_linux/src/include/lx_emul/impl/internal/scheduler.h @@ -83,7 +83,7 @@ class Lx::Scheduler return _ansi_esc_black(); } - struct Logger : Genode::Thread<0x4000> + struct Logger : Genode::Thread_deprecated<0x4000> { Timer::Connection _timer; Lx::Scheduler &_scheduler; @@ -91,7 +91,7 @@ class Lx::Scheduler Logger(Lx::Scheduler &scheduler, unsigned interval_seconds) : - Genode::Thread<0x4000>("logger"), + Genode::Thread_deprecated<0x4000>("logger"), _scheduler(scheduler), _interval(interval_seconds) { start(); @@ -223,7 +223,7 @@ Lx::Task::Task(void (*func)(void*), void *arg, char const *name, void Lx::Task::_deinit() { if (_stack) - Genode::Thread_base::myself()->free_secondary_stack(_stack); + Genode::Thread::myself()->free_secondary_stack(_stack); } diff --git a/repos/dde_linux/src/include/lx_emul/impl/internal/task.h b/repos/dde_linux/src/include/lx_emul/impl/internal/task.h index 242e23f9e9..4a2df7608f 100644 --- a/repos/dde_linux/src/include/lx_emul/impl/internal/task.h +++ b/repos/dde_linux/src/include/lx_emul/impl/internal/task.h @@ -203,7 +203,7 @@ class Lx::Task : public Lx::List::Element if (_state == STATE_INIT) { /* setup execution environment and call task's function */ _state = STATE_RUNNING; - Genode::Thread_base *th = Genode::Thread_base::myself(); + Genode::Thread *th = Genode::Thread::myself(); enum { STACK_SIZE = 32 * 1024 }; /* FIXME make stack size configurable */ _stack = th->alloc_secondary_stack(_name, STACK_SIZE); diff --git a/repos/dde_linux/src/lib/lxip/lxcc_emul.cc b/repos/dde_linux/src/lib/lxip/lxcc_emul.cc index f7257a813e..31d29843f9 100644 --- a/repos/dde_linux/src/lib/lxip/lxcc_emul.cc +++ b/repos/dde_linux/src/lib/lxip/lxcc_emul.cc @@ -708,7 +708,7 @@ static void create_event(char const *fmt, va_list list) Trace::Timestamp now = Trace::timestamp(); Genode::snprintf(event, sizeof(event), "delta = %llu ms %s", (now - last) / 2260000, buf); - Thread_base::trace(event); + Thread::trace(event); last = now; } diff --git a/repos/dde_linux/src/lib/lxip/socket_handler.cc b/repos/dde_linux/src/lib/lxip/socket_handler.cc index 3e85b1e8a0..59d7c76fe5 100644 --- a/repos/dde_linux/src/lib/lxip/socket_handler.cc +++ b/repos/dde_linux/src/lib/lxip/socket_handler.cc @@ -112,7 +112,7 @@ namespace Net class Net::Socketcall : public Genode::Signal_dispatcher_base, public Genode::Signal_context_capability, public Lxip::Socketcall, - public Genode::Thread<64 * 1024 * sizeof(Genode::addr_t)> + public Genode::Thread_deprecated<64 * 1024 * sizeof(Genode::addr_t)> { private: @@ -384,7 +384,7 @@ class Net::Socketcall : public Genode::Signal_dispatcher_base, public: Socketcall() - : Thread("socketcall"), + : Thread_deprecated("socketcall"), _signal(Genode::Signal_context_capability(Env::receiver()->manage(this))) { start(); diff --git a/repos/dde_linux/src/lib/usb/include/routine.h b/repos/dde_linux/src/lib/usb/include/routine.h index 8adc4d9d2a..6df4335eb1 100644 --- a/repos/dde_linux/src/lib/usb/include/routine.h +++ b/repos/dde_linux/src/lib/usb/include/routine.h @@ -62,7 +62,7 @@ class Routine : public Genode::List::Element /* will never return */ if (!_started) { _started = true; - Genode::Thread_base *th = Genode::Thread_base::myself(); + Genode::Thread *th = Genode::Thread::myself(); _stack = (char *) th->alloc_secondary_stack(_name, STACK_SIZE); if (verbose) @@ -121,7 +121,7 @@ class Routine : public Genode::List::Element ~Routine() { if (_stack) - Genode::Thread_base::myself()->free_secondary_stack(_stack); + Genode::Thread::myself()->free_secondary_stack(_stack); } /** diff --git a/repos/dde_linux/src/lib/wifi/scheduler.cc b/repos/dde_linux/src/lib/wifi/scheduler.cc index 1cdce9e31f..bdda10e6f3 100644 --- a/repos/dde_linux/src/lib/wifi/scheduler.cc +++ b/repos/dde_linux/src/lib/wifi/scheduler.cc @@ -62,7 +62,7 @@ bool Lx::Task::run() if (_state == STATE_INIT) { /* setup execution environment and call task's function */ _state = STATE_RUNNING; - Genode::Thread_base *th = Genode::Thread_base::myself(); + Genode::Thread *th = Genode::Thread::myself(); enum { STACK_SIZE = 32 * 1024 }; /* FIXME make stack size configurable */ _stack = th->alloc_secondary_stack(_name, STACK_SIZE); @@ -111,7 +111,7 @@ Lx::Task::~Task() { // scheduler.remove(this); if (_stack) - Genode::Thread_base::myself()->free_secondary_stack(_stack); + Genode::Thread::myself()->free_secondary_stack(_stack); } @@ -195,7 +195,7 @@ void Lx::Scheduler::schedule() #include namespace { - struct Logger : Genode::Thread<0x4000> + struct Logger : Genode::Thread_deprecated<0x4000> { Timer::Connection _timer; Lx::Scheduler &_scheduler; @@ -203,7 +203,7 @@ namespace { Logger(Lx::Scheduler &scheduler, unsigned interval_seconds) : - Genode::Thread<0x4000>("logger"), + Genode::Thread_deprecated<0x4000>("logger"), _scheduler(scheduler), _interval(interval_seconds) { start(); diff --git a/repos/dde_rump/include/util/hard_context.h b/repos/dde_rump/include/util/hard_context.h index e31f2c472d..be8e75d578 100644 --- a/repos/dde_rump/include/util/hard_context.h +++ b/repos/dde_rump/include/util/hard_context.h @@ -54,7 +54,7 @@ class Hard_context class Hard_context_thread : public Hard_context, - public Genode::Thread + public Genode::Thread_deprecated { private: @@ -72,7 +72,7 @@ class Hard_context_thread : public Hard_context, public: Hard_context_thread(char const *name, func f, void *arg, int cookie, bool run = true) - : Hard_context(cookie), Thread(name), + : Hard_context(cookie), Thread_deprecated(name), _func(f), _arg(arg) { if (run) start(); } }; diff --git a/repos/dde_rump/src/lib/rump/hypercall.cc b/repos/dde_rump/src/lib/rump/hypercall.cc index ee0420f781..c890304fdf 100644 --- a/repos/dde_rump/src/lib/rump/hypercall.cc +++ b/repos/dde_rump/src/lib/rump/hypercall.cc @@ -69,7 +69,7 @@ static Hard_context * main_thread() static Hard_context *myself() { - Hard_context *h = dynamic_cast(Genode::Thread_base::myself()); + Hard_context *h = dynamic_cast(Genode::Thread::myself()); return h ? h : main_thread(); } diff --git a/repos/dde_rump/src/server/rump_fs/file_system.cc b/repos/dde_rump/src/server/rump_fs/file_system.cc index 4cc234c2ea..2d0606dad4 100644 --- a/repos/dde_rump/src/server/rump_fs/file_system.cc +++ b/repos/dde_rump/src/server/rump_fs/file_system.cc @@ -88,7 +88,7 @@ static bool check_read_only() } -class File_system::Sync : public Genode::Thread<1024 * sizeof(Genode::addr_t)> +class File_system::Sync : public Genode::Thread_deprecated<1024 * sizeof(Genode::addr_t)> { private: @@ -118,7 +118,7 @@ class File_system::Sync : public Genode::Thread<1024 * sizeof(Genode::addr_t)> Sync(Server::Entrypoint &ep) : - Thread("rump_fs_sync"), + Thread_deprecated("rump_fs_sync"), _sync_dispatcher(ep, *this, &Sync::_process_sync) { start(); diff --git a/repos/demo/include/scout/platform.h b/repos/demo/include/scout/platform.h index 45c21ca7f2..a9d5793f7f 100644 --- a/repos/demo/include/scout/platform.h +++ b/repos/demo/include/scout/platform.h @@ -106,7 +106,7 @@ class Scout::Platform ** Timer thread ** ******************/ - class Timer_thread : public Genode::Thread<4096> + class Timer_thread : public Genode::Thread_deprecated<4096> { private: @@ -152,7 +152,7 @@ class Scout::Platform * Start thread immediately on construction. */ Timer_thread(Input::Session &input, Event_queue &event_queue) - : Thread("timer"), _input(input), _event_queue(event_queue) + : Thread_deprecated("timer"), _input(input), _event_queue(event_queue) { start(); } void entry() diff --git a/repos/demo/src/lib/launchpad/launchpad.cc b/repos/demo/src/lib/launchpad/launchpad.cc index d39f1450f1..318a7e9ebf 100644 --- a/repos/demo/src/lib/launchpad/launchpad.cc +++ b/repos/demo/src/lib/launchpad/launchpad.cc @@ -295,7 +295,7 @@ Launchpad_child *Launchpad::start_child(const char *filename, * this case using a watchdog mechanism, unblock the 'close' call, and * proceed with the closing the other remaining sessions. */ -class Child_destructor_thread : Thread<2*4096> +class Child_destructor_thread : Thread_deprecated<2*4096> { private: @@ -343,7 +343,7 @@ class Child_destructor_thread : Thread<2*4096> * Constructor */ Child_destructor_thread() : - Thread("child_destructor"), + Thread_deprecated("child_destructor"), _curr_child(0), _curr_alloc(0), _activate_lock(Lock::LOCKED), _ready(true) diff --git a/repos/gems/src/app/mixer_gui_qt/main.cpp b/repos/gems/src/app/mixer_gui_qt/main.cpp index fe67b57f26..863c675b94 100644 --- a/repos/gems/src/app/mixer_gui_qt/main.cpp +++ b/repos/gems/src/app/mixer_gui_qt/main.cpp @@ -21,7 +21,7 @@ enum { THREAD_STACK_SIZE = 2 * 1024 * sizeof(long) }; -struct Report_thread : Genode::Thread +struct Report_thread : Genode::Thread_deprecated { QMember proxy; @@ -51,7 +51,7 @@ struct Report_thread : Genode::Thread Report_thread() : - Genode::Thread("report_thread"), + Genode::Thread_deprecated("report_thread"), channels_dispatcher(sig_rec, *this, &Report_thread::_handle_channels) { channels_rom.sigh(channels_dispatcher); diff --git a/repos/libports/include/qt5/genode/thread_qt.h b/repos/libports/include/qt5/genode/thread_qt.h index 82cdff0310..dee554942a 100644 --- a/repos/libports/include/qt5/genode/thread_qt.h +++ b/repos/libports/include/qt5/genode/thread_qt.h @@ -20,12 +20,12 @@ enum { DEFAULT_STACK_SIZE = 4096*100 }; namespace Genode { - class Thread_qt : public Thread + class Thread_qt : public Thread_deprecated { public: explicit Thread_qt(const char *name = "Qt ") - : Thread(name) { } + : Thread_deprecated(name) { } }; } diff --git a/repos/libports/ports/qt5.hash b/repos/libports/ports/qt5.hash index 228779fba5..9173a6306d 100644 --- a/repos/libports/ports/qt5.hash +++ b/repos/libports/ports/qt5.hash @@ -1 +1 @@ -572aad892107d4e90dd4659c09cb075a25b0d613 +9ad059d85f8ad1282da3e939b5f187173b580ab2 diff --git a/repos/libports/src/lib/libc/task.cc b/repos/libports/src/lib/libc/task.cc index 01a75fb443..7057092aa4 100644 --- a/repos/libports/src/lib/libc/task.cc +++ b/repos/libports/src/lib/libc/task.cc @@ -73,8 +73,8 @@ class Libc::Task : public Genode::Rpc_object jmp_buf _app_task; void *_app_stack = { - Genode::Thread_base::myself()->alloc_secondary_stack(Component::name(), - Component::stack_size()) }; + Genode::Thread::myself()->alloc_secondary_stack(Component::name(), + Component::stack_size()) }; /** * Libc context diff --git a/repos/libports/src/lib/libc_terminal/plugin.cc b/repos/libports/src/lib/libc_terminal/plugin.cc index f913082708..be5af6e5eb 100644 --- a/repos/libports/src/lib/libc_terminal/plugin.cc +++ b/repos/libports/src/lib/libc_terminal/plugin.cc @@ -34,7 +34,7 @@ extern void (*libc_select_notify)(); namespace { - typedef Genode::Thread<4096> Read_sigh_thread; + typedef Genode::Thread_deprecated<4096> Read_sigh_thread; /** diff --git a/repos/libports/src/lib/lwip/include/thread.h b/repos/libports/src/lib/lwip/include/thread.h index 92f42e8bca..e05b9907da 100644 --- a/repos/libports/src/lib/lwip/include/thread.h +++ b/repos/libports/src/lib/lwip/include/thread.h @@ -22,7 +22,7 @@ extern "C" { namespace Lwip { - class Lwip_thread : public Genode::Thread<16384> + class Lwip_thread : public Genode::Thread_deprecated<16384> { private: @@ -34,7 +34,7 @@ namespace Lwip { Lwip_thread(const char *name, void (* thread)(void *arg), void *arg) - : Genode::Thread<16384>(name), _thread(thread), _arg(arg) { } + : Genode::Thread_deprecated<16384>(name), _thread(thread), _arg(arg) { } void entry() { _thread(_arg); } }; diff --git a/repos/libports/src/lib/lwip/include/timer.h b/repos/libports/src/lib/lwip/include/timer.h index c77b01ee0f..6cc62f6d30 100644 --- a/repos/libports/src/lib/lwip/include/timer.h +++ b/repos/libports/src/lib/lwip/include/timer.h @@ -22,7 +22,7 @@ namespace Lwip { - class Scheduler : public Genode::Thread<4096>, + class Scheduler : public Genode::Thread_deprecated<4096>, public Genode::Alarm_scheduler { private: @@ -43,7 +43,7 @@ namespace Lwip { public: - Scheduler() : Thread("lwip_timeout_sched"), _curr_time(0) { } + Scheduler() : Thread_deprecated("lwip_timeout_sched"), _curr_time(0) { } Genode::Alarm::Time curr_time() { return _curr_time; } }; diff --git a/repos/libports/src/lib/lwip/platform/nic.cc b/repos/libports/src/lib/lwip/platform/nic.cc index be0c8c1580..1a0219c716 100644 --- a/repos/libports/src/lib/lwip/platform/nic.cc +++ b/repos/libports/src/lib/lwip/platform/nic.cc @@ -43,7 +43,7 @@ extern "C" { /* * Thread, that receives packets by the nic-session interface. */ -class Nic_receiver_thread : public Genode::Thread<8192> +class Nic_receiver_thread : public Genode::Thread_deprecated<8192> { private: @@ -89,7 +89,7 @@ class Nic_receiver_thread : public Genode::Thread<8192> Nic_receiver_thread(Nic::Connection *nic, struct netif *netif) : - Genode::Thread<8192>("nic-recv"), _nic(nic), _netif(netif), + Genode::Thread_deprecated<8192>("nic-recv"), _nic(nic), _netif(netif), _link_state_dispatcher(_sig_rec, *this, &Nic_receiver_thread::_handle_link_state), _rx_packet_avail_dispatcher(_sig_rec, *this, &Nic_receiver_thread::_handle_rx_packet_avail), _rx_ready_to_ack_dispatcher(_sig_rec, *this, &Nic_receiver_thread::_handle_rx_read_to_ack) diff --git a/repos/libports/src/lib/lwip/platform/sys_arch.cc b/repos/libports/src/lib/lwip/platform/sys_arch.cc index cb22f7d0fa..784188919c 100644 --- a/repos/libports/src/lib/lwip/platform/sys_arch.cc +++ b/repos/libports/src/lib/lwip/platform/sys_arch.cc @@ -31,11 +31,11 @@ namespace Lwip { class Mutex { public: - Genode::Lock lock; - int counter; - Genode::Thread_base *thread; + Genode::Lock lock; + int counter; + Genode::Thread *thread; - Mutex() : counter(0), thread((Genode::Thread_base*)-1) {} + Mutex() : counter(0), thread((Genode::Thread*)-1) {} }; @@ -359,10 +359,10 @@ extern "C" { */ sys_prot_t sys_arch_protect(void) { - if (global_mutex()->thread == Genode::Thread_base::myself()) + if (global_mutex()->thread == Genode::Thread::myself()) return ++global_mutex()->counter; global_mutex()->lock.lock(); - global_mutex()->thread = Genode::Thread_base::myself(); + global_mutex()->thread = Genode::Thread::myself(); return 0; } @@ -372,13 +372,13 @@ extern "C" { */ void sys_arch_unprotect(sys_prot_t pval) { - if (global_mutex()->thread != Genode::Thread_base::myself()) + if (global_mutex()->thread != Genode::Thread::myself()) return; if (global_mutex()->counter > 1) global_mutex()->counter--; else { global_mutex()->counter = 0; - global_mutex()->thread = (Genode::Thread_base*)-1; + global_mutex()->thread = (Genode::Thread*)-1; global_mutex()->lock.unlock(); } } @@ -618,10 +618,10 @@ extern "C" { struct Thread_timeout { sys_timeouts timeouts; - Thread_base *thread; + Thread *thread; Thread_timeout *next; - Thread_timeout(Thread_base *t = 0) + Thread_timeout(Thread *t = 0) : thread(t), next(0) { timeouts.next = 0; } }; static Lock mutex; @@ -630,7 +630,7 @@ extern "C" { Lock::Guard lock_guard(mutex); try { - Thread_base *thread = Thread_base::myself(); + Thread *thread = Thread::myself(); /* check available timeout heads */ for (Thread_timeout *tt = &thread_timeouts; tt; tt = tt->next) diff --git a/repos/libports/src/lib/pthread/thread.cc b/repos/libports/src/lib/pthread/thread.cc index 1ea386ccef..d11672287f 100644 --- a/repos/libports/src/lib/pthread/thread.cc +++ b/repos/libports/src/lib/pthread/thread.cc @@ -49,9 +49,9 @@ static List pthread_cleanup_list; * assumption that libpthread is loaded on application startup by ldso. During * this stage only the main thread is executed. */ -static __attribute__((constructor)) Thread_base * main_thread() +static __attribute__((constructor)) Thread * main_thread() { - static Thread_base *thread = Thread_base::myself(); + static Thread *thread = Thread::myself(); return thread; } @@ -121,13 +121,13 @@ extern "C" { /* special non-POSIX function (for example used in libresolv) */ int _pthread_main_np(void) { - return (Thread_base::myself() == main_thread()); + return (Thread::myself() == main_thread()); } pthread_t pthread_self(void) { - Thread_base *myself = Thread_base::myself(); + Thread *myself = Thread::myself(); pthread_t pthread = dynamic_cast(myself); if (pthread) @@ -140,20 +140,18 @@ extern "C" { */ if (!_pthread_main_np()) { - char name[64]; - myself->name(name, sizeof(name)); - - PERR("pthread_self() called from alien thread named '%s'", name); + PERR("pthread_self() called from alien thread named '%s'", + myself->name().string()); return nullptr; } /* * We create a pthread object containing a copy of main thread's - * Thread_base object. Therefore, we ensure the pthread object does not + * Thread object. Therefore, we ensure the pthread object does not * get deleted by allocating it in heap via new(). Otherwise, the * static destruction of the pthread object would also destruct the - * 'Thread_base' of the main thread. + * 'Thread' of the main thread. */ static struct pthread_attr main_thread_attr; @@ -615,7 +613,7 @@ extern "C" { * thread to mark the key slot as used. */ if (!key_list[k].first()) { - Key_element *key_element = new (env()->heap()) Key_element(Thread_base::myself(), 0); + Key_element *key_element = new (env()->heap()) Key_element(Thread::myself(), 0); key_list[k].insert(key_element); *key = k; return 0; @@ -647,7 +645,7 @@ extern "C" { if (key < 0 || key >= PTHREAD_KEYS_MAX) return EINVAL; - void *myself = Thread_base::myself(); + void *myself = Thread::myself(); Lock_guard key_list_lock_guard(key_list_lock); @@ -659,7 +657,7 @@ extern "C" { } /* key element does not exist yet - create a new one */ - Key_element *key_element = new (env()->heap()) Key_element(Thread_base::myself(), value); + Key_element *key_element = new (env()->heap()) Key_element(Thread::myself(), value); key_list[key].insert(key_element); return 0; } @@ -670,7 +668,7 @@ extern "C" { if (key < 0 || key >= PTHREAD_KEYS_MAX) return nullptr; - void *myself = Thread_base::myself(); + void *myself = Thread::myself(); Lock_guard key_list_lock_guard(key_list_lock); diff --git a/repos/libports/src/lib/pthread/thread.h b/repos/libports/src/lib/pthread/thread.h index dd72dd7689..f7a7741e74 100644 --- a/repos/libports/src/lib/pthread/thread.h +++ b/repos/libports/src/lib/pthread/thread.h @@ -32,18 +32,18 @@ extern "C" { * This class is named 'struct pthread' because the 'pthread_t' type is * defined as 'struct pthread*' in '_pthreadtypes.h' */ - struct pthread : Genode::Thread_base + struct pthread : Genode::Thread { pthread_attr_t _attr; void *(*_start_routine) (void *); void *_arg; - enum { WEIGHT = Genode::Cpu_session::DEFAULT_WEIGHT }; + enum { WEIGHT = Genode::Cpu_session::Weight::DEFAULT_WEIGHT }; pthread(pthread_attr_t attr, void *(*start_routine) (void *), void *arg, size_t stack_size, char const * name, Genode::Cpu_session * cpu, Genode::Affinity::Location location) - : Thread_base(WEIGHT, name, stack_size, Type::NORMAL, cpu, location), + : Thread(WEIGHT, name, stack_size, Type::NORMAL, cpu, location), _attr(attr), _start_routine(start_routine), _arg(arg) @@ -56,8 +56,8 @@ extern "C" { * Constructor to create pthread object out of existing thread, * e.g. main Genode thread */ - pthread(Thread_base &myself, pthread_attr_t attr) - : Thread_base(myself), + pthread(Thread &myself, pthread_attr_t attr) + : Thread(myself), _attr(attr), _start_routine(nullptr), _arg(nullptr) { if (_attr) diff --git a/repos/libports/src/lib/qt5/patches/qt5_qtwebkit.patch b/repos/libports/src/lib/qt5/patches/qt5_qtwebkit.patch index b8a83bc4ff..c36c74198d 100644 --- a/repos/libports/src/lib/qt5/patches/qt5_qtwebkit.patch +++ b/repos/libports/src/lib/qt5/patches/qt5_qtwebkit.patch @@ -258,8 +258,8 @@ index a272ce3..a2e7484 100644 + +void StackBounds::initialize() +{ -+ m_bound = Genode::Thread_base::myself()->stack_base(); -+ m_origin = Genode::Thread_base::myself()->stack_top(); ++ m_bound = Genode::Thread::myself()->stack_base(); ++ m_origin = Genode::Thread::myself()->stack_top(); +} + #elif OS(UNIX) diff --git a/repos/libports/src/lib/qt5/qt_main.cc b/repos/libports/src/lib/qt5/qt_main.cc index 5cdbe3ca8a..ca4c87940b 100644 --- a/repos/libports/src/lib/qt5/qt_main.cc +++ b/repos/libports/src/lib/qt5/qt_main.cc @@ -23,7 +23,7 @@ extern int qt_main(int argc, char *argv[]); int main(int argc, char *argv[]) { - Genode::Thread_base::myself()->stack_size(QT_MAIN_STACK_SIZE); + Genode::Thread::myself()->stack_size(QT_MAIN_STACK_SIZE); return qt_main(argc, argv); } diff --git a/repos/libports/src/test/ldso/main.cc b/repos/libports/src/test/ldso/main.cc index 5ce4baa544..8fe68c41e2 100644 --- a/repos/libports/src/test/ldso/main.cc +++ b/repos/libports/src/test/ldso/main.cc @@ -128,9 +128,9 @@ static void test_stack_align(char const *fmt, ...) va_end(list); } -struct Test_stack_align_thread : Thread<0x2000> +struct Test_stack_align_thread : Thread_deprecated<0x2000> { - Test_stack_align_thread() : Thread<0x2000>("test_stack_align") { } + Test_stack_align_thread() : Thread_deprecated<0x2000>("test_stack_align") { } void entry() { test_stack_align("%f\n%g\n", 3.142, 2.718); } }; diff --git a/repos/libports/src/test/lwip/loopback/main.cc b/repos/libports/src/test/lwip/loopback/main.cc index 8c503249fc..0271c1b9a8 100644 --- a/repos/libports/src/test/lwip/loopback/main.cc +++ b/repos/libports/src/test/lwip/loopback/main.cc @@ -39,11 +39,11 @@ static const char *http_get_request = * and sends as much 'http get' requests as possible, * printing out the response. */ -class Client : public Genode::Thread<4096> +class Client : public Genode::Thread_deprecated<4096> { public: - Client() : Thread("client") { } + Client() : Thread_deprecated("client") { } void entry() { diff --git a/repos/os/include/os/irq_activation.h b/repos/os/include/os/irq_activation.h index 316898a45a..5b29961904 100644 --- a/repos/os/include/os/irq_activation.h +++ b/repos/os/include/os/irq_activation.h @@ -37,11 +37,11 @@ struct Genode::Irq_handler /** * Thread activated by IRQ */ -class Genode::Irq_activation : Thread_base +class Genode::Irq_activation : Thread { private: - enum { WEIGHT = Cpu_session::DEFAULT_WEIGHT }; + enum { WEIGHT = Cpu_session::Weight::DEFAULT_WEIGHT }; int _number; Irq_connection _connection; @@ -74,7 +74,7 @@ class Genode::Irq_activation : Thread_base */ Irq_activation(int irq_number, Irq_handler &handler, size_t stack_size) : - Thread_base(WEIGHT, _create_thread_name(irq_number), stack_size), + Thread(WEIGHT, _create_thread_name(irq_number), stack_size), _number(irq_number), _connection(irq_number), _handler(handler), _dispatcher(_sig_rec, *this, &Irq_activation::_handle) { diff --git a/repos/os/include/os/timed_semaphore.h b/repos/os/include/os/timed_semaphore.h index b01b297c77..ec9e7340e0 100644 --- a/repos/os/include/os/timed_semaphore.h +++ b/repos/os/include/os/timed_semaphore.h @@ -40,7 +40,7 @@ namespace Genode { /** * Alarm thread, which counts jiffies and triggers timeout events. */ -class Genode::Timeout_thread : public Thread<4096>, +class Genode::Timeout_thread : public Thread_deprecated<4096>, public Alarm_scheduler { private: @@ -55,7 +55,7 @@ class Genode::Timeout_thread : public Thread<4096>, public: - Timeout_thread() : Thread<4096>("alarm-timer") + Timeout_thread() : Thread_deprecated<4096>("alarm-timer") { _timer.sigh(_receiver.manage(&_context)); _timer.trigger_periodic(JIFFIES_STEP_MS*1000); diff --git a/repos/os/src/drivers/framebuffer/spec/sdl/input.cc b/repos/os/src/drivers/framebuffer/spec/sdl/input.cc index fc4a9e1e7d..a522ef79b4 100644 --- a/repos/os/src/drivers/framebuffer/spec/sdl/input.cc +++ b/repos/os/src/drivers/framebuffer/spec/sdl/input.cc @@ -218,13 +218,13 @@ namespace Input { struct Backend; } -struct Input::Backend : Genode::Thread +struct Input::Backend : Genode::Thread_deprecated { Handler &handler; Backend(Input::Handler &handler) : - Genode::Thread("input_backend"), + Genode::Thread_deprecated("input_backend"), handler(handler) { start(); diff --git a/repos/os/src/drivers/nic/spec/linux/main.cc b/repos/os/src/drivers/nic/spec/linux/main.cc index 62612cd5bf..1b8c58fd0a 100644 --- a/repos/os/src/drivers/nic/spec/linux/main.cc +++ b/repos/os/src/drivers/nic/spec/linux/main.cc @@ -44,13 +44,13 @@ class Linux_session_component : public Nic::Session_component { private: - struct Rx_signal_thread : Genode::Thread<0x1000> + struct Rx_signal_thread : Genode::Thread_deprecated<0x1000> { int fd; Genode::Signal_context_capability sigh; Rx_signal_thread(int fd, Genode::Signal_context_capability sigh) - : Genode::Thread<0x1000>("rx_signal"), fd(fd), sigh(sigh) { } + : Genode::Thread_deprecated<0x1000>("rx_signal"), fd(fd), sigh(sigh) { } void entry() { diff --git a/repos/os/src/drivers/platform/spec/x86/device_pd/main.cc b/repos/os/src/drivers/platform/spec/x86/device_pd/main.cc index bb28967696..22b961afc2 100644 --- a/repos/os/src/drivers/platform/spec/x86/device_pd/main.cc +++ b/repos/os/src/drivers/platform/spec/x86/device_pd/main.cc @@ -74,7 +74,7 @@ static bool map_eager(Genode::addr_t const page, unsigned log2_order) { using Genode::addr_t; - Genode::Thread_base * myself = Genode::Thread_base::myself(); + Genode::Thread * myself = Genode::Thread::myself(); Nova::Utcb * utcb = reinterpret_cast(myself->utcb()); Nova::Rights const mapping_rw(true, true, false); diff --git a/repos/os/src/drivers/platform/spec/x86/irq.cc b/repos/os/src/drivers/platform/spec/x86/irq.cc index b18d760d8a..1332c200c5 100644 --- a/repos/os/src/drivers/platform/spec/x86/irq.cc +++ b/repos/os/src/drivers/platform/spec/x86/irq.cc @@ -107,7 +107,7 @@ class NoThread /** * Thread waiting for signals caused by IRQs */ -class Platform::Irq_thread : public Genode::Thread<4096> +class Platform::Irq_thread : public Genode::Thread_deprecated<4096> { private: @@ -115,7 +115,7 @@ class Platform::Irq_thread : public Genode::Thread<4096> public: - Irq_thread() : Thread<4096>("irq_sig_recv") { start(); } + Irq_thread() : Thread_deprecated<4096>("irq_sig_recv") { start(); } Genode::Signal_receiver & sig_rec() { return _sig_rec; } diff --git a/repos/os/src/drivers/timer/include/timer_session_component.h b/repos/os/src/drivers/timer/include/timer_session_component.h index c4cd09b6a4..26733c25ca 100644 --- a/repos/os/src/drivers/timer/include/timer_session_component.h +++ b/repos/os/src/drivers/timer/include/timer_session_component.h @@ -140,7 +140,7 @@ class Timer::Wake_up_alarm : public Genode::Alarm class Timer::Timeout_scheduler : public Genode::Alarm_scheduler, - Genode::Thread + Genode::Thread_deprecated { private: @@ -180,7 +180,7 @@ class Timer::Timeout_scheduler : public Genode::Alarm_scheduler, */ Timeout_scheduler(Platform_timer *pt, Genode::Rpc_entrypoint *ep) : - Thread("timeout_scheduler"), + Thread_deprecated("timeout_scheduler"), _platform_timer(pt), _irq_dispatcher_component(this, pt), _irq_dispatcher_cap(ep->manage(&_irq_dispatcher_component)) diff --git a/repos/os/src/drivers/timer/include_periodic/platform_timer.h b/repos/os/src/drivers/timer/include_periodic/platform_timer.h index b7b3d2db2b..e3726ec24e 100644 --- a/repos/os/src/drivers/timer/include_periodic/platform_timer.h +++ b/repos/os/src/drivers/timer/include_periodic/platform_timer.h @@ -61,7 +61,7 @@ class Platform_timer /** * Block until the scheduled timeout triggers */ - void wait_for_timeout(Genode::Thread_base *blocking_thread) + void wait_for_timeout(Genode::Thread *blocking_thread) { enum { SLEEP_GRANULARITY_USEC = 1000UL }; diff --git a/repos/os/src/drivers/timer/include_pit/platform_timer.h b/repos/os/src/drivers/timer/include_pit/platform_timer.h index ebd5b4c9f7..38389f9d45 100644 --- a/repos/os/src/drivers/timer/include_pit/platform_timer.h +++ b/repos/os/src/drivers/timer/include_pit/platform_timer.h @@ -195,7 +195,7 @@ class Platform_timer /** * Block for the next scheduled timeout */ - void wait_for_timeout(Genode::Thread_base *blocking_thread) + void wait_for_timeout(Genode::Thread *blocking_thread) { _irq_rec.wait_for_signal(); _timer_irq.ack_irq(); diff --git a/repos/os/src/drivers/timer/spec/hw/platform_timer.h b/repos/os/src/drivers/timer/spec/hw/platform_timer.h index e4a4b3e1af..348722a55d 100644 --- a/repos/os/src/drivers/timer/spec/hw/platform_timer.h +++ b/repos/os/src/drivers/timer/spec/hw/platform_timer.h @@ -118,7 +118,7 @@ class Platform_timer : public Platform_timer_base, /** * Await the lastly scheduled timeout */ - void wait_for_timeout(Genode::Thread_base *) + void wait_for_timeout(Genode::Thread *) { _irq_rec.wait_for_signal(); Irq_connection::ack_irq(); diff --git a/repos/os/src/drivers/timer/spec/nova/platform_timer.h b/repos/os/src/drivers/timer/spec/nova/platform_timer.h index 647f4fabfb..7c17f39b0e 100644 --- a/repos/os/src/drivers/timer/spec/nova/platform_timer.h +++ b/repos/os/src/drivers/timer/spec/nova/platform_timer.h @@ -99,7 +99,7 @@ class Platform_timer /** * Block for the next scheduled timeout */ - void wait_for_timeout(Genode::Thread_base *blocking_thread) + void wait_for_timeout(Genode::Thread *blocking_thread) { using namespace Genode; using namespace Nova; diff --git a/repos/os/src/drivers/uart/kdb/kdb_uart.h b/repos/os/src/drivers/uart/kdb/kdb_uart.h index e4fa9252cc..4a5e87ac10 100644 --- a/repos/os/src/drivers/uart/kdb/kdb_uart.h +++ b/repos/os/src/drivers/uart/kdb/kdb_uart.h @@ -38,7 +38,7 @@ class Kdb_uart : public Uart::Driver enum { STACK_SIZE = 2*1024*sizeof(addr_t) }; - class Char_avail_checker_thread : public Thread + class Char_avail_checker_thread : public Thread_deprecated { private: @@ -50,7 +50,7 @@ class Kdb_uart : public Uart::Driver Char_avail_checker_thread(Uart::Driver &uart_driver, Uart::Char_avail_callback &char_avail_callback) : - Thread("char_avail_handler"), + Thread_deprecated("char_avail_handler"), _uart_driver(uart_driver), _char_avail_callback(char_avail_callback) { } diff --git a/repos/os/src/server/tz_vmm/block.cc b/repos/os/src/server/tz_vmm/block.cc index 46f3c1dfc2..bb13863ca1 100644 --- a/repos/os/src/server/tz_vmm/block.cc +++ b/repos/os/src/server/tz_vmm/block.cc @@ -269,7 +269,7 @@ class Device_registry /** * Thread that listens to device interrupts and propagates them to a VM */ -class Callback : public Thread<8192> +class Callback : public Thread_deprecated<8192> { private: @@ -324,11 +324,11 @@ class Callback : public Thread<8192> */ Callback(Vm_base * const vm) : - Thread<8192>("blk-signal-thread"), + Thread_deprecated<8192>("blk-signal-thread"), _ready_lock(Lock::LOCKED), _vm(vm) { - Thread_base::start(); + Thread::start(); _ready_lock.lock(); } }; diff --git a/repos/os/src/server/tz_vmm/spec/imx53/main.cc b/repos/os/src/server/tz_vmm/spec/imx53/main.cc index 6c3ff240d8..2229ae1a7c 100644 --- a/repos/os/src/server/tz_vmm/spec/imx53/main.cc +++ b/repos/os/src/server/tz_vmm/spec/imx53/main.cc @@ -45,7 +45,7 @@ namespace Vmm { } -class Vmm::Vmm : public Thread<8192> +class Vmm::Vmm : public Thread_deprecated<8192> { private: @@ -128,7 +128,7 @@ class Vmm::Vmm : public Thread<8192> public: Vmm(Vm *vm) - : Thread<8192>("vmm"), + : Thread_deprecated<8192>("vmm"), _vm(vm), _m4if_io_mem(Board_base::M4IF_BASE, Board_base::M4IF_SIZE), _m4if((addr_t)env()->rm_session()->attach(_m4if_io_mem.dataspace())) diff --git a/repos/os/src/test/alarm/main.cc b/repos/os/src/test/alarm/main.cc index 0be161beb6..2fdd2fd703 100644 --- a/repos/os/src/test/alarm/main.cc +++ b/repos/os/src/test/alarm/main.cc @@ -20,7 +20,7 @@ using namespace Genode; -class Alarm_thread : Thread<4096>, public Alarm_scheduler +class Alarm_thread : Thread_deprecated<4096>, public Alarm_scheduler { private: @@ -46,7 +46,7 @@ class Alarm_thread : Thread<4096>, public Alarm_scheduler /** * Constructor */ - Alarm_thread(): Thread("alarm"), _curr_time(0) { start(); } + Alarm_thread(): Thread_deprecated("alarm"), _curr_time(0) { start(); } Alarm::Time curr_time() { return _curr_time; } }; diff --git a/repos/os/src/test/audio_out/main.cc b/repos/os/src/test/audio_out/main.cc index 80efd68770..55a0d01f18 100644 --- a/repos/os/src/test/audio_out/main.cc +++ b/repos/os/src/test/audio_out/main.cc @@ -42,7 +42,7 @@ enum { static const char *channel_names[] = { "front left", "front right" }; -class Track : Thread<8192> +class Track : Thread_deprecated<8192> { private: @@ -51,7 +51,7 @@ class Track : Thread<8192> public: - Track(const char *file) : Thread("track"), _file(file) + Track(const char *file) : Thread_deprecated("track"), _file(file) { for (int i = 0; i < CHN_CNT; ++i) { /* allocation signal for first channel only */ diff --git a/repos/os/src/test/nic_raw/main.cc b/repos/os/src/test/nic_raw/main.cc index b06480afb3..b0f41cf189 100644 --- a/repos/os/src/test/nic_raw/main.cc +++ b/repos/os/src/test/nic_raw/main.cc @@ -29,7 +29,7 @@ enum { STACK_SIZE = 4096, }; -class Nic_worker : public Genode::Thread +class Nic_worker : public Genode::Thread_deprecated { private: @@ -54,7 +54,7 @@ class Nic_worker : public Genode::Thread Nic_worker(Nic::Connection *nic) : - Genode::Thread("nic-worker"), _nic(nic) + Genode::Thread_deprecated("nic-worker"), _nic(nic) { using namespace Genode; diff --git a/repos/os/src/test/packet_stream/main.cc b/repos/os/src/test/packet_stream/main.cc index b1c36fe57e..be46ef1547 100644 --- a/repos/os/src/test/packet_stream/main.cc +++ b/repos/os/src/test/packet_stream/main.cc @@ -45,7 +45,7 @@ void Genode::Packet_stream_base::_debug_print_buffers() /** * Thread generating packets */ -class Source : private Genode::Thread, +class Source : private Genode::Thread_deprecated, private Genode::Allocator_avl, public Genode::Packet_stream_source { @@ -140,7 +140,7 @@ class Source : private Genode::Thread, Source(Genode::Dataspace_capability ds_cap) : /* init bulk buffer allocator, storing its meta data on the heap */ - Thread("source"), + Thread_deprecated("source"), Genode::Allocator_avl(Genode::env()->heap()), Packet_stream_source(this, ds_cap), _operation(OP_NONE), @@ -168,7 +168,7 @@ class Source : private Genode::Thread, }; -class Sink : private Genode::Thread, +class Sink : private Genode::Thread_deprecated, public Genode::Packet_stream_sink { private: @@ -221,7 +221,7 @@ class Sink : private Genode::Thread, */ Sink(Genode::Dataspace_capability ds_cap) : - Thread("sink"), + Thread_deprecated("sink"), Packet_stream_sink(ds_cap), _operation(OP_NONE), _lock(Genode::Lock::LOCKED), diff --git a/repos/os/src/test/rom_blk/main.cc b/repos/os/src/test/rom_blk/main.cc index 35b8fecb20..51b68576bb 100644 --- a/repos/os/src/test/rom_blk/main.cc +++ b/repos/os/src/test/rom_blk/main.cc @@ -24,7 +24,7 @@ #include -class Comparer : public Genode::Thread<8192> +class Comparer : public Genode::Thread_deprecated<8192> { private: @@ -42,7 +42,7 @@ class Comparer : public Genode::Thread<8192> Comparer(Genode::Allocator_avl *block_alloc, const char* filename) - : Thread("comparer"), _blk_con(block_alloc), _rom(filename), + : Thread_deprecated("comparer"), _blk_con(block_alloc), _rom(filename), _addr(Genode::env()->rm_session()->attach(_rom.dataspace())) { } void entry() diff --git a/repos/os/src/test/signal/main.cc b/repos/os/src/test/signal/main.cc index 260c5c4d7e..4ae78801de 100644 --- a/repos/os/src/test/signal/main.cc +++ b/repos/os/src/test/signal/main.cc @@ -25,7 +25,7 @@ using namespace Genode; /** * Transmit signals in a periodic fashion */ -class Sender : Thread<4096> +class Sender : Thread_deprecated<4096> { private: @@ -71,7 +71,7 @@ class Sender : Thread<4096> Sender(Signal_context_capability context, unsigned interval_ms, bool verbose = true) : - Thread("sender"), + Thread_deprecated("sender"), _transmitter(context), _interval_ms(interval_ms), _stop(false), @@ -110,7 +110,7 @@ class Sender : Thread<4096> /** * Signal handler receives signals and takes some time to handle each */ -class Handler : Thread<4096> +class Handler : Thread_deprecated<4096> { private: @@ -162,7 +162,7 @@ class Handler : Thread<4096> */ Handler(Signal_receiver *receiver, unsigned dispatch_ms, bool verbose = true) : - Thread("handler"), + Thread_deprecated("handler"), _dispatch_ms(dispatch_ms), _id(++_id_cnt), _receiver(receiver), @@ -543,7 +543,7 @@ static void check_context_management() static Lock signal_context_destroyer_lock(Lock::LOCKED); static bool signal_context_destroyed = false; -class Signal_context_destroyer : public Thread<4096> +class Signal_context_destroyer : public Thread_deprecated<4096> { private: @@ -553,7 +553,7 @@ class Signal_context_destroyer : public Thread<4096> public: Signal_context_destroyer(Signal_receiver *receiver, Signal_context *context) - : Thread("signal_context_destroyer"), + : Thread_deprecated("signal_context_destroyer"), _receiver(receiver), _context(context) { } void entry() diff --git a/repos/os/src/test/terminal_crosslink/main.cc b/repos/os/src/test/terminal_crosslink/main.cc index 5bfcb1f11b..14235a0d70 100644 --- a/repos/os/src/test/terminal_crosslink/main.cc +++ b/repos/os/src/test/terminal_crosslink/main.cc @@ -33,7 +33,7 @@ static const char *server_text = "Hello from server, too."; static char test_data[TEST_DATA_SIZE]; -class Partner : public Thread +class Partner : public Thread_deprecated { protected: @@ -46,7 +46,7 @@ class Partner : public Thread public: - Partner(const char *name) : Thread(name) + Partner(const char *name) : Thread_deprecated(name) { _terminal.read_avail_sigh(_sig_rec.manage(&_sig_ctx)); } diff --git a/repos/os/src/test/thread_join/main.cc b/repos/os/src/test/thread_join/main.cc index 0f7fe014b3..12c4b84ad7 100644 --- a/repos/os/src/test/thread_join/main.cc +++ b/repos/os/src/test/thread_join/main.cc @@ -1,5 +1,5 @@ /* - * \brief Test for the 'Thread_base::join()' function + * \brief Test for the 'Thread::join()' function * \author Norman Feske * \date 2012-11-16 */ @@ -18,7 +18,7 @@ using namespace Genode; -struct Worker : Genode::Thread<4096> +struct Worker : Genode::Thread_deprecated<4096> { Timer::Session &timer; unsigned const result_value; @@ -36,7 +36,7 @@ struct Worker : Genode::Thread<4096> Worker(Timer::Session &timer, int result_value) : - Thread("worker"), + Thread_deprecated("worker"), timer(timer), result_value(result_value), result(~0) { start(); diff --git a/repos/os/src/test/timed_semaphore/main.cc b/repos/os/src/test/timed_semaphore/main.cc index fcc4ef5156..77eacade51 100644 --- a/repos/os/src/test/timed_semaphore/main.cc +++ b/repos/os/src/test/timed_semaphore/main.cc @@ -17,7 +17,7 @@ using namespace Genode; -class Wakeup_thread : public Thread<4096> +class Wakeup_thread : public Thread_deprecated<4096> { private: @@ -32,7 +32,7 @@ class Wakeup_thread : public Thread<4096> Wakeup_thread(Timed_semaphore *sem, Timer::Session *timer, Alarm::Time timeout) - : Thread("wakeup"), _sem(sem), _timer(timer), _timeout(timeout), + : Thread_deprecated("wakeup"), _sem(sem), _timer(timer), _timeout(timeout), _lock(Lock::LOCKED), _stop(false) { } void entry() diff --git a/repos/os/src/test/timer/main.cc b/repos/os/src/test/timer/main.cc index 504755a2f0..a8c9d85e0b 100644 --- a/repos/os/src/test/timer/main.cc +++ b/repos/os/src/test/timer/main.cc @@ -20,7 +20,7 @@ enum { STACK_SIZE = 4096 }; class Timer_client : public Genode::List::Element, - Timer::Connection, Genode::Thread + Timer::Connection, Genode::Thread_deprecated { private: @@ -47,7 +47,7 @@ class Timer_client : public Genode::List::Element, * Constructor */ Timer_client(unsigned long period_msec) - : Thread("timer_client"), + : Thread_deprecated("timer_client"), _period_msec(period_msec), _cnt(0), _stop(false) { } /** @@ -55,7 +55,7 @@ class Timer_client : public Genode::List::Element, */ void start() { - Genode::Thread::start(); + Genode::Thread_deprecated::start(); } /** @@ -78,7 +78,7 @@ class Timer_client : public Genode::List::Element, /** * Timer client that continuously reprograms timeouts */ -struct Timer_stressful_client : Timer::Connection, Genode::Thread +struct Timer_stressful_client : Timer::Connection, Genode::Thread_deprecated { unsigned long us; @@ -99,9 +99,9 @@ struct Timer_stressful_client : Timer::Connection, Genode::Thread Timer_stressful_client(unsigned long us) : - Thread("timer_stressful_client"), us(us) + Thread_deprecated("timer_stressful_client"), us(us) { - Genode::Thread::start(); + Genode::Thread_deprecated::start(); } }; diff --git a/repos/os/src/test/trace/main.cc b/repos/os/src/test/trace/main.cc index 975003c96d..b6f9f3c15d 100644 --- a/repos/os/src/test/trace/main.cc +++ b/repos/os/src/test/trace/main.cc @@ -32,7 +32,7 @@ static char const *state_name(Genode::Trace::Subject_info::State state) } -struct Test_thread : Genode::Thread<1024 * sizeof (unsigned long)> +struct Test_thread : Genode::Thread_deprecated<1024 * sizeof (unsigned long)> { Timer::Connection _timer; @@ -51,7 +51,7 @@ struct Test_thread : Genode::Thread<1024 * sizeof (unsigned long)> } Test_thread(const char *name) - : Thread(name) { start(); } + : Thread_deprecated(name) { start(); } }; diff --git a/repos/os/src/test/vfs_stress/main.cc b/repos/os/src/test/vfs_stress/main.cc index 1f052949a6..d59c161e9f 100644 --- a/repos/os/src/test/vfs_stress/main.cc +++ b/repos/os/src/test/vfs_stress/main.cc @@ -140,14 +140,14 @@ static int MAX_DEPTH; typedef Genode::Path Path; -struct Stress_thread : public Genode::Thread<4*1024*sizeof(Genode::addr_t)> +struct Stress_thread : public Genode::Thread_deprecated<4*1024*sizeof(Genode::addr_t)> { ::Path path; Vfs::file_size count; Vfs::File_system &vfs; Stress_thread(Vfs::File_system &vfs, char const *parent, Affinity::Location affinity) - : Thread(parent), path(parent), count(0), vfs(vfs) + : Thread_deprecated(parent), path(parent), count(0), vfs(vfs) { env()->cpu_session()->affinity(cap(), affinity); } diff --git a/repos/ports-foc/src/lib/l4lx/genode_block.cc b/repos/ports-foc/src/lib/l4lx/genode_block.cc index 335886510e..f1dafb7ba7 100644 --- a/repos/ports-foc/src/lib/l4lx/genode_block.cc +++ b/repos/ports-foc/src/lib/l4lx/genode_block.cc @@ -128,7 +128,7 @@ namespace { }; - class Signal_thread : public Genode::Thread<8192> + class Signal_thread : public Genode::Thread_deprecated<8192> { private: @@ -167,13 +167,13 @@ namespace { public: Signal_thread(Block_device **devs) - : Genode::Thread<8192>("blk-signal-thread"), + : Genode::Thread_deprecated<8192>("blk-signal-thread"), _count(Fiasco::genode_block_count()), _devs(devs), _ready_lock(Genode::Lock::LOCKED) {} void start() { - Genode::Thread_base::start(); + Genode::Thread::start(); /* * Do not return until the new thread has initialized the diff --git a/repos/ports-foc/src/lib/l4lx/genode_net.cc b/repos/ports-foc/src/lib/l4lx/genode_net.cc index d35f92c9a6..48efac87ec 100644 --- a/repos/ports-foc/src/lib/l4lx/genode_net.cc +++ b/repos/ports-foc/src/lib/l4lx/genode_net.cc @@ -40,7 +40,7 @@ namespace Fiasco { * Debugging/Tracing */ #if TX_BENCH | RX_BENCH -struct Counter : public Genode::Thread<8192> +struct Counter : public Genode::Thread_deprecated<8192> { int cnt; Genode::size_t size; @@ -59,7 +59,7 @@ struct Counter : public Genode::Thread<8192> void inc(Genode::size_t s) { cnt++; size += s; } - Counter() : Thread("net-counter"), cnt(0), size(0) { start(); } + Counter() : Thread_deprecated("net-counter"), cnt(0), size(0) { start(); } }; #else struct Counter { inline void inc(Genode::size_t s) { } }; @@ -93,7 +93,7 @@ static Nic::Connection *nic() { namespace { - class Signal_thread : public Genode::Thread<8192> + class Signal_thread : public Genode::Thread_deprecated<8192> { private: @@ -126,7 +126,7 @@ namespace { public: Signal_thread(Fiasco::l4_cap_idx_t cap, Genode::Lock *sync) - : Genode::Thread<8192>("net-signal-thread"), _cap(cap), _sync(sync) { + : Genode::Thread_deprecated<8192>("net-signal-thread"), _cap(cap), _sync(sync) { start(); } }; } diff --git a/repos/ports-foc/src/lib/l4lx/genode_terminal.cc b/repos/ports-foc/src/lib/l4lx/genode_terminal.cc index 8865f5cb61..45f2232d05 100644 --- a/repos/ports-foc/src/lib/l4lx/genode_terminal.cc +++ b/repos/ports-foc/src/lib/l4lx/genode_terminal.cc @@ -41,7 +41,7 @@ static Terminal::Connection *terminal() { namespace { - class Signal_thread : public Genode::Thread<8192> + class Signal_thread : public Genode::Thread_deprecated<8192> { private: @@ -70,7 +70,7 @@ namespace { public: Signal_thread(Fiasco::l4_cap_idx_t cap) - : Genode::Thread<8192>("terminal-signal-thread"), _cap(cap) { start(); } + : Genode::Thread_deprecated<8192>("terminal-signal-thread"), _cap(cap) { start(); } }; } diff --git a/repos/ports-foc/src/lib/l4lx/include/linux.h b/repos/ports-foc/src/lib/l4lx/include/linux.h index 73cdfb1cd6..a0fd5d5183 100644 --- a/repos/ports-foc/src/lib/l4lx/include/linux.h +++ b/repos/ports-foc/src/lib/l4lx/include/linux.h @@ -62,7 +62,7 @@ namespace Linux { Irq_guard() : _flags(0), - _vcpu(dynamic_cast(Genode::Thread_base::myself())) + _vcpu(dynamic_cast(Genode::Thread::myself())) { if (_vcpu) l4x_irq_save(&_flags); diff --git a/repos/ports-foc/src/lib/l4lx/include/vcpu.h b/repos/ports-foc/src/lib/l4lx/include/vcpu.h index a90d38e489..661d410f51 100644 --- a/repos/ports-foc/src/lib/l4lx/include/vcpu.h +++ b/repos/ports-foc/src/lib/l4lx/include/vcpu.h @@ -33,11 +33,11 @@ namespace L4lx { extern Genode::Cpu_session *cpu_connection(); - class Vcpu : public Genode::Thread_base + class Vcpu : public Genode::Thread { private: - enum { WEIGHT = Genode::Cpu_session::DEFAULT_WEIGHT }; + enum { WEIGHT = Genode::Cpu_session::Weight::DEFAULT_WEIGHT }; Genode::Lock _lock; L4_CV void (*_func)(void *data); @@ -55,8 +55,8 @@ namespace L4lx { Genode::size_t stack_size, Genode::addr_t vcpu_state, unsigned cpu_nr) - : Genode::Thread_base(WEIGHT, str, stack_size, - Genode::Affinity::Location(cpu_nr, 0)), + : Genode::Thread(WEIGHT, str, stack_size, + Genode::Affinity::Location(cpu_nr, 0)), _lock(Genode::Cancelable_lock::LOCKED), _func(func), _data(data ? *data : 0), diff --git a/repos/ports-foc/src/lib/l4lx/l4_util_util.cc b/repos/ports-foc/src/lib/l4lx/l4_util_util.cc index d25cf43a80..101d82f755 100644 --- a/repos/ports-foc/src/lib/l4lx/l4_util_util.cc +++ b/repos/ports-foc/src/lib/l4lx/l4_util_util.cc @@ -24,7 +24,7 @@ extern "C" { void l4_sleep(int ms) { - L4lx::Vcpu *vcpu = static_cast(Genode::Thread_base::myself()); + L4lx::Vcpu *vcpu = static_cast(Genode::Thread::myself()); if (vcpu) vcpu->timer()->msleep(ms); else { diff --git a/repos/ports-foc/src/lib/l4lx/l4x_pagefault.cc b/repos/ports-foc/src/lib/l4lx/l4x_pagefault.cc index a6fe44b025..d9470b3dfd 100644 --- a/repos/ports-foc/src/lib/l4lx/l4x_pagefault.cc +++ b/repos/ports-foc/src/lib/l4lx/l4x_pagefault.cc @@ -16,7 +16,7 @@ static Genode::Lock balloon_lock; namespace { - class Signal_thread : public Genode::Thread<8192> + class Signal_thread : public Genode::Thread_deprecated<8192> { private: @@ -51,7 +51,7 @@ namespace { public: Signal_thread(Fiasco::l4_cap_idx_t cap, Genode::Lock *sync) - : Genode::Thread<8192>("net-signal-thread"), _cap(cap), _sync(sync) { + : Genode::Thread_deprecated<8192>("net-signal-thread"), _cap(cap), _sync(sync) { start(); } }; } diff --git a/repos/ports-foc/src/lib/l4lx/startup.cc b/repos/ports-foc/src/lib/l4lx/startup.cc index 2ef0efddbd..d15bff6943 100644 --- a/repos/ports-foc/src/lib/l4lx/startup.cc +++ b/repos/ports-foc/src/lib/l4lx/startup.cc @@ -107,7 +107,7 @@ static void prepare_l4re_env() Genode::Foc_native_cpu_client native_cpu(cpu.native_cpu()); - Genode::Thread_capability main_thread = Genode::Thread_base::myself()->cap(); + Genode::Thread_capability main_thread = Genode::Thread::myself()->cap(); static Genode::Native_capability main_thread_cap = native_cpu.native_cap(main_thread); @@ -131,8 +131,8 @@ static void register_reserved_areas() size_t bin_sz = (addr_t)&_prog_img_end - (addr_t)&_prog_img_beg; L4lx::Env::env()->rm()->reserve_range((addr_t)&_prog_img_beg, bin_sz, "Binary"); - L4lx::Env::env()->rm()->reserve_range(Thread_base::stack_area_virtual_base(), - Thread_base::stack_area_virtual_size(), + L4lx::Env::env()->rm()->reserve_range(Thread::stack_area_virtual_base(), + Thread::stack_area_virtual_size(), "Stack Area"); } diff --git a/repos/ports/include/vmm/printf.h b/repos/ports/include/vmm/printf.h index 99b497303e..159c8a0cab 100644 --- a/repos/ports/include/vmm/printf.h +++ b/repos/ports/include/vmm/printf.h @@ -45,12 +45,12 @@ inline void Vmm::printf(const char *format, ...) Lock::Guard guard(lock); - utcb_backup = *(Utcb_backup *)Thread_base::myself()->utcb(); + utcb_backup = *(Utcb_backup *)Thread::myself()->utcb(); Genode::printf("VMM: "); Genode::vprintf(format, list); - *(Utcb_backup *)Thread_base::myself()->utcb() = utcb_backup; + *(Utcb_backup *)Thread::myself()->utcb() = utcb_backup; va_end(list); } diff --git a/repos/ports/include/vmm/utcb_guard.h b/repos/ports/include/vmm/utcb_guard.h index c125f16cd5..c39e74b95b 100644 --- a/repos/ports/include/vmm/utcb_guard.h +++ b/repos/ports/include/vmm/utcb_guard.h @@ -43,7 +43,7 @@ class Vmm::Utcb_guard Utcb_guard(Utcb_backup &backup_utcb) : _backup_utcb(backup_utcb) { Nova::Utcb *utcb = - reinterpret_cast(Thread_base::myself()->utcb()); + reinterpret_cast(Thread::myself()->utcb()); unsigned header_len = (char *)utcb->msg - (char *)utcb; unsigned len = header_len + utcb->msg_words() * sizeof(Nova::mword_t); @@ -59,7 +59,7 @@ class Vmm::Utcb_guard unsigned header_len = (char *)utcb->msg - (char *)utcb; unsigned len = header_len + utcb->msg_words() * sizeof(Nova::mword_t); - Genode::memcpy(Thread_base::myself()->utcb(), utcb, len); + Genode::memcpy(Thread::myself()->utcb(), utcb, len); } }; diff --git a/repos/ports/include/vmm/vcpu_dispatcher.h b/repos/ports/include/vmm/vcpu_dispatcher.h index 15d1e31e5c..37fdc51433 100644 --- a/repos/ports/include/vmm/vcpu_dispatcher.h +++ b/repos/ports/include/vmm/vcpu_dispatcher.h @@ -35,7 +35,7 @@ class Vmm::Vcpu_dispatcher : public T { private: - enum { WEIGHT = Genode::Cpu_session::DEFAULT_WEIGHT }; + enum { WEIGHT = Genode::Cpu_session::Weight::DEFAULT_WEIGHT }; Pd_session &_pd; Nova_native_pd_client _native_pd { _pd.native_pd() }; @@ -52,7 +52,7 @@ class Vmm::Vcpu_dispatcher : public T static void _portal_entry() { /* obtain this pointer of the event handler */ - Genode::Thread_base *myself = Genode::Thread_base::myself(); + Genode::Thread *myself = Genode::Thread::myself(); DISPATCHER *vd = static_cast(myself); vd->exit_reason = EV; @@ -131,7 +131,7 @@ class Vmm::Vcpu_dispatcher : public T } /** - * Unused member of the 'Thread_base' interface + * Unused member of the 'Thread' interface * * Similarly to how 'Rpc_entrypoints' are handled, a 'Vcpu_dispatcher' * comes with a custom initialization procedure, which does not call diff --git a/repos/ports/include/vmm/vcpu_thread.h b/repos/ports/include/vmm/vcpu_thread.h index 59e844e615..dcfdf24b00 100644 --- a/repos/ports/include/vmm/vcpu_thread.h +++ b/repos/ports/include/vmm/vcpu_thread.h @@ -67,9 +67,9 @@ class Vmm::Vcpu_other_pd : public Vmm::Vcpu_thread { using namespace Genode; - enum { WEIGHT = Cpu_session::DEFAULT_WEIGHT }; Thread_capability vcpu_vm = - _cpu_session->create_thread(_pd_session, WEIGHT, "vCPU", _location); + _cpu_session->create_thread(_pd_session, "vCPU", + _location, Cpu_session::Weight()); /* tell parent that this will be a vCPU */ Thread_state state; @@ -104,16 +104,16 @@ class Vmm::Vcpu_other_pd : public Vmm::Vcpu_thread }; -class Vmm::Vcpu_same_pd : public Vmm::Vcpu_thread, Genode::Thread_base +class Vmm::Vcpu_same_pd : public Vmm::Vcpu_thread, Genode::Thread { - enum { WEIGHT = Genode::Cpu_session::DEFAULT_WEIGHT }; + enum { WEIGHT = Genode::Cpu_session::Weight::DEFAULT_WEIGHT }; public: Vcpu_same_pd(size_t stack_size, Cpu_session * cpu_session, Genode::Affinity::Location location) : - Thread_base(WEIGHT, "vCPU", stack_size, Type::NORMAL, cpu_session, location) + Thread(WEIGHT, "vCPU", stack_size, Type::NORMAL, cpu_session, location) { /* release pre-allocated selectors of Thread */ Genode::cap_map()->remove(native_thread().exc_pt_sel, Nova::NUM_INITIAL_PT_LOG2); @@ -140,7 +140,7 @@ class Vmm::Vcpu_same_pd : public Vmm::Vcpu_thread, Genode::Thread_base void start(Genode::addr_t sel_ec) { - this->Thread_base::start(); + this->Thread::start(); /* obtain interface to NOVA-specific CPU session operations */ Nova_native_cpu_client native_cpu(_cpu_session->native_cpu()); diff --git a/repos/ports/run/gdb_monitor.run b/repos/ports/run/gdb_monitor.run index 731ba25423..642be65c54 100644 --- a/repos/ports/run/gdb_monitor.run +++ b/repos/ports/run/gdb_monitor.run @@ -239,7 +239,7 @@ if {![regexp {Program received signal SIGSEGV, Segmentation fault.} $gdb_output] } if {![regexp {Genode::Cancelable_lock::lock\(\)} $gdb_output] || - ![regexp {Genode::Thread_base::join\(\)} $gdb_output] || + ![regexp {Genode::Thread::join\(\)} $gdb_output] || ![regexp {in main \(\)} $gdb_output]} { puts stderr "Error: Stack trace when in syscall is not as expected" diff --git a/repos/ports/src/app/gdb_monitor/cpu_session_component.cc b/repos/ports/src/app/gdb_monitor/cpu_session_component.cc index 7f24db4fcd..bf2112d9b0 100644 --- a/repos/ports/src/app/gdb_monitor/cpu_session_component.cc +++ b/repos/ports/src/app/gdb_monitor/cpu_session_component.cc @@ -64,12 +64,14 @@ Thread_capability Cpu_session_component::thread_cap(unsigned long lwpid) Thread_capability -Cpu_session_component::create_thread(Capability pd, size_t weight, - Name const &name, Affinity::Location location, - addr_t utcb) +Cpu_session_component::create_thread(Capability pd, + Name const &name, + Affinity::Location location, + Weight weight, + addr_t utcb) { Thread_capability thread_cap = - _parent_cpu_session.create_thread(pd, weight, name.string(), location, utcb); + _parent_cpu_session.create_thread(pd, name, location, weight, utcb); if (thread_cap.valid()) { Thread_info *thread_info = new (env()->heap()) Thread_info(thread_cap, new_lwpid++); diff --git a/repos/ports/src/app/gdb_monitor/cpu_session_component.h b/repos/ports/src/app/gdb_monitor/cpu_session_component.h index 778583afe3..1d792dbcac 100644 --- a/repos/ports/src/app/gdb_monitor/cpu_session_component.h +++ b/repos/ports/src/app/gdb_monitor/cpu_session_component.h @@ -56,7 +56,8 @@ class Cpu_session_component : public Rpc_object ** CPU session interface ** ***************************/ - Thread_capability create_thread(Capability, size_t, Name const &, Affinity::Location, addr_t) override; + Thread_capability create_thread(Capability, Name const &, + Affinity::Location, Weight, addr_t) override; Ram_dataspace_capability utcb(Thread_capability thread) override; void kill_thread(Thread_capability) override; int start(Thread_capability, addr_t, addr_t) override; diff --git a/repos/ports/src/app/gdb_monitor/gdb_stub_thread.cc b/repos/ports/src/app/gdb_monitor/gdb_stub_thread.cc index b9e7229995..f4c2fd7cf9 100644 --- a/repos/ports/src/app/gdb_monitor/gdb_stub_thread.cc +++ b/repos/ports/src/app/gdb_monitor/gdb_stub_thread.cc @@ -20,7 +20,7 @@ using namespace Gdb_monitor; Gdb_stub_thread::Gdb_stub_thread() : - Thread("GDB server thread"), + Thread_deprecated("GDB server thread"), _cpu_session_component(0), _region_map_component(0), _signal_handler_thread(&_exception_signal_receiver) diff --git a/repos/ports/src/app/gdb_monitor/gdb_stub_thread.h b/repos/ports/src/app/gdb_monitor/gdb_stub_thread.h index 6c3fafdac3..3aa4de2b79 100644 --- a/repos/ports/src/app/gdb_monitor/gdb_stub_thread.h +++ b/repos/ports/src/app/gdb_monitor/gdb_stub_thread.h @@ -27,7 +27,7 @@ namespace Gdb_monitor { enum { GDB_STUB_STACK_SIZE = 4*4096 }; - class Gdb_stub_thread : public Thread + class Gdb_stub_thread : public Thread_deprecated { private: diff --git a/repos/ports/src/app/gdb_monitor/signal_handler_thread.cc b/repos/ports/src/app/gdb_monitor/signal_handler_thread.cc index 0c15fa5eff..5e8af7b656 100644 --- a/repos/ports/src/app/gdb_monitor/signal_handler_thread.cc +++ b/repos/ports/src/app/gdb_monitor/signal_handler_thread.cc @@ -28,7 +28,7 @@ static bool const verbose = false; Signal_handler_thread::Signal_handler_thread(Signal_receiver *receiver) : - Thread<2*4096>("sig_handler"), + Thread_deprecated<2*4096>("sig_handler"), _signal_receiver(receiver) { if (pipe(_pipefd)) diff --git a/repos/ports/src/app/gdb_monitor/signal_handler_thread.h b/repos/ports/src/app/gdb_monitor/signal_handler_thread.h index bea23a366e..247085b88f 100644 --- a/repos/ports/src/app/gdb_monitor/signal_handler_thread.h +++ b/repos/ports/src/app/gdb_monitor/signal_handler_thread.h @@ -21,7 +21,7 @@ using namespace Genode; namespace Gdb_monitor { - class Signal_handler_thread : public Thread<2*4096> + class Signal_handler_thread : public Thread_deprecated<2*4096> { private: diff --git a/repos/ports/src/app/netperf/timer.cc b/repos/ports/src/app/netperf/timer.cc index d9e354994f..d2faae9bdb 100644 --- a/repos/ports/src/app/netperf/timer.cc +++ b/repos/ports/src/app/netperf/timer.cc @@ -18,7 +18,7 @@ using namespace Genode; -class Alarm_thread : Thread<4096>, public Alarm_scheduler +class Alarm_thread : Thread_deprecated<4096>, public Alarm_scheduler { private: @@ -44,7 +44,7 @@ class Alarm_thread : Thread<4096>, public Alarm_scheduler /** * Constructor */ - Alarm_thread(): Thread("netperf_alarm"), _curr_time(0) { start(); } + Alarm_thread(): Thread_deprecated("netperf_alarm"), _curr_time(0) { start(); } Alarm::Time curr_time() { return _curr_time; } }; diff --git a/repos/ports/src/app/openvpn/main.cc b/repos/ports/src/app/openvpn/main.cc index aeb03e02a3..ff6a92244d 100644 --- a/repos/ports/src/app/openvpn/main.cc +++ b/repos/ports/src/app/openvpn/main.cc @@ -42,7 +42,7 @@ extern int genode_argc; extern "C" int openvpn_main(int, char*[]); -class Openvpn_thread : public Genode::Thread<16UL * 1024 * sizeof (long)> +class Openvpn_thread : public Genode::Thread_deprecated<16UL * 1024 * sizeof (long)> { private: @@ -54,7 +54,7 @@ class Openvpn_thread : public Genode::Thread<16UL * 1024 * sizeof (long)> Openvpn_thread(int argc, char *argv[]) : - Thread("openvpn_main"), + Thread_deprecated("openvpn_main"), _argc(argc), _argv(argv), _exitcode(-1) { diff --git a/repos/ports/src/app/seoul/console.cc b/repos/ports/src/app/seoul/console.cc index ee85eb0ded..3839bd1ccb 100644 --- a/repos/ports/src/app/seoul/console.cc +++ b/repos/ports/src/app/seoul/console.cc @@ -372,7 +372,7 @@ Vancouver_console::Vancouver_console(Synced_motherboard &mb, Genode::size_t vm_fb_size, Genode::Dataspace_capability fb_ds) : - Thread("vmm_console"), + Thread_deprecated("vmm_console"), _startup_lock(Genode::Lock::LOCKED), _motherboard(mb), _pixels(0), _guest_fb(0), _fb_size(0), _fb_ds(fb_ds), _vm_fb_size(vm_fb_size), _regs(0), diff --git a/repos/ports/src/app/seoul/console.h b/repos/ports/src/app/seoul/console.h index 0bf18a9f81..16705b8d5c 100644 --- a/repos/ports/src/app/seoul/console.h +++ b/repos/ports/src/app/seoul/console.h @@ -37,9 +37,9 @@ #include using Genode::List; -using Genode::Thread; +using Genode::Thread_deprecated; -class Vancouver_console : public Thread<8192>, public StaticReceiver +class Vancouver_console : public Thread_deprecated<8192>, public StaticReceiver { private: diff --git a/repos/ports/src/app/seoul/disk.cc b/repos/ports/src/app/seoul/disk.cc index 0c04cd4dd6..256a1f6dc6 100644 --- a/repos/ports/src/app/seoul/disk.cc +++ b/repos/ports/src/app/seoul/disk.cc @@ -66,7 +66,7 @@ Vancouver_disk::Vancouver_disk(Synced_motherboard &mb, char * backing_store_base, Genode::size_t backing_store_size) : - Thread("vmm_disk"), + Thread_deprecated("vmm_disk"), _motherboard(mb), _backing_store_base(backing_store_base), _backing_store_size(backing_store_size), diff --git a/repos/ports/src/app/seoul/disk.h b/repos/ports/src/app/seoul/disk.h index 8b03739cc9..66cfc80a01 100644 --- a/repos/ports/src/app/seoul/disk.h +++ b/repos/ports/src/app/seoul/disk.h @@ -54,7 +54,7 @@ class Vancouver_disk_signal : public Genode::Signal_dispatcher }; -class Vancouver_disk : public Genode::Thread<8192>, public StaticReceiver +class Vancouver_disk : public Genode::Thread_deprecated<8192>, public StaticReceiver { private: diff --git a/repos/ports/src/app/seoul/main.cc b/repos/ports/src/app/seoul/main.cc index 9070b29494..0b3dfe2622 100644 --- a/repos/ports/src/app/seoul/main.cc +++ b/repos/ports/src/app/seoul/main.cc @@ -90,13 +90,13 @@ Genode::Lock *utcb_lock() /* timer service */ -using Genode::Thread; +using Genode::Thread_deprecated; using Genode::Alarm_scheduler; using Genode::Alarm; typedef Genode::Synced_interface > Synced_timeout_list; -class Alarm_thread : Thread<4096>, public Alarm_scheduler +class Alarm_thread : Thread_deprecated<4096>, public Alarm_scheduler { private: @@ -135,7 +135,7 @@ class Alarm_thread : Thread<4096>, public Alarm_scheduler * Constructor */ Alarm_thread(Synced_motherboard &mb, Synced_timeout_list &timeouts) - : Thread("alarm"), _curr_time(0), _motherboard(mb), _timeouts(timeouts) + : Thread_deprecated("alarm"), _curr_time(0), _motherboard(mb), _timeouts(timeouts) { start(); } Alarm::Time curr_time() { return _curr_time; } @@ -253,7 +253,7 @@ class Guest_memory }; -typedef Vmm::Vcpu_dispatcher Vcpu_handler; +typedef Vmm::Vcpu_dispatcher Vcpu_handler; class Vcpu_dispatcher : public Vcpu_handler, public StaticReceiver @@ -283,7 +283,7 @@ class Vcpu_dispatcher : public Vcpu_handler, ***************/ static ::Utcb *_utcb_of_myself() { - return (::Utcb *)Genode::Thread_base::myself()->utcb(); } + return (::Utcb *)Genode::Thread::myself()->utcb(); } /*********************************** @@ -1149,7 +1149,7 @@ class Machine : public StaticReceiver Genode::Lock::Guard guard(*utcb_lock()); Vmm::Utcb_guard utcb_guard(utcb_backup); - utcb_backup = *(Utcb_backup *)Genode::Thread_base::myself()->utcb(); + utcb_backup = *(Utcb_backup *)Genode::Thread::myself()->utcb(); if (!_rtc) { try { @@ -1158,7 +1158,7 @@ class Machine : public StaticReceiver Logging::printf("No RTC present, returning dummy time.\n"); msg.wallclocktime = msg.timestamp = 0; - *(Utcb_backup *)Genode::Thread_base::myself()->utcb() = utcb_backup; + *(Utcb_backup *)Genode::Thread::myself()->utcb() = utcb_backup; return true; } @@ -1172,7 +1172,7 @@ class Machine : public StaticReceiver Logging::printf("Got time %llx\n", msg.wallclocktime); msg.timestamp = _unsynchronized_motherboard.clock()->clock(MessageTime::FREQUENCY); - *(Utcb_backup *)Genode::Thread_base::myself()->utcb() = utcb_backup; + *(Utcb_backup *)Genode::Thread::myself()->utcb() = utcb_backup; return true; } @@ -1419,7 +1419,7 @@ int main(int argc, char **argv) * with the actual VM size which is determined below inside this scope. */ Vmm::Virtual_reservation - reservation(Genode::Thread_base::stack_area_virtual_base()); + reservation(Genode::Thread::stack_area_virtual_base()); Genode::printf("--- Vancouver VMM starting ---\n"); @@ -1473,9 +1473,9 @@ int main(int argc, char **argv) fb_size / 1024 / 1024); Genode::printf("[0x%012lx, 0x%012lx) - Genode stack area\n", - Genode::Thread_base::stack_area_virtual_base(), - Genode::Thread_base::stack_area_virtual_base() + - Genode::Thread_base::stack_area_virtual_size()); + Genode::Thread::stack_area_virtual_base(), + Genode::Thread::stack_area_virtual_base() + + Genode::Thread::stack_area_virtual_size()); Genode::printf("[0x%012lx, 0x%012lx) - VMM program image\n", (Genode::addr_t)&_prog_img_beg, diff --git a/repos/ports/src/app/seoul/network.cc b/repos/ports/src/app/seoul/network.cc index ded3b3a960..1d3b9f617b 100644 --- a/repos/ports/src/app/seoul/network.cc +++ b/repos/ports/src/app/seoul/network.cc @@ -25,7 +25,7 @@ extern const void * _forward_pkt; Vancouver_network::Vancouver_network(Synced_motherboard &mb, Nic::Session *nic) -: Thread("vmm_network"), _motherboard(mb), _nic(nic) +: Thread_deprecated("vmm_network"), _motherboard(mb), _nic(nic) { start(); } diff --git a/repos/ports/src/app/seoul/network.h b/repos/ports/src/app/seoul/network.h index 42a97e67b8..83aab368ea 100644 --- a/repos/ports/src/app/seoul/network.h +++ b/repos/ports/src/app/seoul/network.h @@ -28,9 +28,9 @@ #include "synced_motherboard.h" using Genode::List; -using Genode::Thread; +using Genode::Thread_deprecated; -class Vancouver_network : public Thread<4096> +class Vancouver_network : public Thread_deprecated<4096> { private: diff --git a/repos/ports/src/app/seoul/nova_user_env.cc b/repos/ports/src/app/seoul/nova_user_env.cc index 48009790c0..d863f87681 100644 --- a/repos/ports/src/app/seoul/nova_user_env.cc +++ b/repos/ports/src/app/seoul/nova_user_env.cc @@ -46,12 +46,12 @@ void Logging::printf(const char *format, ...) Genode::Lock::Guard guard(*printf_lock()); - utcb_backup = *(Utcb_backup *)Genode::Thread_base::myself()->utcb(); + utcb_backup = *(Utcb_backup *)Genode::Thread::myself()->utcb(); Genode::printf("VMM: "); Genode::vprintf(format, list); - *(Utcb_backup *)Genode::Thread_base::myself()->utcb() = utcb_backup; + *(Utcb_backup *)Genode::Thread::myself()->utcb() = utcb_backup; va_end(list); } @@ -61,13 +61,13 @@ void Logging::vprintf(const char *format, va_list &ap) { Genode::Lock::Guard guard(*printf_lock()); - utcb_backup = *(Utcb_backup *)Genode::Thread_base::myself()->utcb(); + utcb_backup = *(Utcb_backup *)Genode::Thread::myself()->utcb(); Genode::printf("VMM: "); Genode::printf(format); PWRN("Logging::vprintf not implemented"); - *(Utcb_backup *)Genode::Thread_base::myself()->utcb() = utcb_backup; + *(Utcb_backup *)Genode::Thread::myself()->utcb() = utcb_backup; } diff --git a/repos/ports/src/lib/libc_noux/plugin.cc b/repos/ports/src/lib/libc_noux/plugin.cc index 18e3783b58..dcc05ba610 100644 --- a/repos/ports/src/lib/libc_noux/plugin.cc +++ b/repos/ports/src/lib/libc_noux/plugin.cc @@ -297,7 +297,7 @@ extern "C" int getrlimit(int resource, struct rlimit *rlim) { using namespace Genode; - Thread_base * me = Thread_base::myself(); + Thread * me = Thread::myself(); if (!me) break; @@ -2287,7 +2287,7 @@ void init_libc_noux(void) * Genodes core/main.cc with GCC in Noux. */ enum { STACK_SIZE = 32UL * 1024 * sizeof(Genode::addr_t) }; - Genode::Thread_base::myself()->stack_size(STACK_SIZE); + Genode::Thread::myself()->stack_size(STACK_SIZE); } diff --git a/repos/ports/src/noux/cpu_session_component.h b/repos/ports/src/noux/cpu_session_component.h index da62f6beb3..e25c9d076d 100644 --- a/repos/ports/src/noux/cpu_session_component.h +++ b/repos/ports/src/noux/cpu_session_component.h @@ -80,8 +80,9 @@ namespace Noux { ***************************/ Thread_capability create_thread(Capability, - size_t weight, Name const &name, + Name const &name, Affinity::Location affinity, + Weight weight, addr_t utcb) override { /* create thread at core, keep local copy (needed on NOVA) */ @@ -95,7 +96,7 @@ namespace Noux { * core PD. */ Thread_capability cap = - _cpu.create_thread(_core_pd, weight, name, affinity, utcb); + _cpu.create_thread(_core_pd, name, affinity, weight, utcb); _threads[i] = cap; return cap; diff --git a/repos/ports/src/noux/main.cc b/repos/ports/src/noux/main.cc index 89af7e6c2d..1a90519751 100644 --- a/repos/ports/src/noux/main.cc +++ b/repos/ports/src/noux/main.cc @@ -66,7 +66,7 @@ extern void init_network(); namespace Noux { using namespace Genode; - class Timeout_scheduler : Thread<4096>, public Alarm_scheduler + class Timeout_scheduler : Thread_deprecated<4096>, public Alarm_scheduler { private: Timer::Connection _timer; @@ -85,7 +85,7 @@ namespace Noux { public: Timeout_scheduler(unsigned long curr_time) - : Thread("timeout_sched"), _curr_time(curr_time) { start(); } + : Thread_deprecated("timeout_sched"), _curr_time(curr_time) { start(); } Alarm::Time curr_time() const { return _curr_time; } }; diff --git a/repos/ports/src/test/gdb_monitor/main.cc b/repos/ports/src/test/gdb_monitor/main.cc index 06a0ea7f80..2f36849aa5 100644 --- a/repos/ports/src/test/gdb_monitor/main.cc +++ b/repos/ports/src/test/gdb_monitor/main.cc @@ -23,11 +23,11 @@ int test_var = 1; /* a thread to test GDB thread switching support */ -class Test_thread : public Genode::Thread<2*4096> +class Test_thread : public Genode::Thread_deprecated<2*4096> { public: - Test_thread() : Thread("test") { } + Test_thread() : Thread_deprecated("test") { } void func() { diff --git a/repos/ports/src/test/vmm_utils/main.cc b/repos/ports/src/test/vmm_utils/main.cc index 9ec3d53e90..0bcbbfbfbc 100644 --- a/repos/ports/src/test/vmm_utils/main.cc +++ b/repos/ports/src/test/vmm_utils/main.cc @@ -24,7 +24,7 @@ using Genode::printf; using Genode::sleep_forever; -class Vcpu_dispatcher : public Vmm::Vcpu_dispatcher +class Vcpu_dispatcher : public Vmm::Vcpu_dispatcher { private: @@ -60,7 +60,7 @@ class Vcpu_dispatcher : public Vmm::Vcpu_dispatcher Vcpu_dispatcher(Cap_connection &cap, Type type) : - Vmm::Vcpu_dispatcher(STACK_SIZE, cap, Genode::env()->cpu_session(), Genode::Affinity::Location()), + Vmm::Vcpu_dispatcher(STACK_SIZE, cap, Genode::env()->cpu_session(), Genode::Affinity::Location()), _vcpu_thread(STACK_SIZE, Genode::env()->cpu_session(), Genode::Affinity::Location()) { using namespace Nova; diff --git a/repos/ports/src/virtualbox/libc.cc b/repos/ports/src/virtualbox/libc.cc index 0c8b3d1cc8..c94c31e320 100644 --- a/repos/ports/src/virtualbox/libc.cc +++ b/repos/ports/src/virtualbox/libc.cc @@ -154,7 +154,7 @@ extern "C" int nanosleep(const struct timespec *req, struct timespec *rem) /* if (req) { // && req->tv_sec == 0 && req->tv_nsec <= 10 *1000000) { char _name[64]; - Genode::Thread_base::myself()->name(_name, sizeof(_name)); + Genode::Thread::myself()->name(_name, sizeof(_name)); PERR("%zd:%ld s:ns rip %p '%s'", req->tv_sec, req->tv_nsec, __builtin_return_address(0), _name); } diff --git a/repos/ports/src/virtualbox/spec/nova/sup.cc b/repos/ports/src/virtualbox/spec/nova/sup.cc index 073c0f696c..3d39637366 100644 --- a/repos/ports/src/virtualbox/spec/nova/sup.cc +++ b/repos/ports/src/virtualbox/spec/nova/sup.cc @@ -197,7 +197,7 @@ void genode_update_tsc(void (*update_func)(void), unsigned long update_us) enum { TSC_FACTOR = 1000ULL }; - Genode::addr_t sem = Thread_base::myself()->native_thread().exc_pt_sel + Nova::SM_SEL_EC; + Genode::addr_t sem = Thread::myself()->native_thread().exc_pt_sel + Nova::SM_SEL_EC; unsigned long tsc_khz = (genode_cpu_hz() / 1000) / TSC_FACTOR; Trace::Timestamp us_64 = update_us; @@ -251,7 +251,7 @@ extern "C" void pthread_yield(void) { /* char _name[64]; - Genode::Thread_base::myself()->name(_name, sizeof(_name)); + Genode::Thread::myself()->name(_name, sizeof(_name)); PERR("pthread_yield %p - '%s'", __builtin_return_address(0), _name); Assert(!"pthread_yield called"); */ diff --git a/repos/ports/src/virtualbox/spec/nova/vcpu.h b/repos/ports/src/virtualbox/spec/nova/vcpu.h index 3bdbc01015..fc269ca501 100644 --- a/repos/ports/src/virtualbox/spec/nova/vcpu.h +++ b/repos/ports/src/virtualbox/spec/nova/vcpu.h @@ -154,7 +154,7 @@ class Vcpu_handler : public Vmm::Vcpu_dispatcher, __attribute__((noreturn)) void _default_handler() { - Nova::Utcb * utcb = reinterpret_cast(Thread_base::utcb()); + Nova::Utcb * utcb = reinterpret_cast(Thread::utcb()); Assert(utcb->actv_state == ACTIVITY_STATE_ACTIVE); Assert(!(utcb->inj_info & IRQ_INJ_VALID_MASK)); @@ -165,7 +165,7 @@ class Vcpu_handler : public Vmm::Vcpu_dispatcher, __attribute__((noreturn)) void _recall_handler() { - Nova::Utcb * utcb = reinterpret_cast(Thread_base::utcb()); + Nova::Utcb * utcb = reinterpret_cast(Thread::utcb()); Assert(utcb->actv_state == ACTIVITY_STATE_ACTIVE); @@ -218,7 +218,7 @@ class Vcpu_handler : public Vmm::Vcpu_dispatcher, template __attribute__((noreturn)) inline - void _exc_memory(Genode::Thread_base * myself, Nova::Utcb * utcb, + void _exc_memory(Genode::Thread * myself, Nova::Utcb * utcb, bool unmap, Genode::addr_t reason) { using namespace Nova; @@ -548,7 +548,7 @@ class Vcpu_handler : public Vmm::Vcpu_dispatcher, __attribute__((noreturn)) void _irq_window() { - Nova::Utcb * utcb = reinterpret_cast(Thread_base::utcb()); + Nova::Utcb * utcb = reinterpret_cast(Thread::utcb()); PVMCPU pVCpu = _current_vcpu; @@ -836,9 +836,9 @@ class Vcpu_handler : public Vmm::Vcpu_dispatcher, PVMCPU pVCpu = &pVM->aCpus[_cpu_id]; PCPUMCTX pCtx = CPUMQueryGuestCtxPtr(pVCpu); - Nova::Utcb *utcb = reinterpret_cast(Thread_base::utcb()); + Nova::Utcb *utcb = reinterpret_cast(Thread::utcb()); - Assert(Thread_base::utcb() == Thread_base::myself()->utcb()); + Assert(Thread::utcb() == Thread::myself()->utcb()); /* take the utcb state prepared during the last exit */ utcb->mtd = next_utcb.mtd; diff --git a/repos/ports/src/virtualbox/spec/nova/vcpu_svm.h b/repos/ports/src/virtualbox/spec/nova/vcpu_svm.h index 405b6d3cdf..f0883b9237 100644 --- a/repos/ports/src/virtualbox/spec/nova/vcpu_svm.h +++ b/repos/ports/src/virtualbox/spec/nova/vcpu_svm.h @@ -31,7 +31,7 @@ class Vcpu_handler_svm : public Vcpu_handler using namespace Nova; using namespace Genode; - Thread_base *myself = Thread_base::myself(); + Thread *myself = Thread::myself(); Utcb *utcb = reinterpret_cast(myself->utcb()); if (utcb->qual[0] & 0x4) { @@ -55,7 +55,7 @@ class Vcpu_handler_svm : public Vcpu_handler using namespace Nova; using namespace Genode; - Thread_base *myself = Thread_base::myself(); + Thread *myself = Thread::myself(); Utcb *utcb = reinterpret_cast(myself->utcb()); _exc_memory(myself, utcb, utcb->qual[0] & 1, diff --git a/repos/ports/src/virtualbox/spec/nova/vcpu_vmx.h b/repos/ports/src/virtualbox/spec/nova/vcpu_vmx.h index 7c1d99b4bd..ea899f3624 100644 --- a/repos/ports/src/virtualbox/spec/nova/vcpu_vmx.h +++ b/repos/ports/src/virtualbox/spec/nova/vcpu_vmx.h @@ -38,7 +38,7 @@ class Vcpu_handler_vmx : public Vcpu_handler using namespace Nova; using namespace Genode; - Thread_base *myself = Thread_base::myself(); + Thread *myself = Thread::myself(); Utcb *utcb = reinterpret_cast(myself->utcb()); _exc_memory(myself, utcb, utcb->qual[0] & 0x38, @@ -51,7 +51,7 @@ class Vcpu_handler_vmx : public Vcpu_handler { using namespace Nova; - Genode::Thread_base *myself = Genode::Thread_base::myself(); + Genode::Thread *myself = Genode::Thread::myself(); Utcb *utcb = reinterpret_cast(myself->utcb()); /* configure VM exits to get */ @@ -104,7 +104,7 @@ class Vcpu_handler_vmx : public Vcpu_handler __attribute__((noreturn)) void _vmx_invalid() { - Genode::Thread_base *myself = Genode::Thread_base::myself(); + Genode::Thread *myself = Genode::Thread::myself(); Nova::Utcb *utcb = reinterpret_cast(myself->utcb()); unsigned const dubious = utcb->inj_info | @@ -132,7 +132,7 @@ class Vcpu_handler_vmx : public Vcpu_handler unsigned long value; void *stack_reply = reinterpret_cast(&value - 1); - Genode::Thread_base *myself = Genode::Thread_base::myself(); + Genode::Thread *myself = Genode::Thread::myself(); Nova::Utcb *utcb = reinterpret_cast(myself->utcb()); unsigned int cr = utcb->qual[0] & 0xf; diff --git a/repos/ports/src/virtualbox/sup.cc b/repos/ports/src/virtualbox/sup.cc index 96044a1f6a..59e60a4252 100644 --- a/repos/ports/src/virtualbox/sup.cc +++ b/repos/ports/src/virtualbox/sup.cc @@ -48,9 +48,9 @@ enum { PSUPGLOBALINFOPAGE g_pSUPGlobalInfoPage; -struct Periodic_gip : public Genode::Thread<4096> +struct Periodic_gip : public Genode::Thread_deprecated<4096> { - Periodic_gip() : Thread("periodic_gip") { start(); } + Periodic_gip() : Thread_deprecated("periodic_gip") { start(); } static void update() { diff --git a/repos/ports/src/virtualbox/thread.cc b/repos/ports/src/virtualbox/thread.cc index 25d62ed46f..499b5015ed 100644 --- a/repos/ports/src/virtualbox/thread.cc +++ b/repos/ports/src/virtualbox/thread.cc @@ -70,7 +70,7 @@ static int create_thread(pthread_t *thread, const pthread_attr_t *attr, size_t const utcb_size = 4096; - size_t stack_size = Genode::Thread_base::stack_virtual_size() - + size_t stack_size = Genode::Thread::stack_virtual_size() - utcb_size - 2 * (1UL << 12); if (rtthread->cbStack < stack_size)