From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1A2BFC433EF for ; Tue, 12 Oct 2021 12:44:04 +0000 (UTC) Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4DFCB60EBB for ; Tue, 12 Oct 2021 12:44:03 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 4DFCB60EBB Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=goodmis.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.ozlabs.org Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4HTFhx5mLnz3c4q for ; Tue, 12 Oct 2021 23:44:01 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=kernel.org (client-ip=198.145.29.99; helo=mail.kernel.org; envelope-from=srs0=yp9m=pa=goodmis.org=rostedt@kernel.org; receiver=) Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4HTFhT44tNz2xWt for ; Tue, 12 Oct 2021 23:43:37 +1100 (AEDT) Received: from gandalf.local.home (cpe-66-24-58-225.stny.res.rr.com [66.24.58.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A316660E97; Tue, 12 Oct 2021 12:43:32 +0000 (UTC) Date: Tue, 12 Oct 2021 08:43:31 -0400 From: Steven Rostedt To: =?UTF-8?B?546L6LSH?= Subject: Re: [PATCH 1/2] ftrace: disable preemption on the testing of recursion Message-ID: <20211012084331.06b8dd23@gandalf.local.home> In-Reply-To: References: <8c7de46d-9869-aa5e-2bb9-5dbc2eda395e@linux.alibaba.com> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Peter Zijlstra \(Intel\)" , Paul Walmsley , "James E.J. Bottomley" , Guo Ren , Jisheng Zhang , "H. Peter Anvin" , live-patching@vger.kernel.org, linux-riscv@lists.infradead.org, Miroslav Benes , Paul Mackerras , Joe Lawrence , Helge Deller , x86@kernel.org, linux-csky@vger.kernel.org, Ingo Molnar , Petr Mladek , Albert Ou , Jiri Kosina , Nicholas Piggin , Borislav Petkov , Josh Poimboeuf , Thomas Gleixner , linux-parisc@vger.kernel.org, linux-kernel@vger.kernel.org, Palmer Dabbelt , Masami Hiramatsu , Colin Ian King , linuxppc-dev@lists.ozlabs.org Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" On Tue, 12 Oct 2021 13:40:08 +0800 =E7=8E=8B=E8=B4=87 wrote: > --- a/include/linux/trace_recursion.h > +++ b/include/linux/trace_recursion.h > @@ -214,7 +214,14 @@ static __always_inline void trace_clear_recursion(in= t bit) > static __always_inline int ftrace_test_recursion_trylock(unsigned long i= p, > unsigned long parent_ip) > { > - return trace_test_and_set_recursion(ip, parent_ip, TRACE_FTRACE_START, = TRACE_FTRACE_MAX); > + int bit; > + > + preempt_disable_notrace(); The recursion test does not require preemption disabled, it uses the task struct, not per_cpu variables, so you should not disable it before the test. bit =3D trace_test_and_set_recursion(ip, parent_ip, TRACE_FTRACE_START, TR= ACE_FTRACE_MAX); if (bit >=3D 0) preempt_disable_notrace(); And if the bit is zero, it means a recursion check was already done by another caller (ftrace handler does the check, followed by calling perf), and you really don't even need to disable preemption in that case. if (bit > 0) preempt_disable_notrace(); And on the unlock, have: static __always_inline void ftrace_test_recursion_unlock(int bit) { if (bit) preempt_enable_notrace(); trace_clear_recursion(bit); } But maybe that's over optimizing ;-) -- Steve > + bit =3D trace_test_and_set_recursion(ip, parent_ip, TRACE_FTRACE_START,= TRACE_FTRACE_MAX); > + if (bit < 0) > + preempt_enable_notrace(); > + > + return bit; > }