In systemtap (<http://sourceware.org/systemtap/>), we're using utrace to
be able to put systemtap probes in arbitrary threads.  Internally, there
are two fairly separate and distinct layers, each using utrace on the
same thread.

This has worked well.  However, I'm having trouble when each layer
requests UTRACE_ACTION_QUIESCE.

The upper layer does:

utrace_set_flags(tsk, engine, UTRACE_ACTION_QUIESCE|UTRACE_EVENT(QUIESCE));

Then, in the .report_quiesce handler, it does its processing and returns
UTRACE_ACTION_DETACH.  The upper layer is working correctly.

The lower layer does:

utrace_set_flags(tsk, engine,
UTRACE_ACTION_QUIESCE|UTRACE_EVENT(QUIESCE)|UTRACE_EVENT(DEATH));

After the lower layer's .report_quiesce handler is called, I'd like to
turn off quiesce handling for this engine and leave on
UTRACE_EVENT(DEATH) handling.  I've tried various combinations of return
values and calling utrace_set_flags() in the .report_quiesce handler,
but this handler always seems to get called twice (when the upper layer
also does a UTRACE_ACTION_QUIESCE).

So, what does the lower layer need to do to correctly turn off quiesce
handling for the engine in this case?  Note that both layer's engines
get installed on the thread in the same callback.

Thanks for the help.

-- 
David Smith
[EMAIL PROTECTED]
Red Hat
http://www.redhat.com
256.217.0141 (direct)
256.837.0057 (fax)

Reply via email to