1bb730b58SSteven Rostedt (VMware) // SPDX-License-Identifier: GPL-2.0 2002bb86dSFrederic Weisbecker #ifndef __TRACE_STAT_H 3002bb86dSFrederic Weisbecker #define __TRACE_STAT_H 4002bb86dSFrederic Weisbecker 5002bb86dSFrederic Weisbecker #include <linux/seq_file.h> 6002bb86dSFrederic Weisbecker 7002bb86dSFrederic Weisbecker /* 8002bb86dSFrederic Weisbecker * If you want to provide a stat file (one-shot statistics), fill 9002bb86dSFrederic Weisbecker * an iterator with stat_start/stat_next and a stat_show callbacks. 10002bb86dSFrederic Weisbecker * The others callbacks are optional. 11002bb86dSFrederic Weisbecker */ 12002bb86dSFrederic Weisbecker struct tracer_stat { 13002bb86dSFrederic Weisbecker /* The name of your stat file */ 14002bb86dSFrederic Weisbecker const char *name; 15002bb86dSFrederic Weisbecker /* Iteration over statistic entries */ 1642548008SSteven Rostedt void *(*stat_start)(struct tracer_stat *trace); 17002bb86dSFrederic Weisbecker void *(*stat_next)(void *prev, int idx); 18002bb86dSFrederic Weisbecker /* Compare two entries for stats sorting */ 19*80042c8fSAndy Shevchenko cmp_func_t stat_cmp; 20002bb86dSFrederic Weisbecker /* Print a stat entry */ 21002bb86dSFrederic Weisbecker int (*stat_show)(struct seq_file *s, void *p); 22d8ea37d5SLai Jiangshan /* Release an entry */ 23d8ea37d5SLai Jiangshan void (*stat_release)(void *stat); 24002bb86dSFrederic Weisbecker /* Print the headers of your stat entries */ 25002bb86dSFrederic Weisbecker int (*stat_headers)(struct seq_file *s); 26002bb86dSFrederic Weisbecker }; 27002bb86dSFrederic Weisbecker 28002bb86dSFrederic Weisbecker /* 29002bb86dSFrederic Weisbecker * Destroy or create a stat file 30002bb86dSFrederic Weisbecker */ 31002bb86dSFrederic Weisbecker extern int register_stat_tracer(struct tracer_stat *trace); 32002bb86dSFrederic Weisbecker extern void unregister_stat_tracer(struct tracer_stat *trace); 33002bb86dSFrederic Weisbecker 34002bb86dSFrederic Weisbecker #endif /* __TRACE_STAT_H */ 35