> ptrace_attach_task: > > engine = utrace_attach_task(CREATE | EXCLUSIVE); > > err = utrace_set_events(); > WARN_ON(err && !tracee->exit_state); > > Looks correct but it is not. utrace_attach_task() can return EINPROGRESS.
utrace_set_events() can, yes. I think the old code just predates utrace_barrier() et al. That can just be: if (err && err != -EINPROGRESS) WARN_ON(!tracee->exit_state); to keep the sanity check. > Note that start_callback/etc sets ->reporting = engine even if we are not > going to call ->report_any(). I'll try to think, perhaps we can change this > code to check engine->flags first... I think the barrier logic in start_callback() won't allow that. > Note that EINPROGRESS can happen even if there are no other tracers. That's fine. It just means "not synchronized yet". I suppose we could make utrace_set_events() skip it when it's not clearing any bits. > But the real problem is, _sometimes_ "make xcheck" triggers this warning, > and I can not understand: > > 1. Why I didn't see it before context->options was added > > 2. I changed utrace_resume() to check QUIESCE. But I still > see the warning! > > Still investigating... I don't have any answers to those off hand. Thanks, Roland