Messages in this thread | | | Date | Fri, 24 May 2019 09:36:00 -0400 | From | Steven Rostedt <> | Subject | Re: [PATCH] clocksource/arm_arch_timer: Don't trace count reader functions |
| |
On Fri, 24 May 2019 10:10:25 +0100 Julien Thierry <julien.thierry@arm.com> wrote:
> With v5.2-rc1, The ftrace functions_graph tracer locks up whenever it is > enabled on arm64. > > Since commit 0ea415390cd3 ("clocksource/arm_arch_timer: Use > arch_timer_read_counter to access stable counters") a function pointer > is consistently used to read the counter instead of potentially > referencing an inlinable function. > > The graph tacers relies on accessing the timer counters to compute the > time spent in functions which causes the lockup when attempting to trace > these code paths. > > Annontate the arm arch timer counter accessors as notrace. > > Fixes: 0ea415390cd3 ("clocksource/arm_arch_timer: Use > arch_timer_read_counter to access stable counters") > Signed-off-by: Julien Thierry <julien.thierry@arm.com> > Cc: Marc Zyngier <marc.zyngier@arm.com> > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: Daniel Lezcano <daniel.lezcano@linaro.org> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: Steven Rostedt <rostedt@goodmis.org> > --- > drivers/clocksource/arm_arch_timer.c | 8 ++++----
Is there any reason to function trace any of the functions in this file? If not, then I would suggest removing all the "notrace" annotations from this file, and add in the Makefile for this directory:
CFLAGS_REMOVE_arm_arch_timer.o = $(CC_FLAGS_FTRACE)
Hmm, I need to go through all the Makefiles in the kernel and remove the "-pg" and replace it with "$(CC_FLAGS_FTRACE)" as that's the safer way of doing it now.
-- Steve
> 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c > index b2a951a..5c69c9a 100644 > --- a/drivers/clocksource/arm_arch_timer.c > +++ b/drivers/clocksource/arm_arch_timer.c > @@ -149,22 +149,22 @@ u32 arch_timer_reg_read(int access, enum arch_timer_reg reg, > return val; > } > > -static u64 arch_counter_get_cntpct_stable(void) > +static notrace u64 arch_counter_get_cntpct_stable(void) > { > return __arch_counter_get_cntpct_stable(); > } > > -static u64 arch_counter_get_cntpct(void) > +static notrace u64 arch_counter_get_cntpct(void) > { > return __arch_counter_get_cntpct(); > } > > -static u64 arch_counter_get_cntvct_stable(void) > +static notrace u64 arch_counter_get_cntvct_stable(void) > { > return __arch_counter_get_cntvct_stable(); > } > > -static u64 arch_counter_get_cntvct(void) > +static notrace u64 arch_counter_get_cntvct(void) > { > return __arch_counter_get_cntvct(); > }
| |