From 8d1e40eb5ba67a48f1227fe1d2e56e1726cf73c5 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Thu, 27 Mar 2014 12:20:55 +0100 Subject: [PATCH] hw: remove Ipc_node::_await_ipc ref #1108 --- base-hw/src/core/kernel/ipc_node.h | 14 +++++--------- base-hw/src/core/kernel/thread.cc | 20 ++++---------------- base-hw/src/core/kernel/thread.h | 1 - 3 files changed, 9 insertions(+), 26 deletions(-) diff --git a/base-hw/src/core/kernel/ipc_node.h b/base-hw/src/core/kernel/ipc_node.h index 9f3d2c50b..81cee563f 100644 --- a/base-hw/src/core/kernel/ipc_node.h +++ b/base-hw/src/core/kernel/ipc_node.h @@ -186,11 +186,6 @@ class Kernel::Ipc_node */ virtual void _received_ipc_request(size_t const s) = 0; - /** - * IPC node started waiting for message receipt - */ - virtual void _await_ipc() = 0; - /** * IPC node returned from waiting due to message receipt * @@ -256,7 +251,6 @@ class Kernel::Ipc_node /* update state */ if (_state != PREPARE_REPLY) { _state = AWAIT_REPLY; } else { _state = PREPARE_AND_AWAIT_REPLY; } - _await_ipc(); /* announce request */ dst->_announce_request(&_outbuf); @@ -267,8 +261,10 @@ class Kernel::Ipc_node * * \param inbuf_base base of the request buffer * \param inbuf_size size of the request buffer + * + * \return wether a request could be received already */ - void await_request(void * const inbuf_base, + bool await_request(void * const inbuf_base, size_t const inbuf_size) { /* assertions */ @@ -283,11 +279,11 @@ class Kernel::Ipc_node if (!_request_queue.empty()) { _receive_request(_request_queue.dequeue()); _received_ipc_request(_inbuf.size); - return; + return true; } /* no request announced, so wait */ _state = AWAIT_REQUEST; - _await_ipc(); + return false; } /** diff --git a/base-hw/src/core/kernel/thread.cc b/base-hw/src/core/kernel/thread.cc index 88deeb9d6..e10867d0d 100644 --- a/base-hw/src/core/kernel/thread.cc +++ b/base-hw/src/core/kernel/thread.cc @@ -85,20 +85,6 @@ void Thread::_received_ipc_request(size_t const s) } -void Thread::_await_ipc() -{ - switch (_state) { - case SCHEDULED: - _unschedule(AWAITS_IPC); - return; - default: - PWRN("wrong thread state to await IPC"); - _stop(); - return; - } -} - - void Thread::_await_ipc_succeeded(size_t const s) { switch (_state) { @@ -432,7 +418,8 @@ void Thread::_call_await_request_msg() void * buf_base; size_t buf_size; _utcb_phys->message()->info_about_await_request(buf_base, buf_size); - Ipc_node::await_request(buf_base, buf_size); + if (Ipc_node::await_request(buf_base, buf_size)) { return; } + _unschedule(AWAITS_IPC); } @@ -441,7 +428,7 @@ void Thread::_call_send_request_msg() Thread * const dst = Thread::pool()->object(user_arg_1()); if (!dst) { PWRN("unknown recipient"); - _await_ipc(); + _unschedule(AWAITS_IPC); return; } void * msg_base; @@ -452,6 +439,7 @@ void Thread::_call_send_request_msg() buf_base, buf_size); Ipc_node::send_request_await_reply(dst, msg_base, msg_size, buf_base, buf_size); + _unschedule(AWAITS_IPC); } diff --git a/base-hw/src/core/kernel/thread.h b/base-hw/src/core/kernel/thread.h index b88c02e75..84d9edced 100644 --- a/base-hw/src/core/kernel/thread.h +++ b/base-hw/src/core/kernel/thread.h @@ -281,7 +281,6 @@ class Kernel::Thread **************/ void _received_ipc_request(size_t const s); - void _await_ipc(); void _await_ipc_succeeded(size_t const s); void _await_ipc_failed();