> +#if defined(CONFIG_TRACING) && defined(CONFIG_SCHEDSTATS) > +int schedstat_tracepoint_reg(void); > +void schedstat_tracepoint_unreg(void); > +#else > +static inline int schedstat_tracepoint_reg(void) { return 0; } > +static inline void schedstat_tracepoint_unreg(void) { } > +#endif > + >
> +#ifdef CONFIG_TRACING Shouldn't this be also > +#if defined(CONFIG_TRACING) && defined(CONFIG_SCHEDSTATS) ???? If CONFIG_TRACING is defined but CONFIG_SCHEDSTATS is not then build should complain about duplicate schedstat_tracepoint_reg(). No? > +static int schedstat_tracepoint_ref; > +static bool schedstat_save_state; > +/* > + * schedstat_tracepoint_reg() and unreg() are called by the tracepoint > + * regfunc/unregfunc functions. They are protected by the tracepoint mutex. > + * See kernel/tracepoint.c:tracepoint_add_func(). > + * > + * The modifications to schedstat_tracepoint_ref and schedstat_save_state > + * are only done under that mutex, and do not need further protection. > + */ > +int schedstat_tracepoint_reg(void) > +{ > + if (!schedstat_tracepoint_ref) { > + schedstat_save_state = schedstat_enabled(); > + if (!schedstat_save_state) > + set_schedstats(true); > + } > + schedstat_tracepoint_ref++; > + return 0; > +} > + > +void schedstat_tracepoint_unreg(void) > +{ > + schedstat_tracepoint_ref--; > + if (schedstat_tracepoint_ref || schedstat_save_state) > + return; > + set_schedstats(false); > +} > +#endif