resume from another engine results in loss of singlestep req.
Oleg Nesterov
oleg at redhat.com
Wed Aug 12 15:56:24 UTC 2009
On 08/12, Srikar Dronamraju wrote:
> >
> > Could you show the code please? I don't really understand how it
> > looks with 1+2 above.
> >
>
> I am attaching the code.
> The module code is in try_utrace/probe5_a.c and try_utrace/probe5_b.c.
>
> > But, just in case... I think module_b should re-assert SINGLESTEP
> > from either report_quiesce/report_signal.
>
> Yes I have re-asserted SINGLESTEP.
> I also have printk's in report_quiesce/report_signal to see if
> report_quiesce/report_signal in probe5_b are called after we do
> utrace_control(.,,UTRACE_RESUME/UTRACE_DETACH).
>
> However those callbacks dont seem to be called again.
Aaaaaaahhh. Srikar, I spent 3 hours trying to understand....
Your code does NOT reassert SINGLESTEP. Of course, ->report_signal
is not called again, utrace_get_signal() just clears ->report when
it is called after wakeup.
Because you forgot to add QUIESCE to utrace_set_events's mask !!!
This means:
1. ->report_quiesce() is never called
2. utrace_get_signal() won't call ->report_signal()
utrace_get_signal:
if (... || utrace->report || ...) {
...
utrace->report = 0;
event = 0;
}
...
list_for_each_entry(engine, &utrace->attached, entry) {
...
if ((want & (event | UTRACE_EVENT(QUIESCE))) == 0)
continue;
...
ops->report_signal(...);
}
Oleg.
More information about the utrace-devel
mailing list