On Thu, 13 Apr 2017 04:05:48 -0700 Srikar Dronamraju <sri...@linux.vnet.ibm.com> wrote:
> > +#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) ???? This code is within a #ifdef CONFIG_SCHEDSTATS block. That would be redundant putting it here too. -- Steve > > 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