When utrace_get_signal() is called with interrupt || report || signal_handler, it sets event = 0 and, unless UTRACE_SIGNAL_IGN, does the reporting. However this is meaningless without QUIESCE in ->utrace_flags, list_for_each_entry() will check "want & QUIESCE" anyway.
I noticed this during the testing, sometimes utrace_get_signal() returns signr != 0 even if there are no engines with ->flag != 0. Correct, but imho is not very clear. Signed-off-by: Oleg Nesterov <o...@redhat.com> --- __UTRACE/kernel/utrace.c~8_UGS_CK_QUIESCE 2009-08-26 19:22:02.000000000 +0200 +++ __UTRACE/kernel/utrace.c 2009-08-30 20:45:41.000000000 +0200 @@ -1939,7 +1939,8 @@ int utrace_get_signal(struct task_struct spin_unlock(&utrace->lock); - if (unlikely(report.result == UTRACE_SIGNAL_IGN)) + if (!(task->utrace_flags & UTRACE_EVENT(QUIESCE)) || + unlikely(report.result == UTRACE_SIGNAL_IGN)) /* * We only got here to clear utrace->signal_handler. */