From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758666AbdELR0Y (ORCPT ); Fri, 12 May 2017 13:26:24 -0400 Received: from mail.kernel.org ([198.145.29.99]:37808 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758600AbdELRYw (ORCPT ); Fri, 12 May 2017 13:24:52 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7D399239B2 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=goodmis.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=rostedt@goodmis.org Message-Id: <20170512172450.269938638@goodmis.org> User-Agent: quilt/0.63-1 Date: Fri, 12 May 2017 13:15:48 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Thomas Gleixner , Peter Zijlstra , Ingo Molnar , Mathieu Desnoyers , "Paul E. McKenney" , Masami Hiramatsu Subject: [RFC][PATCH 4/5] tracepoints: Grab get_online_cpus() before taking tracepoints_mutex References: <20170512171544.100715273@goodmis.org> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Disposition: inline; filename=0004-tracepoints-Grab-get_online_cpus-before-taking-trace.patch Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "Steven Rostedt (VMware)" There's places that take tracepoints_mutex while holding get_online_cpus(), and since tracepoints call jump_label code, which also takes get_online_cpus(), make sure that the tracepoints_mutex is always taken under get_online_cpus(). Signed-off-by: Steven Rostedt (VMware) --- kernel/tracepoint.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c index 685c50ae6300..e41eab51b435 100644 --- a/kernel/tracepoint.c +++ b/kernel/tracepoint.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -276,12 +277,14 @@ int tracepoint_probe_register_prio(struct tracepoint *tp, void *probe, struct tracepoint_func tp_func; int ret; + get_online_cpus(); mutex_lock(&tracepoints_mutex); tp_func.func = probe; tp_func.data = data; tp_func.prio = prio; ret = tracepoint_add_func(tp, &tp_func, prio); mutex_unlock(&tracepoints_mutex); + put_online_cpus(); return ret; } EXPORT_SYMBOL_GPL(tracepoint_probe_register_prio); @@ -318,11 +321,13 @@ int tracepoint_probe_unregister(struct tracepoint *tp, void *probe, void *data) struct tracepoint_func tp_func; int ret; + get_online_cpus(); mutex_lock(&tracepoints_mutex); tp_func.func = probe; tp_func.data = data; ret = tracepoint_remove_func(tp, &tp_func); mutex_unlock(&tracepoints_mutex); + put_online_cpus(); return ret; } EXPORT_SYMBOL_GPL(tracepoint_probe_unregister); -- 2.10.2