> 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

Reply via email to