As more and more tracing backends appear (right now: nop, simple, ust
and the new dtrace), it is harder to provide a tracetool where these
backends can be efficiently used without being aware of per-CPU tracing
state.

What I have now is basically:

* trace.h : trace_##name
  Backend-specific declaration/definition of per-event tracing functions

* trace-cpu.h : trace_cpu_##name
  Generic "static inline" definitions of functions that check the
  per-CPU state and (if true) call the corresponding trace_##name

* trace-gen.h: trace_gen_##name
  Generic "static inline" definitions of functions that check the
  per-CPU state and (if true) generate TCG calls to a function
  redirecting the call to trace_##name

The last two are only generated for those events that have the "gen"
keyword in "trace-events".

The point is that the trace_##name functions do an extra check (the one
provided by the backend) that should not be necessary, as the per-CPU
state check already ensures that the trace must be produced.

Thus, I'd propose to provide an extra per-backend function that prodices
the trace without checking the tracing state.

Another important change would be to provide a generic interface inside
QEMU that provides a programmatic control of the tracing state of all
events (both per-cpu and global), and let each backend provide a small
.c file implementing that functionality. This would provide a
centralized point through QEMU monitor for the control of tracing
events, plus any backend-specific control interface that might also be
available.


Lluis

-- 
 "And it's much the same thing with knowledge, for whenever you learn
 something new, the whole world becomes that much richer."
 -- The Princess of Pure Reason, as told by Norton Juster in The Phantom
 Tollbooth

Reply via email to