Messages in this thread | | | Subject | Re: [PATCH V4 05/12] trace/hwlat: Support hotplug operations | From | Daniel Bristot de Oliveira <> | Date | Mon, 21 Jun 2021 13:34:44 +0200 |
| |
On 6/18/21 9:00 PM, Steven Rostedt wrote: > On Fri, 18 Jun 2021 12:45:03 -0400 > Steven Rostedt <rostedt@goodmis.org> wrote: > >>> +/* >>> + * hwlat_cpu_init - CPU hotplug online callback function >>> + */ >>> +static int hwlat_cpu_init(unsigned int cpu) >>> +{ >>> + struct trace_array *tr = hwlat_trace; >>> + >> You need to take the trace_types_lock here, between testing the >> hwlat_busy and starting the threads. Otherwise, between the two, the >> hwlat tracer could be turned off while a CPU is coming on line, and >> then you just started a per cpu thread, while the hwlat tracer is not >> enabled. > And of course, because get_online_cpus() is called within > trace_types_lock, doing this check is going to cause a lock inversion. >
Yep! I tried to take the trace_type_lock here, and got the lockdep info about this problem.
> The only thing I could think of is to wake up a worker thread to do the > work. That is, this just wakes the worker thread, then the worker grabs > the trace_types_lock, iterates through the cpu mask of expect running > threads, and then starts or kills them depending on the hwlat_busy > value.
So, it will not wait for the kworker to run?
-- Daniel
> > -- Steve >
| |