• Steven Rostedt (Red Hat)'s avatar
    tracing: Add internal tracing_snapshot() functions · ad909e21
    Steven Rostedt (Red Hat) authored
    The new snapshot feature is quite handy. It's a way for the user
    to take advantage of the spare buffer that, until then, only
    the latency tracers used to "snapshot" the buffer when it hit
    a max latency. Now users can trigger a "snapshot" manually when
    some condition is hit in a program. But a snapshot currently can
    not be triggered by a condition inside the kernel.
    
    With the addition of tracing_snapshot() and tracing_snapshot_alloc(),
    snapshots can now be taking when a condition is hit, and the
    developer wants to snapshot the case without stopping the trace.
    
    Note, any snapshot will overwrite the old one, so take care
    in how this is done.
    
    These new functions are to be used like tracing_on(), tracing_off()
    and trace_printk() are. That is, they should never be called
    in the mainline Linux kernel. They are solely for the purpose
    of debugging.
    
    The tracing_snapshot() will not allocate a buffer, but it is
    safe to be called from any context (except NMIs). But if a
    snapshot buffer isn't allocated when it is called, it will write
    to the live buffer, complaining about the lack of a snapshot
    buffer, and then stop tracing (giving you the "permanent snapshot").
    
    tracing_snapshot_alloc() will allocate the snapshot buffer if
    it was not already allocated and then take the snapshot. This routine
    *may sleep*, and must be called from context that can sleep.
    The allocation is done with GFP_KERNEL and not atomic.
    
    If you need a snapshot in an atomic context, say in early boot,
    then it is best to call the tracing_snapshot_alloc() before then,
    where it will allocate the buffer, and then you can use the
    tracing_snapshot() anywhere you want and still get snapshots.
    
    Cc: Hiraku Toyooka <hiraku.toyooka.gu@hitachi.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    ad909e21
trace.c 140 KB