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