From patchwork Thu Jun 15 20:49:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zheng Yejian X-Patchwork-Id: 108359 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp497140vqr; Thu, 15 Jun 2023 02:18:35 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7kG4EbOWgbvZsqaF1zY451EWFKUKeJcC792gaHOKtadvllnYAqkba+tJpwa/mh09Nm1Kr6 X-Received: by 2002:a05:6a21:108d:b0:10d:3ff2:4531 with SMTP id nl13-20020a056a21108d00b0010d3ff24531mr3284518pzb.29.1686820715338; Thu, 15 Jun 2023 02:18:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686820715; cv=none; d=google.com; s=arc-20160816; b=wb1gfkjn+W6EdNGqoUCAPE6RVKQDOWkY0yFURuKTN1rpzoCzw+me+tgOgR1BrWbdPJ wEg+gf/chXSntqrG5cFTX8cO8ottgfNmVCaCtjydVwrsVrwxxNg901kiZ0KWGjLsnN+d QMJCoLbI9u0cbrG8cZy22PlHilrzLPBwmKiE1DUmSLYFh9oNoUQGQg4pjiDiSLoq6YHm 9kshqrEj8QqMfv+Y4nT7bjdMsKPYJnJhiPDindDRQ9YhnsGT7GQKoETJjLqTdjjSbYrz mYr8kxwNtcwlhsDnG7mgFGKliOOEF7xelJ0KBDqYBwtKXGhSHan/eh6OSPZBn4RNax7W tq1Q== 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 :message-id:date:subject:cc:to:from; bh=VXB8PVyFrRFbSayHT5yYLqhEULYMuaUKhL86p029Q9U=; b=eMCxVlg9UkKKs5il/l7VXnWjXM/eK9zhdvQgulz29crSVMg8oO7OhDzzNId7Vw8joH druPFFIw78KanHL5l/Aizq2pZMXFokBA6+t33Pq80nSGIRBc4FJKcIVYoUOJ09TI2UJU F2r6uuCPCYrW8JzcIxmegfUuu0msR+539JnSQ5A3JjfwyPV3/TufSP/PNNG4TylidmMU 8bHZuwxXx3q+9BwjsMs6/YXsbw74Lb+uHWYa0MMM6y+s5v9gf4TPPSWxA/yfTkWQN7HQ L1lvFbN/0XbejihjxPfXan/os8XU6ys55SFmDKcl1PGyIPWEeXR6FJ8kyhW3DMMnZmSx kZvg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m7-20020a170902db0700b001a95babe3c0si13298915plx.371.2023.06.15.02.18.21; Thu, 15 Jun 2023 02:18:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243727AbjFOIuS (ORCPT + 99 others); Thu, 15 Jun 2023 04:50:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37246 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245475AbjFOItm (ORCPT ); Thu, 15 Jun 2023 04:49:42 -0400 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 46B0D2D60; Thu, 15 Jun 2023 01:49:25 -0700 (PDT) Received: from dggpeml500012.china.huawei.com (unknown [172.30.72.57]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4QhbVc4z8WzMpP3; Thu, 15 Jun 2023 16:46:16 +0800 (CST) Received: from localhost.localdomain (10.67.175.61) by dggpeml500012.china.huawei.com (7.185.36.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Thu, 15 Jun 2023 16:49:22 +0800 From: Zheng Yejian To: , CC: , , , , Subject: [PATCH 5.10] tracing: Add tracing_reset_all_online_cpus_unlocked() function Date: Fri, 16 Jun 2023 04:49:31 +0800 Message-ID: <20230615204931.3250659-1-zhengyejian1@huawei.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-Originating-IP: [10.67.175.61] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To dggpeml500012.china.huawei.com (7.185.36.15) X-CFilter-Loop: Reflected X-Spam-Status: No, score=-1.0 required=5.0 tests=BAYES_00,DATE_IN_FUTURE_12_24, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1768759718289424641?= X-GMAIL-MSGID: =?utf-8?q?1768759718289424641?= From: "Steven Rostedt (Google)" commit e18eb8783ec4949adebc7d7b0fdb65f65bfeefd9 upstream. Currently the tracing_reset_all_online_cpus() requires the trace_types_lock held. But only one caller of this function actually has that lock held before calling it, and the other just takes the lock so that it can call it. More users of this function is needed where the lock is not held. Add a tracing_reset_all_online_cpus_unlocked() function for the one use case that calls it without being held, and also add a lockdep_assert to make sure it is held when called. Then have tracing_reset_all_online_cpus() take the lock internally, such that callers do not need to worry about taking it. Link: https://lkml.kernel.org/r/20221123192741.658273220@goodmis.org Cc: Masami Hiramatsu Cc: Andrew Morton Cc: Zheng Yejian Signed-off-by: Steven Rostedt (Google) [this patch is pre-depended by be111ebd8868d4b7c041cb3c6102e1ae27d6dc1d due to tracing_reset_all_online_cpus() should be called after taking lock] Fixes: be111ebd8868 ("tracing: Free buffers when a used dynamic event is removed") Signed-off-by: Zheng Yejian --- kernel/trace/trace.c | 11 ++++++++++- kernel/trace/trace.h | 1 + kernel/trace/trace_events.c | 2 +- kernel/trace/trace_events_synth.c | 2 -- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 482ec6606b7b..70526400e05c 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -2178,10 +2178,12 @@ void tracing_reset_online_cpus(struct array_buffer *buf) } /* Must have trace_types_lock held */ -void tracing_reset_all_online_cpus(void) +void tracing_reset_all_online_cpus_unlocked(void) { struct trace_array *tr; + lockdep_assert_held(&trace_types_lock); + list_for_each_entry(tr, &ftrace_trace_arrays, list) { if (!tr->clear_trace) continue; @@ -2193,6 +2195,13 @@ void tracing_reset_all_online_cpus(void) } } +void tracing_reset_all_online_cpus(void) +{ + mutex_lock(&trace_types_lock); + tracing_reset_all_online_cpus_unlocked(); + mutex_unlock(&trace_types_lock); +} + /* * The tgid_map array maps from pid to tgid; i.e. the value stored at index i * is the tgid last observed corresponding to pid=i. diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 37f616bf5fa9..e5b505b5b7d0 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -725,6 +725,7 @@ int tracing_is_enabled(void); void tracing_reset_online_cpus(struct array_buffer *buf); void tracing_reset_current(int cpu); void tracing_reset_all_online_cpus(void); +void tracing_reset_all_online_cpus_unlocked(void); int tracing_open_generic(struct inode *inode, struct file *filp); int tracing_open_generic_tr(struct inode *inode, struct file *filp); bool tracing_is_disabled(void); diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index bac13f24a96e..f8ed66f38175 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c @@ -2661,7 +2661,7 @@ static void trace_module_remove_events(struct module *mod) * over from this module may be passed to the new module events and * unexpected results may occur. */ - tracing_reset_all_online_cpus(); + tracing_reset_all_online_cpus_unlocked(); } static int trace_module_notify(struct notifier_block *self, diff --git a/kernel/trace/trace_events_synth.c b/kernel/trace/trace_events_synth.c index 18291ab35657..ee174de0b8f6 100644 --- a/kernel/trace/trace_events_synth.c +++ b/kernel/trace/trace_events_synth.c @@ -1363,7 +1363,6 @@ int synth_event_delete(const char *event_name) mutex_unlock(&event_mutex); if (mod) { - mutex_lock(&trace_types_lock); /* * It is safest to reset the ring buffer if the module * being unloaded registered any events that were @@ -1375,7 +1374,6 @@ int synth_event_delete(const char *event_name) * occur. */ tracing_reset_all_online_cpus(); - mutex_unlock(&trace_types_lock); } return ret;