Re: [PATCH v2] tracing: Disable interrupt or preemption before acquiring arch_spinlock_t

From: Waiman Long
Date: Thu Sep 22 2022 - 10:49:10 EST



On 9/22/22 10:31, Peter Zijlstra wrote:
On Thu, Sep 22, 2022 at 09:31:58AM -0400, Waiman Long wrote:
It was found that some tracing functions in kernel/trace/trace.c acquire
an arch_spinlock_t with preemption and irqs enabled. An example is the
tracing_saved_cmdlines_size_read() function which intermittently causes
a "BUG: using smp_processor_id() in preemptible" warning when the LTP
read_all_proc test is run.

That can be problematic in case preemption happens after acquiring the
lock. Add the necessary preemption or interrupt disabling code in the
appropriate places before acquiring an arch_spinlock_t.

The convention here is to disable preemption for trace_cmdline_lock and
interupt for max_lock.

Suggested-by: Steven Rostedt <rostedt@xxxxxxxxxxx>
Signed-off-by: Waiman Long <longman@xxxxxxxxxx>
This seems to be missing a Fixes: tag :-)

Sorry for the omission. The patch should have the following fixes tags.

Fixes: a35873a0993b ("tracing: Add conditional snapshot")
Fixes: 939c7a4f04fc ("tracing: Introduce saved_cmdlines_size file")

Cheers,
Longman