From 827401ee2d46357b53e05c7ff793791f3cfd3010 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Fri, 17 Jan 2025 14:37:22 +0100 Subject: [PATCH] fixup "hw: implement helping of pager threads" (managed ds pf faults) --- repos/base-hw/src/core/kernel/thread.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/repos/base-hw/src/core/kernel/thread.cc b/repos/base-hw/src/core/kernel/thread.cc index b42be9896a..062ffd05c8 100644 --- a/repos/base-hw/src/core/kernel/thread.cc +++ b/repos/base-hw/src/core/kernel/thread.cc @@ -385,6 +385,7 @@ void Thread::_call_restart_thread() _die(); return; } + user_arg_0(thread._restart()); } @@ -392,7 +393,10 @@ void Thread::_call_restart_thread() bool Thread::_restart() { assert(_state == ACTIVE || _state == AWAITS_RESTART); - if (_state != AWAITS_RESTART) { return false; } + + if (_state == ACTIVE && _exception_state == NO_EXCEPTION) + return false; + _exception_state = NO_EXCEPTION; _become_active(); return true; @@ -803,7 +807,8 @@ void Thread::_call_ack_pager_signal() Thread &thread = *(Thread*)user_arg_2(); thread.helping_finished(); - bool resolved = user_arg_3(); + bool resolved = user_arg_3() || + thread._exception_state == NO_EXCEPTION; if (resolved) thread._restart(); else thread._become_inactive(AWAITS_RESTART); }