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