[PATCH RESEND] arm64: arch_timer: fix the infinite recursion when enable ftrace and erratum workaround
From: Daniel Lezcano <hidden>
Date: 2017-07-31 15:33:00
On 26/07/2017 04:42, Ding Tianhong wrote:
On 2017/7/10 19:22, Mark Rutland wrote:quoted
On Sun, Jul 09, 2017 at 04:30:54PM +0800, Ding Tianhong wrote:quoted
When enable preempt and debug ftrace, and perform the following steps, the system will hang: mount -t debugfs nodev /sys/kernel/debug/ cd /sys/kernel/debug/tracing/ echo function_graph > current_tracer This is because tracing the preempt_disable/enable calls would cause trace_clock() which would get local timer to go into infinite recursion when enable the arch timer erratum workaround for some chips, so Prevent tracing of preempt_disable/enable() in arch_timer_reg_read_stable(). This problem is similar to the fixed by upstream commit 96b3d28bf4 ("sched/clock: Prevent tracing recursion in sched_clock_cpu()").As I mentioned before, the patch itself looks fine to me, but the commit message is somewhat difficult to read. Can we please change this to: arm64: arch_timer: avoid infinite recursion when ftrace is enabled On platforms with an arch timer erratum workaround, it's possible for arch_timer_reg_read_stable() to recurse into itself when certain tracing options are enabled, leading to stack overflows and related problems. For example, when PREEMPT_TRACER and FUNCTION_GRAPH_TRACER are selected, it's possible to trigger this with: $ mount -t debugfs nodev /sys/kernel/debug/ $ echo function_graph > /sys/kernel/debug/tracing/current_tracer The problem is that in such cases, preempt_disable() instrumentation attempts to acquire a timestamp via trace_clock(), resulting in a call back to arch_timer_reg_read_stable(), and hence recursion. This patch changes arch_timer_reg_read_stable() to use preempt_{disable,enable}_notrace(), which avoids this. With that commit message: Acked-by: Mark Rutland <mark.rutland@arm.com> Daniel, Thomas, would you be happy to fold that in when picking this? Or would you prefer that I fix this up and resend?Hi Danial, Thomas: It looks didn't merge to the mainline tree yet, should I update the commit and resend this patch again?
Yes, please. I'm coming back from two weeks OoO, that will help. Thanks. -- Daniel -- <http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook | <http://twitter.com/#!/linaroorg> Twitter | <http://www.linaro.org/linaro-blog/> Blog