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 2142CC433EF for ; Mon, 11 Oct 2021 09:39:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0A6A360231 for ; Mon, 11 Oct 2021 09:39:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235546AbhJKJli (ORCPT ); Mon, 11 Oct 2021 05:41:38 -0400 Received: from out30-130.freemail.mail.aliyun.com ([115.124.30.130]:48186 "EHLO out30-130.freemail.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235500AbhJKJle (ORCPT ); Mon, 11 Oct 2021 05:41:34 -0400 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R301e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e04357;MF=yun.wang@linux.alibaba.com;NM=1;PH=DS;RN=5;SR=0;TI=SMTPD_---0UrPazJ3_1633945172; Received: from testdeMacBook-Pro.local(mailfrom:yun.wang@linux.alibaba.com fp:SMTPD_---0UrPazJ3_1633945172) by smtp.aliyun-inc.com(127.0.0.1); Mon, 11 Oct 2021 17:39:33 +0800 Subject: Re: [RESEND PATCH v2] trace: prevent preemption in perf_ftrace_function_call() To: Peter Zijlstra Cc: Steven Rostedt , Ingo Molnar , open list , Jiri Olsa References: <20211008200328.5b88422d@oasis.local.home> From: =?UTF-8?B?546L6LSH?= Message-ID: <87aeef5b-c457-d4df-8abf-f9f035d73dbc@linux.alibaba.com> Date: Mon, 11 Oct 2021 17:39:32 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2021/10/11 下午4:48, Peter Zijlstra wrote: > On Mon, Oct 11, 2021 at 10:32:46AM +0200, Peter Zijlstra wrote: >> diff --git a/include/linux/trace_recursion.h b/include/linux/trace_recursion.h >> index a9f9c5714e65..ca12e2d8e060 100644 >> --- 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); >> + bool ret; >> + >> + preempt_disable_notrace(); >> + ret = trace_test_and_set_recursion(ip, parent_ip, TRACE_FTRACE_START, TRACE_FTRACE_MAX); >> + if (!ret) >> + preempt_enable_notrace(); >> + >> + return ret; >> } >> >> /** > > Oh, I might've gotten that wrong, I assumed regular trylock semantics, > but it doesn't look like that's right. I will use bit instead ret and give some testing :-) BTW, would you prefer to merge these changes into this patch or maybe send another patch with your suggested-by? Regards, Michael Wang >