xref: /linux/kernel/trace/trace_stat.h (revision d8ea37d5)
1002bb86dSFrederic Weisbecker #ifndef __TRACE_STAT_H
2002bb86dSFrederic Weisbecker #define __TRACE_STAT_H
3002bb86dSFrederic Weisbecker 
4002bb86dSFrederic Weisbecker #include <linux/seq_file.h>
5002bb86dSFrederic Weisbecker 
6002bb86dSFrederic Weisbecker /*
7002bb86dSFrederic Weisbecker  * If you want to provide a stat file (one-shot statistics), fill
8002bb86dSFrederic Weisbecker  * an iterator with stat_start/stat_next and a stat_show callbacks.
9002bb86dSFrederic Weisbecker  * The others callbacks are optional.
10002bb86dSFrederic Weisbecker  */
11002bb86dSFrederic Weisbecker struct tracer_stat {
12002bb86dSFrederic Weisbecker 	/* The name of your stat file */
13002bb86dSFrederic Weisbecker 	const char		*name;
14002bb86dSFrederic Weisbecker 	/* Iteration over statistic entries */
1542548008SSteven Rostedt 	void			*(*stat_start)(struct tracer_stat *trace);
16002bb86dSFrederic Weisbecker 	void			*(*stat_next)(void *prev, int idx);
17002bb86dSFrederic Weisbecker 	/* Compare two entries for stats sorting */
18002bb86dSFrederic Weisbecker 	int			(*stat_cmp)(void *p1, void *p2);
19002bb86dSFrederic Weisbecker 	/* Print a stat entry */
20002bb86dSFrederic Weisbecker 	int			(*stat_show)(struct seq_file *s, void *p);
21*d8ea37d5SLai Jiangshan 	/* Release an entry */
22*d8ea37d5SLai Jiangshan 	void			(*stat_release)(void *stat);
23002bb86dSFrederic Weisbecker 	/* Print the headers of your stat entries */
24002bb86dSFrederic Weisbecker 	int			(*stat_headers)(struct seq_file *s);
25002bb86dSFrederic Weisbecker };
26002bb86dSFrederic Weisbecker 
27002bb86dSFrederic Weisbecker /*
28002bb86dSFrederic Weisbecker  * Destroy or create a stat file
29002bb86dSFrederic Weisbecker  */
30002bb86dSFrederic Weisbecker extern int register_stat_tracer(struct tracer_stat *trace);
31002bb86dSFrederic Weisbecker extern void unregister_stat_tracer(struct tracer_stat *trace);
32002bb86dSFrederic Weisbecker 
33002bb86dSFrederic Weisbecker #endif /* __TRACE_STAT_H */
34