From 9affbf33ec478b2963b7ded053d87fd495f5903e Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Wed, 12 Mar 2014 16:23:01 +0100 Subject: [PATCH] hw: make kernel less noisy in release mode In most cases an error report is not necessary in the kernel as the problem does not affect the kernel itself but the according user-land context. Thus we can also do a warning that is not printed in release mode and hence safe execution time. ref #1096 --- base-hw/src/core/kernel/ipc_node.h | 4 +- base-hw/src/core/kernel/irq.h | 8 ++- base-hw/src/core/kernel/kernel.cc | 5 +- base-hw/src/core/kernel/thread.cc | 84 +++++++++++++++--------------- 4 files changed, 52 insertions(+), 49 deletions(-) diff --git a/base-hw/src/core/kernel/ipc_node.h b/base-hw/src/core/kernel/ipc_node.h index ff8bfc9e2..9f3d2c50b 100644 --- a/base-hw/src/core/kernel/ipc_node.h +++ b/base-hw/src/core/kernel/ipc_node.h @@ -72,8 +72,8 @@ class Kernel::Ipc_node { /* FIXME: invalid requests should be discarded */ if (r->size > _inbuf.size) { - PERR("oversized request"); - while (1) { } + PWRN("oversized request"); + r->size = _inbuf.size; } /* fetch message */ Genode::memcpy(_inbuf.base, r->base, r->size); diff --git a/base-hw/src/core/kernel/irq.h b/base-hw/src/core/kernel/irq.h index ec49f73ac..f0e172dea 100644 --- a/base-hw/src/core/kernel/irq.h +++ b/base-hw/src/core/kernel/irq.h @@ -118,7 +118,11 @@ class Kernel::Irq * * By now, there is no use case to destruct user interrupts */ - ~Irq() { PERR("method not implemented"); } + ~Irq() + { + PERR("destruction of interrupts not implemented"); + while (1) { } + } /************************ @@ -153,7 +157,7 @@ class Kernel::Irq { Irq * const irq = _pool()->object(irq_id); if (!irq) { - PERR("unknown interrupt occurred"); + PWRN("unknown interrupt occurred"); return; } irq->_occurred(); diff --git a/base-hw/src/core/kernel/kernel.cc b/base-hw/src/core/kernel/kernel.cc index f5e33dfa7..372e030c0 100644 --- a/base-hw/src/core/kernel/kernel.cc +++ b/base-hw/src/core/kernel/kernel.cc @@ -247,9 +247,8 @@ extern "C" void init_kernel_multiprocessor() STACK_ALIGNM = 1 << Genode::CORE_STACK_ALIGNM_LOG2, STACK_SIZE = DEFAULT_STACK_SIZE, }; - if (STACK_SIZE > STACK_ALIGNM - sizeof(Core_thread_id)) { - PERR("stack size does not fit stack alignment of core"); - } + static_assert(STACK_SIZE <= STACK_ALIGNM - sizeof(Core_thread_id), + "stack size does not fit stack alignment of core"); static char s[STACK_SIZE] __attribute__((aligned(STACK_ALIGNM))); /* provide thread ident at the aligned base of the stack */ diff --git a/base-hw/src/core/kernel/thread.cc b/base-hw/src/core/kernel/thread.cc index d1e06fb59..2d45add6c 100644 --- a/base-hw/src/core/kernel/thread.cc +++ b/base-hw/src/core/kernel/thread.cc @@ -78,7 +78,7 @@ void Thread::_received_ipc_request(size_t const s) user_arg_0(0); return; default: - PERR("wrong thread state to receive IPC"); + PWRN("wrong thread state to receive IPC"); _stop(); return; } @@ -92,7 +92,7 @@ void Thread::_await_ipc() _unschedule(AWAITS_IPC); return; default: - PERR("wrong thread state to await IPC"); + PWRN("wrong thread state to await IPC"); _stop(); return; } @@ -107,7 +107,7 @@ void Thread::_await_ipc_succeeded(size_t const s) _schedule(); return; default: - PERR("wrong thread state to receive IPC"); + PWRN("wrong thread state to receive IPC"); _stop(); return; } @@ -122,7 +122,7 @@ void Thread::_await_ipc_failed() _schedule(); return; default: - PERR("wrong thread state to cancel IPC"); + PWRN("wrong thread state to cancel IPC"); _stop(); return; } @@ -149,7 +149,7 @@ int Thread::_resume() case AWAITS_START: case STOPPED:; } - PERR("failed to resume thread"); + PWRN("failed to resume thread"); return -1; } @@ -245,7 +245,7 @@ void Thread::exception(unsigned const processor_id) case RESET: return; default: - PERR("unknown exception"); + PWRN("unknown exception"); _stop(); } } @@ -254,7 +254,7 @@ void Thread::exception(unsigned const processor_id) void Thread::_receive_yielded_cpu() { if (_state == AWAITS_RESUME) { _schedule(); } - else { PERR("failed to receive yielded CPU"); } + else { PWRN("failed to receive yielded CPU"); } } @@ -276,7 +276,7 @@ void Thread::_call_new_pd() { /* check permissions */ if (!_core()) { - PERR("not entitled to create protection domain"); + PWRN("not entitled to create protection domain"); user_arg_0(0); return; } @@ -293,7 +293,7 @@ void Thread::_call_bin_pd() { /* check permissions */ if (!_core()) { - PERR("not entitled to destruct protection domain"); + PWRN("not entitled to destruct protection domain"); user_arg_0(-1); return; } @@ -301,7 +301,7 @@ void Thread::_call_bin_pd() unsigned id = user_arg_1(); Pd * const pd = Pd::pool()->object(id); if (!pd) { - PERR("unknown protection domain"); + PWRN("unknown protection domain"); user_arg_0(-1); return; } @@ -320,7 +320,7 @@ void Thread::_call_new_thread() { /* check permissions */ if (!_core()) { - PERR("not entitled to create thread"); + PWRN("not entitled to create thread"); user_arg_0(0); return; } @@ -352,7 +352,7 @@ void Thread::_call_start_thread() { /* check permissions */ if (!_core()) { - PERR("permission denied"); + PWRN("permission denied"); user_arg_0(0); return; } @@ -360,7 +360,7 @@ void Thread::_call_start_thread() unsigned const thread_id = user_arg_1(); Thread * const thread = Thread::pool()->object(thread_id); if (!thread) { - PERR("unknown thread"); + PWRN("unknown thread"); user_arg_0(0); return; } @@ -368,7 +368,7 @@ void Thread::_call_start_thread() unsigned const processor_id = user_arg_2(); Processor * const processor = processor_pool()->processor(processor_id); if (!processor) { - PERR("unknown processor"); + PWRN("unknown processor"); user_arg_0(0); return; } @@ -406,13 +406,13 @@ void Thread::_call_resume_thread() /* lookup thread */ Thread * const t = Thread::pool()->object(user_arg_1()); if (!t) { - PERR("unknown thread"); + PWRN("unknown thread"); user_arg_0(-1); return; } /* check permissions */ if (!_core() && pd_id() != t->pd_id()) { - PERR("not entitled to resume thread"); + PWRN("not entitled to resume thread"); user_arg_0(-1); return; } @@ -437,7 +437,7 @@ Thread_event::Thread_event(Thread * const t) void Thread_event::submit() { if (_signal_context && !_signal_context->submit(1)) { return; } - PERR("failed to communicate thread event"); + PWRN("failed to communicate thread event"); } @@ -462,7 +462,7 @@ void Thread::_call_send_request_msg() { Thread * const dst = Thread::pool()->object(user_arg_1()); if (!dst) { - PERR("unknown recipient"); + PWRN("unknown recipient"); _await_ipc(); return; } @@ -493,7 +493,7 @@ void Thread::_call_route_thread_event() { /* check permissions */ if (!_core()) { - PERR("not entitled to route thread event"); + PWRN("not entitled to route thread event"); user_arg_0(-1); return; } @@ -501,7 +501,7 @@ void Thread::_call_route_thread_event() unsigned const thread_id = user_arg_1(); Thread * const t = Thread::pool()->object(thread_id); if (!t) { - PERR("unknown thread"); + PWRN("unknown thread"); user_arg_0(-1); return; } @@ -523,7 +523,7 @@ int Thread::_route_event(unsigned const event_id, if (signal_context_id) { c = Signal_context::pool()->object(signal_context_id); if (!c) { - PERR("unknown signal context"); + PWRN("unknown signal context"); return -1; } } else { c = 0; } @@ -554,7 +554,7 @@ void Thread::_call_access_thread_regs() { /* check permissions */ if (!_core()) { - PERR("not entitled to access thread regs"); + PWRN("not entitled to access thread regs"); user_arg_0(-1); return; } @@ -562,7 +562,7 @@ void Thread::_call_access_thread_regs() unsigned const thread_id = user_arg_1(); Thread * const t = Thread::pool()->object(thread_id); if (!t) { - PERR("unknown thread"); + PWRN("unknown thread"); user_arg_0(-1); return; } @@ -691,7 +691,7 @@ void Thread::_call_new_signal_receiver() { /* check permissions */ if (!_core()) { - PERR("not entitled to create signal receiver"); + PWRN("not entitled to create signal receiver"); user_arg_0(0); return; } @@ -706,7 +706,7 @@ void Thread::_call_new_signal_context() { /* check permissions */ if (!_core()) { - PERR("not entitled to create signal context"); + PWRN("not entitled to create signal context"); user_arg_0(0); return; } @@ -714,7 +714,7 @@ void Thread::_call_new_signal_context() unsigned const id = user_arg_2(); Signal_receiver * const r = Signal_receiver::pool()->object(id); if (!r) { - PERR("unknown signal receiver"); + PWRN("unknown signal receiver"); user_arg_0(0); return; } @@ -733,19 +733,19 @@ void Thread::_call_await_signal() if (context_id) { Signal_context * const c = Signal_context::pool()->object(context_id); if (c) { c->ack(); } - else { PERR("failed to acknowledge signal context"); } + else { PWRN("failed to acknowledge signal context"); } } /* lookup receiver */ unsigned const receiver_id = user_arg_1(); Signal_receiver * const r = Signal_receiver::pool()->object(receiver_id); if (!r) { - PERR("unknown signal receiver"); + PWRN("unknown signal receiver"); user_arg_0(-1); return; } /* register handler at the receiver */ if (r->add_handler(this)) { - PERR("failed to register handler at signal receiver"); + PWRN("failed to register handler at signal receiver"); user_arg_0(-1); return; } @@ -759,7 +759,7 @@ void Thread::_call_signal_pending() unsigned const id = user_arg_1(); Signal_receiver * const r = Signal_receiver::pool()->object(id); if (!r) { - PERR("unknown signal receiver"); + PWRN("unknown signal receiver"); user_arg_0(0); return; } @@ -774,13 +774,13 @@ void Thread::_call_submit_signal() unsigned const id = user_arg_1(); Signal_context * const c = Signal_context::pool()->object(id); if(!c) { - PERR("unknown signal context"); + PWRN("unknown signal context"); user_arg_0(-1); return; } /* trigger signal context */ if (c->submit(user_arg_2())) { - PERR("failed to submit signal context"); + PWRN("failed to submit signal context"); user_arg_0(-1); return; } @@ -794,7 +794,7 @@ void Thread::_call_ack_signal() unsigned const id = user_arg_1(); Signal_context * const c = Signal_context::pool()->object(id); if (!c) { - PERR("unknown signal context"); + PWRN("unknown signal context"); return; } /* acknowledge */ @@ -808,13 +808,13 @@ void Thread::_call_kill_signal_context() unsigned const id = user_arg_1(); Signal_context * const c = Signal_context::pool()->object(id); if (!c) { - PERR("unknown signal context"); + PWRN("unknown signal context"); user_arg_0(-1); return; } /* kill signal context */ if (c->kill(this)) { - PERR("failed to kill signal context"); + PWRN("failed to kill signal context"); user_arg_0(-1); return; } @@ -825,7 +825,7 @@ void Thread::_call_bin_signal_context() { /* check permissions */ if (!_core()) { - PERR("not entitled to kill signal context"); + PWRN("not entitled to kill signal context"); user_arg_0(-1); return; } @@ -833,7 +833,7 @@ void Thread::_call_bin_signal_context() unsigned const id = user_arg_1(); Signal_context * const c = Signal_context::pool()->object(id); if (!c) { - PERR("unknown signal context"); + PWRN("unknown signal context"); user_arg_0(0); return; } @@ -847,7 +847,7 @@ void Thread::_call_bin_signal_receiver() { /* check permissions */ if (!_core()) { - PERR("not entitled to kill signal receiver"); + PWRN("not entitled to kill signal receiver"); user_arg_0(-1); return; } @@ -855,7 +855,7 @@ void Thread::_call_bin_signal_receiver() unsigned const id = user_arg_1(); Signal_receiver * const r = Signal_receiver::pool()->object(id); if (!r) { - PERR("unknown signal receiver"); + PWRN("unknown signal receiver"); user_arg_0(0); return; } @@ -920,7 +920,7 @@ int Thread::_read_reg(addr_t const id, addr_t & value) const value = this->*reg; return 0; } - PERR("unknown thread register"); + PWRN("unknown thread register"); return -1; } @@ -932,7 +932,7 @@ int Thread::_write_reg(addr_t const id, addr_t const value) this->*reg = value; return 0; } - PERR("unknown thread register"); + PWRN("unknown thread register"); return -1; } @@ -969,7 +969,7 @@ void Thread::_call(unsigned const processor_id) case Call_id::ACCESS_THREAD_REGS: _call_access_thread_regs(); return; case Call_id::ROUTE_THREAD_EVENT: _call_route_thread_event(); return; default: - PERR("unknown kernel call"); + PWRN("unknown kernel call"); _stop(); } }