2009/10/25 Wu Zhangjin <wuzhangjin@xxxxxxxxx>: > -static inline u64 mips_timecounter_read(void) > +static inline u64 notrace mips_timecounter_read(void) You don't need to set notrace functions, unless their addresses are referenced somewhere, which unfortunately might happen for some functions but this is rare. > { > #ifdef CONFIG_CSRC_R4K > return r4k_timecounter_read(); > diff --git a/arch/mips/kernel/csrc-r4k.c b/arch/mips/kernel/csrc-r4k.c > index 4e7705f..0690bea 100644 > --- a/arch/mips/kernel/csrc-r4k.c > +++ b/arch/mips/kernel/csrc-r4k.c > @@ -42,7 +42,7 @@ static struct timecounter r4k_tc = { > .cc = NULL, > }; > > -static cycle_t r4k_cc_read(const struct cyclecounter *cc) > +static cycle_t notrace r4k_cc_read(const struct cyclecounter *cc) > { > return read_c0_count(); > } > @@ -66,7 +66,7 @@ int __init init_r4k_timecounter(void) > return 0; > } > > -u64 r4k_timecounter_read(void) > +u64 notrace r4k_timecounter_read(void) > { > u64 clock; > > diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h > index 83d2fbd..2a02992 100644 > --- a/include/linux/clocksource.h > +++ b/include/linux/clocksource.h > @@ -73,7 +73,7 @@ struct timecounter { > * XXX - This could use some mult_lxl_ll() asm optimization. Same code > * as in cyc2ns, but with unsigned result. > */ > -static inline u64 cyclecounter_cyc2ns(const struct cyclecounter *cc, > +static inline u64 notrace cyclecounter_cyc2ns(const struct cyclecounter ditto here. *cc, > cycle_t cycles) > { > u64 ret = (u64)cycles; > diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c > index 5e18c6a..9ce9d02 100644 > --- a/kernel/time/clocksource.c > +++ b/kernel/time/clocksource.c > @@ -52,7 +52,7 @@ EXPORT_SYMBOL(timecounter_init); > * The first call to this function for a new time counter initializes > * the time tracking and returns an undefined result. > */ > -static u64 timecounter_read_delta(struct timecounter *tc) > +static u64 notrace timecounter_read_delta(struct timecounter *tc) > { > cycle_t cycle_now, cycle_delta; > u64 ns_offset; > @@ -72,7 +72,7 @@ static u64 timecounter_read_delta(struct timecounter Hmm yeah this is not very nice to do that in core functions because of a specific arch problem. At least you have __notrace_funcgraph, this is a notrace that only applies if CONFIG_FUNCTION_GRAPH_TRACER so that it's still traceable by the function tracer in this case. But I would rather see a __mips_notrace on these two core functions.