2008-09-19 14:06:43 +04:00
/*
* nop tracer
*
* Copyright ( C ) 2008 Steven Noonan < steven @ uplinklabs . net >
*
*/
# include <linux/module.h>
# include <linux/ftrace.h>
# include "trace.h"
2008-11-17 21:26:30 +03:00
/* Our two options */
enum {
TRACE_NOP_OPT_ACCEPT = 0x1 ,
TRACE_NOP_OPT_REFUSE = 0x2
} ;
/* Options for the tracer (see trace_options file) */
static struct tracer_opt nop_opts [ ] = {
/* Option that will be accepted by set_flag callback */
{ TRACER_OPT ( test_nop_accept , TRACE_NOP_OPT_ACCEPT ) } ,
/* Option that will be refused by set_flag callback */
{ TRACER_OPT ( test_nop_refuse , TRACE_NOP_OPT_REFUSE ) } ,
{ } /* Always set a last empty entry */
} ;
static struct tracer_flags nop_flags = {
/* You can check your flags value here when you want. */
. val = 0 , /* By default: all flags disabled */
. opts = nop_opts
} ;
2008-09-19 14:06:43 +04:00
static struct trace_array * ctx_trace ;
static void start_nop_trace ( struct trace_array * tr )
{
/* Nothing to do! */
}
static void stop_nop_trace ( struct trace_array * tr )
{
/* Nothing to do! */
}
2008-11-16 07:57:26 +03:00
static int nop_trace_init ( struct trace_array * tr )
2008-09-19 14:06:43 +04:00
{
ctx_trace = tr ;
2008-11-08 06:36:02 +03:00
start_nop_trace ( tr ) ;
2008-11-16 07:57:26 +03:00
return 0 ;
2008-09-19 14:06:43 +04:00
}
static void nop_trace_reset ( struct trace_array * tr )
{
2008-11-08 06:36:02 +03:00
stop_nop_trace ( tr ) ;
2008-09-19 14:06:43 +04:00
}
2008-11-17 21:26:30 +03:00
/* It only serves as a signal handler and a callback to
* accept or refuse tthe setting of a flag .
* If you don ' t implement it , then the flag setting will be
* automatically accepted .
*/
2014-01-10 20:13:54 +04:00
static int nop_set_flag ( struct trace_array * tr , u32 old_flags , u32 bit , int set )
2008-11-17 21:26:30 +03:00
{
/*
* Note that you don ' t need to update nop_flags . val yourself .
* The tracing Api will do it automatically if you return 0
*/
if ( bit = = TRACE_NOP_OPT_ACCEPT ) {
printk ( KERN_DEBUG " nop_test_accept flag set to %d: we accept. "
" Now cat trace_options to see the result \n " ,
set ) ;
return 0 ;
}
if ( bit = = TRACE_NOP_OPT_REFUSE ) {
printk ( KERN_DEBUG " nop_test_refuse flag set to %d: we refuse. "
" Now cat trace_options to see the result \n " ,
set ) ;
return - EINVAL ;
}
return 0 ;
}
2008-09-21 22:16:30 +04:00
struct tracer nop_trace __read_mostly =
2008-09-19 14:06:43 +04:00
{
. name = " nop " ,
. init = nop_trace_init ,
. reset = nop_trace_reset ,
# ifdef CONFIG_FTRACE_SELFTEST
. selftest = trace_selftest_startup_nop ,
# endif
2008-11-17 21:26:30 +03:00
. flags = & nop_flags ,
2013-11-07 07:42:48 +04:00
. set_flag = nop_set_flag ,
. allow_instances = true ,
2008-09-19 14:06:43 +04:00
} ;