[PATCH RESEND] arm64: arch_timer: fix the infinite recursion when enable ftrace and erratum workaround

Daniel Lezcano daniel.lezcano at linaro.org
Mon Jul 31 08:33:00 PDT 2017


On 26/07/2017 04:42, Ding Tianhong wrote:
> 
> 
> On 2017/7/10 19:22, Mark Rutland wrote:
>> On Sun, Jul 09, 2017 at 04:30:54PM +0800, Ding Tianhong wrote:
>>> 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 at 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




More information about the linux-arm-kernel mailing list