Messages in this thread | | | Date | Mon, 28 Sep 2020 12:58:59 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH] time/sched_clock: mark sched_clock_read_begin as notrace |
| |
On Mon, Sep 28, 2020 at 06:49:52PM +0800, quanyang.wang@windriver.com wrote: > From: Quanyang Wang <quanyang.wang@windriver.com> > > Since sched_clock_read_begin is called by notrace function sched_clock, > it shouldn't be traceable either, or else __ftrace_graph_caller will > run into a dead loop on the path (arm for instance): > > ftrace_graph_caller > prepare_ftrace_return > function_graph_enter > ftrace_push_return_trace > trace_clock_local > sched_clock > sched_clock_read_begin > > Fixes: 1b86abc1c645 ("sched_clock: Expose struct clock_read_data") > Signed-off-by: Quanyang Wang <quanyang.wang@windriver.com> > --- > kernel/time/sched_clock.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/time/sched_clock.c b/kernel/time/sched_clock.c > index 1c03eec6ca9b..58459e1359d7 100644 > --- a/kernel/time/sched_clock.c > +++ b/kernel/time/sched_clock.c > @@ -68,7 +68,7 @@ static inline u64 notrace cyc_to_ns(u64 cyc, u32 mult, u32 shift) > return (cyc * mult) >> shift; > } > > -struct clock_read_data *sched_clock_read_begin(unsigned int *seq) > +notrace struct clock_read_data *sched_clock_read_begin(unsigned int *seq) > { > *seq = raw_read_seqcount_latch(&cd.seq); > return cd.read_data + (*seq & 1);
At the very least sched_clock_read_retry() should also be marked such.
But Steve, how come x86 works? Our sched_clock() doesn't have notrace on at all.
| |