Blame view

kernel/trace/trace_nop.c 2.19 KB
fb1b6d8b5   Steven Noonan   ftrace: add nop t...
1
2
3
4
5
6
7
8
9
10
11
12
13
  /*
   * nop tracer
   *
   * Copyright (C) 2008 Steven Noonan <steven@uplinklabs.net>
   *
   */
  
  #include <linux/module.h>
  #include <linux/fs.h>
  #include <linux/debugfs.h>
  #include <linux/ftrace.h>
  
  #include "trace.h"
0619faf65   Frederic Weisbecker   tracing/ftrace: m...
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
  /* 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
  };
fb1b6d8b5   Steven Noonan   ftrace: add nop t...
34
35
36
37
38
39
40
41
42
43
44
  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! */
  }
1c80025a4   Frederic Weisbecker   tracing/ftrace: c...
45
  static int nop_trace_init(struct trace_array *tr)
fb1b6d8b5   Steven Noonan   ftrace: add nop t...
46
47
  {
  	ctx_trace = tr;
c76f06945   Steven Rostedt   ftrace: remove tr...
48
  	start_nop_trace(tr);
1c80025a4   Frederic Weisbecker   tracing/ftrace: c...
49
  	return 0;
fb1b6d8b5   Steven Noonan   ftrace: add nop t...
50
51
52
53
  }
  
  static void nop_trace_reset(struct trace_array *tr)
  {
c76f06945   Steven Rostedt   ftrace: remove tr...
54
  	stop_nop_trace(tr);
fb1b6d8b5   Steven Noonan   ftrace: add nop t...
55
  }
0619faf65   Frederic Weisbecker   tracing/ftrace: m...
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
  /* 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.
   */
  static int nop_set_flag(u32 old_flags, u32 bit, int set)
  {
  	/*
  	 * 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
  ",
  			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
  ",
  			set);
  		return -EINVAL;
  	}
  
  	return 0;
  }
43a15386c   Frédéric Weisbecker   tracing/ftrace: r...
85
  struct tracer nop_trace __read_mostly =
fb1b6d8b5   Steven Noonan   ftrace: add nop t...
86
87
88
89
  {
  	.name		= "nop",
  	.init		= nop_trace_init,
  	.reset		= nop_trace_reset,
7e6ea92df   Frederic Weisbecker   tracing/ftrace: m...
90
  	.wait_pipe	= poll_wait_pipe,
fb1b6d8b5   Steven Noonan   ftrace: add nop t...
91
92
93
  #ifdef CONFIG_FTRACE_SELFTEST
  	.selftest	= trace_selftest_startup_nop,
  #endif
0619faf65   Frederic Weisbecker   tracing/ftrace: m...
94
95
  	.flags		= &nop_flags,
  	.set_flag	= nop_set_flag
fb1b6d8b5   Steven Noonan   ftrace: add nop t...
96
  };