* [PATCH -next] tracepoint: ipi: don't trace IPI on offline CPUs
@ 2016-03-09 12:22 Sudeep Holla
2016-03-09 16:05 ` Steven Rostedt
0 siblings, 1 reply; 4+ messages in thread
From: Sudeep Holla @ 2016-03-09 12:22 UTC (permalink / raw)
To: linux-kernel, Steven Rostedt; +Cc: Sudeep Holla, Ingo Molnar
Tracepoints use RCU for protection and they must not be called on
offline CPUS. So make this tracepoint conditional. Otherwise it can
produce the following warning:
===============================
[ INFO: suspicious RCU usage. ]
4.5.0-rc7-next-20160308 #44 Not tainted
-------------------------------
include/trace/events/ipi.h:35 suspicious rcu_dereference_check() usage!
other info that might help us debug this:
RCU used illegally from offline CPU!
rcu_scheduler_active = 1, debug_locks = 1
no locks held by swapper/3/0.
stack backtrace:
CPU: 3 PID: 0 Comm: swapper/3 Not tainted 4.5.0-rc7-next-20160308 #44
Hardware name: ARM Juno development board (r2) (DT)
Call trace:
dump_backtrace+0x0/0x218
show_stack+0x24/0x30
dump_stack+0xb4/0xf0
lockdep_rcu_suspicious+0xd0/0x118
smp_cross_call+0x1a8/0x1b0
arch_send_call_function_single_ipi+0x3c/0x48
generic_exec_single+0xc0/0x178
smp_call_function_single+0xec/0x1b8
cpuhp_report_idle_dead+0x70/0x88
cpu_startup_entry+0x358/0x3c0
secondary_start_kernel+0x190/0x1e8
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Ingo Molnar <mingo@redhat.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
---
include/trace/events/ipi.h | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
Hi Steven,
I observed that in "include/linux/tracepoint.h", we have
#define __DO_TRACE(tp, proto, args, cond, prercu, postrcu)
...
if (!cpu_online(raw_smp_processor_id()))
return;
if (!(cond))
return;
...
where !cond check seems reduntant if it's cpu_online check.
So, does this patch handle the warning correctly or is there any better
way ? I did see few traces with same condition, just thought of checking
with you.
Regards,
Sudeep
diff --git a/include/trace/events/ipi.h b/include/trace/events/ipi.h
index 834a7362a610..d8ca2f2e24ac 100644
--- a/include/trace/events/ipi.h
+++ b/include/trace/events/ipi.h
@@ -15,12 +15,14 @@
* It is necessary for @reason to be a static string declared with
* __tracepoint_string.
*/
-TRACE_EVENT(ipi_raise,
+TRACE_EVENT_CONDITION(ipi_raise,
TP_PROTO(const struct cpumask *mask, const char *reason),
TP_ARGS(mask, reason),
+ TP_CONDITION(cpu_online(raw_smp_processor_id())),
+
TP_STRUCT__entry(
__bitmask(target_cpus, nr_cpumask_bits)
__field(const char *, reason)
--
1.9.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH -next] tracepoint: ipi: don't trace IPI on offline CPUs 2016-03-09 12:22 [PATCH -next] tracepoint: ipi: don't trace IPI on offline CPUs Sudeep Holla @ 2016-03-09 16:05 ` Steven Rostedt 2016-03-09 16:40 ` Sudeep Holla 0 siblings, 1 reply; 4+ messages in thread From: Steven Rostedt @ 2016-03-09 16:05 UTC (permalink / raw) To: Sudeep Holla; +Cc: linux-kernel, Ingo Molnar On Wed, 9 Mar 2016 12:22:22 +0000 Sudeep Holla <sudeep.holla@arm.com> wrote: > Hi Steven, > > I observed that in "include/linux/tracepoint.h", we have > #define __DO_TRACE(tp, proto, args, cond, prercu, postrcu) > ... > if (!cpu_online(raw_smp_processor_id())) > return; > > if (!(cond)) > return; > ... > > where !cond check seems reduntant if it's cpu_online check. > So, does this patch handle the warning correctly or is there any better > way ? I did see few traces with same condition, just thought of checking > with you. > Bah, I forgot that we have lockdep checks for when the event isn't enabled. Can you try this patch: -- Steve diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h index acfdbf353a0b..be586c632a0c 100644 --- a/include/linux/tracepoint.h +++ b/include/linux/tracepoint.h @@ -134,9 +134,6 @@ extern void syscall_unregfunc(void); void *it_func; \ void *__data; \ \ - if (!cpu_online(raw_smp_processor_id())) \ - return; \ - \ if (!(cond)) \ return; \ prercu; \ @@ -343,15 +340,19 @@ extern void syscall_unregfunc(void); * "void *__data, proto" as the callback prototype. */ #define DECLARE_TRACE_NOARGS(name) \ - __DECLARE_TRACE(name, void, , 1, void *__data, __data) + __DECLARE_TRACE(name, void, , \ + cpu_online(raw_smp_processor_id()), \ + void *__data, __data) #define DECLARE_TRACE(name, proto, args) \ - __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), 1, \ - PARAMS(void *__data, proto), \ - PARAMS(__data, args)) + __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), \ + cpu_online(raw_smp_processor_id()), \ + PARAMS(void *__data, proto), \ + PARAMS(__data, args)) #define DECLARE_TRACE_CONDITION(name, proto, args, cond) \ - __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), PARAMS(cond), \ + __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), \ + cpu_online(raw_smp_processor_id()) && (PARAMS(cond)), \ PARAMS(void *__data, proto), \ PARAMS(__data, args)) ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH -next] tracepoint: ipi: don't trace IPI on offline CPUs 2016-03-09 16:05 ` Steven Rostedt @ 2016-03-09 16:40 ` Sudeep Holla 2016-03-09 16:44 ` Steven Rostedt 0 siblings, 1 reply; 4+ messages in thread From: Sudeep Holla @ 2016-03-09 16:40 UTC (permalink / raw) To: Steven Rostedt; +Cc: Sudeep Holla, linux-kernel, Ingo Molnar On 09/03/16 16:05, Steven Rostedt wrote: > On Wed, 9 Mar 2016 12:22:22 +0000 > Sudeep Holla <sudeep.holla@arm.com> wrote: > > >> Hi Steven, >> >> I observed that in "include/linux/tracepoint.h", we have >> #define __DO_TRACE(tp, proto, args, cond, prercu, postrcu) >> ... >> if (!cpu_online(raw_smp_processor_id())) >> return; >> >> if (!(cond)) >> return; >> ... >> >> where !cond check seems reduntant if it's cpu_online check. >> So, does this patch handle the warning correctly or is there any better >> way ? I did see few traces with same condition, just thought of checking >> with you. >> > > Bah, I forgot that we have lockdep checks for when the event isn't > enabled. Yes I was about to ask you the same. I did further digging to check if I was missing something after seeing your series[1] especially patch 2/12 (tracing: Remove duplicate checks for online CPUs) > Can you try this patch: It works. Thanks for the quick fix. Tested-by: Sudeep Holla <sudeep.holla@arm.com> -- Regards, Sudeep [1] http://www.spinics.net/lists/kernel/msg2208604.html ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH -next] tracepoint: ipi: don't trace IPI on offline CPUs 2016-03-09 16:40 ` Sudeep Holla @ 2016-03-09 16:44 ` Steven Rostedt 0 siblings, 0 replies; 4+ messages in thread From: Steven Rostedt @ 2016-03-09 16:44 UTC (permalink / raw) To: Sudeep Holla; +Cc: linux-kernel, Ingo Molnar On Wed, 9 Mar 2016 16:40:16 +0000 Sudeep Holla <sudeep.holla@arm.com> wrote: > > Can you try this patch: > > It works. Thanks for the quick fix. > > Tested-by: Sudeep Holla <sudeep.holla@arm.com> Thanks, maybe I can get this into 4.5 quickly. If not, it will have to go in via the merge window. Either case, it's still getting a stable tag on it. -- Steve ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-03-09 16:44 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-03-09 12:22 [PATCH -next] tracepoint: ipi: don't trace IPI on offline CPUs Sudeep Holla 2016-03-09 16:05 ` Steven Rostedt 2016-03-09 16:40 ` Sudeep Holla 2016-03-09 16:44 ` Steven Rostedt
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.