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.

Reply via email to