Messages in this thread Patch in this message | | | Date | Mon, 15 Feb 2016 12:32:56 -0500 | From | Steven Rostedt <> | Subject | Re: [PATCH 1/2] tracing/mm: don't trace kfree on offline CPUs |
| |
On Sun, 14 Feb 2016 23:19:42 +0300 Denis Kirjanov <kda@linux-powerpc.org> wrote:
> >> TP_PROTO(unsigned long call_site, const void *ptr), > >> > >> - TP_ARGS(call_site, ptr) > >> + TP_ARGS(call_site, ptr), > >> + > >> + /* > >> + * This trace can be potentially called from an offlined cpu. > >> + * Since trace points use RCU and RCU should not be used from > >> + * offline cpus, filter such calls out. > >> + * While this trace can be called from a preemptable section, > >> + * it has no impact on the condition since tasks can migrate > >> + * only from online cpus to other online cpus. Thus its safe > >> + * to use raw_smp_processor_id. > >> + */ > >> + TP_CONDITION(cpu_online(raw_smp_processor_id())) > > > > This is starting to become a common occurrence. Perhaps it is best to > > just hardcode this into the tracepoint code itself? > > Can you take it as a fix for now. I'll post the follow-up patch then > for rcu and offline cpus > issue.
Actually, I prefer not to add more checks for cpu_online(), if its going to become the default.
Does this work for you instead?
-- Steve
diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h index acd522a91539..acfdbf353a0b 100644 --- a/include/linux/tracepoint.h +++ b/include/linux/tracepoint.h @@ -14,8 +14,10 @@ * See the file COPYING for more details. */ +#include <linux/smp.h> #include <linux/errno.h> #include <linux/types.h> +#include <linux/cpumask.h> #include <linux/rcupdate.h> #include <linux/tracepoint-defs.h> @@ -132,6 +134,9 @@ extern void syscall_unregfunc(void); void *it_func; \ void *__data; \ \ + if (!cpu_online(raw_smp_processor_id())) \ + return; \ + \ if (!(cond)) \ return; \ prercu; \
| |