From 9f95784f028e0b10d251f7a3d6c0768e7fa3ce7f Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Fri, 4 Apr 2014 13:41:04 +0200 Subject: [PATCH] hw: diversify feedback from IPC node to thread ref #1108 --- base-hw/src/core/kernel/ipc_node.h | 30 ++++++++++++------- base-hw/src/core/kernel/thread.cc | 46 ++++++++++++++++-------------- base-hw/src/core/kernel/thread.h | 6 ++-- 3 files changed, 48 insertions(+), 34 deletions(-) diff --git a/base-hw/src/core/kernel/ipc_node.h b/base-hw/src/core/kernel/ipc_node.h index cb623ce04..2d1bcbd86 100644 --- a/base-hw/src/core/kernel/ipc_node.h +++ b/base-hw/src/core/kernel/ipc_node.h @@ -104,7 +104,7 @@ class Kernel::Ipc_node /* update state */ if (_state != PREPARE_AND_AWAIT_REPLY) { _state = INACTIVE; } else { _state = PREPARE_REPLY; } - _await_ipc_succeeded(); + _send_request_succeeded(); } /** @@ -115,7 +115,7 @@ class Kernel::Ipc_node /* directly receive request if we've awaited it */ if (_state == AWAIT_REQUEST) { _receive_request(r); - _await_ipc_succeeded(); + _await_request_succeeded(); return; } /* cannot receive yet, so queue request */ @@ -177,19 +177,29 @@ class Kernel::Ipc_node _outbuf_dst = 0; if (!_inbuf.src) { _state = INACTIVE; } else { _state = PREPARE_REPLY; } - _await_ipc_failed(); + _send_request_failed(); } } /** - * IPC node returned from waiting due to message receipt + * IPC node returned from waiting due to reply receipt */ - virtual void _await_ipc_succeeded() = 0; + virtual void _send_request_succeeded() = 0; /** - * IPC node returned from waiting due to cancellation + * IPC node returned from waiting due to reply cancellation */ - virtual void _await_ipc_failed() = 0; + virtual void _send_request_failed() = 0; + + /** + * IPC node returned from waiting due to request receipt + */ + virtual void _await_request_succeeded() = 0; + + /** + * IPC node returned from waiting due to request cancellation + */ + virtual void _await_request_failed() = 0; protected: @@ -312,16 +322,16 @@ class Kernel::Ipc_node case AWAIT_REPLY: _cancel_outbuf_request(); _state = INACTIVE; - _await_ipc_failed(); + _send_request_failed(); return; case AWAIT_REQUEST: _state = INACTIVE; - _await_ipc_failed(); + _await_request_failed(); return; case PREPARE_AND_AWAIT_REPLY: _cancel_outbuf_request(); _state = PREPARE_REPLY; - _await_ipc_failed(); + _send_request_failed(); return; default: return; } diff --git a/base-hw/src/core/kernel/thread.cc b/base-hw/src/core/kernel/thread.cc index 17d616a97..b0a12cd11 100644 --- a/base-hw/src/core/kernel/thread.cc +++ b/base-hw/src/core/kernel/thread.cc @@ -71,33 +71,35 @@ void Thread::_receive_signal(void * const base, size_t const size) } -void Thread::_await_ipc_succeeded() +void Thread::_send_request_succeeded() { - switch (_state) { - case AWAITS_IPC: - user_arg_0(0); - _schedule(); - return; - default: - PWRN("wrong thread state to receive IPC"); - _stop(); - return; - } + assert(_state == AWAITS_IPC); + user_arg_0(0); + _schedule(); } -void Thread::_await_ipc_failed() +void Thread::_send_request_failed() { - switch (_state) { - case AWAITS_IPC: - user_arg_0(-1); - _schedule(); - return; - default: - PWRN("wrong thread state to cancel IPC"); - _stop(); - return; - } + assert(_state == AWAITS_IPC); + user_arg_0(-1); + _schedule(); +} + + +void Thread::_await_request_succeeded() +{ + assert(_state == AWAITS_IPC); + user_arg_0(0); + _schedule(); +} + + +void Thread::_await_request_failed() +{ + assert(_state == AWAITS_IPC); + user_arg_0(-1); + _schedule(); } diff --git a/base-hw/src/core/kernel/thread.h b/base-hw/src/core/kernel/thread.h index 9c0a110d8..0874f0e1e 100644 --- a/base-hw/src/core/kernel/thread.h +++ b/base-hw/src/core/kernel/thread.h @@ -280,8 +280,10 @@ class Kernel::Thread ** Ipc_node ** **************/ - void _await_ipc_succeeded(); - void _await_ipc_failed(); + void _send_request_succeeded(); + void _send_request_failed(); + void _await_request_succeeded(); + void _await_request_failed(); public: