Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp2391479pxb; Tue, 12 Oct 2021 05:44:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzqI1JdRiZDRPkL7a5JtZNn2HpQgJI0pUmwqbG3BElLEr57KkGJDa4o92rse1RpGgyCj9gV X-Received: by 2002:a05:6a00:140c:b0:44b:e251:fe13 with SMTP id l12-20020a056a00140c00b0044be251fe13mr31750834pfu.10.1634042693314; Tue, 12 Oct 2021 05:44:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634042693; cv=none; d=google.com; s=arc-20160816; b=CzurJqRsvmlODDEMlrF3chzAi0tqYI3XQkwPjyAh/XIx8i8dSlwuWQDpOmeF7yen0I eZ6PF0pmh75CPB2yj75KHB84E15E4Q4eBeDqAgOV7lTQ8C4q2ux9CBrFeeOzhr4oZp6Q E0eRlfCHXcUT/o/O76UWOwn3p4g6/3YftkGtPWtylu2bCFG0Jfp4+UmqpYCldGjEe8Ko bGzMuci2wblB+bn2NBe0sa4Cl35WiQ7PECFhzr7wqxRHC30A+ZhhoWSNl4IB49Gp3GEQ xxv4PGZGFtERTmN67hpJGQO4o/szufd2JOsZrBG08zLM/Ek+15SjTKA1Nd1/lvE2mHyM n6lQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date; bh=0Nm7vogfEq4bqzvZpxy5wY6Z4WKnqyfPoE9uazkd9gQ=; b=cCSuHQJd5vwvSyf+OcyEzj1n1EsqNoeO3z0y3CZF03PkMQCDCVylB8dMN+psfxFr5f Tvfz9QiFMk/a28eLXNUhhECfGhbdK5jWq6HZaJyPza/oe2JPqVS4yJxb6fJpfCIC6rkF qmRf1wUu2wmiNZcKW11kRExFl8+4KK73K2BeluMf0e38JMVjvrqHD3nu/3TdublXX84p RLy8heZJlYAdiUw2HBB3JviyMYlrO3S+Qv2gSDfwB+Q82H/tsQ4Wvz6eETtKBjkjNh+D Sza0CM6bpI/3LnkQtu+6KOAh3C4qU4+CzSdgjTEQvvZMHlP7TCb8ECjpNGOIpVuEY/FC QQIA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j5si3307686pjy.56.2021.10.12.05.44.39; Tue, 12 Oct 2021 05:44:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236529AbhJLMph convert rfc822-to-8bit (ORCPT + 99 others); Tue, 12 Oct 2021 08:45:37 -0400 Received: from mail.kernel.org ([198.145.29.99]:33966 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233125AbhJLMpg (ORCPT ); Tue, 12 Oct 2021 08:45:36 -0400 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?= Cc: Guo Ren , Ingo Molnar , "James E.J. Bottomley" , Helge Deller , Michael Ellerman , Benjamin Herrenschmidt , Paul Mackerras , Paul Walmsley , Palmer Dabbelt , Albert Ou , Thomas Gleixner , Borislav Petkov , x86@kernel.org, "H. Peter Anvin" , Josh Poimboeuf , Jiri Kosina , Miroslav Benes , Petr Mladek , Joe Lawrence , Colin Ian King , Masami Hiramatsu , "Peter Zijlstra (Intel)" , Nicholas Piggin , Jisheng Zhang , linux-csky@vger.kernel.org, linux-kernel@vger.kernel.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, live-patching@vger.kernel.org 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: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 12 Oct 2021 13:40:08 +0800 王贇 wrote: > --- a/include/linux/trace_recursion.h > +++ b/include/linux/trace_recursion.h > @@ -214,7 +214,14 @@ static __always_inline void trace_clear_recursion(int bit) > static __always_inline int ftrace_test_recursion_trylock(unsigned long ip, > 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 = trace_test_and_set_recursion(ip, parent_ip, TRACE_FTRACE_START, TRACE_FTRACE_MAX); if (bit >= 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 = trace_test_and_set_recursion(ip, parent_ip, TRACE_FTRACE_START, TRACE_FTRACE_MAX); > + if (bit < 0) > + preempt_enable_notrace(); > + > + return bit; > }