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.