The intent is that if you asked for UTRACE_SINGLESTEP (or anything else but plain UTRACE_RESUME), you should be guaranteed another callback after a stop and resumption, i.e. after any time that the resume action you asked for was implicitly lost.
Perhaps the following patch fixes it? Thanks, Roland diff --git a/kernel/utrace.c b/kernel/utrace.c index 954f9fe..0000000 100644 --- a/kernel/utrace.c +++ b/kernel/utrace.c @@ -1348,7 +1348,13 @@ static bool finish_callback(struct utrac spin_unlock(&utrace->lock); } } else { - if (action == UTRACE_REPORT) + /* + * If this engine asked for any particular resume + * action other than UTRACE_STOP, make sure it gets + * another callback on resumption in case another + * engine has us stop in this round. + */ + if (action < UTRACE_RESUME) report->reports = true; if (engine_wants_stop(engine)) {