From patchwork Tue Jun 20 01:30:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zheng Yejian X-Patchwork-Id: 110026 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp3017149vqr; Mon, 19 Jun 2023 06:43:41 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4rcmkBoT8um8xKVscV4cMASkXm7xLWiFW96pJ8UAz88vZuYY1OMw2qvS01jGp8PZwx6Yp0 X-Received: by 2002:a17:903:41d0:b0:1b5:5a5f:369b with SMTP id u16-20020a17090341d000b001b55a5f369bmr4015617ple.65.1687182221008; Mon, 19 Jun 2023 06:43:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687182220; cv=none; d=google.com; s=arc-20160816; b=Os9S7PvN9Zd/NDA4kZ5CJAYI6SSuoumbe53r5bqWBjMGtmYru4ayFiPp56VY0Pi6RK 1w0NFoS4IV3jmV5VSrNatPMZT5Qa6L2gus0373cWAZv/9/0gCIHtIbIRNe/Fpwtnc/HS LBRtp9d+7pYzLHq/JZCNpY2uV8b6yPo7fRpcWveptsSNKZ9nK4C7pa10Z7jpQD5TOHD3 5UQi08I+outt6JALOqSLVKwWMqkvJ1D7VlYO5h3xbtTpuVHVc7xyOAUuIwaAe4RfLkda zFPmxYS8kuizqy9MPLn02hNJ5Q1LQpiQtKZ12Hnhi3Q8EfW0giF9oTXJYN+MM/hqaNxp r1Ug== 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=IPOxrp6lglNzCIwNyU47R1JZttLKMMBf1i101Pdx4/0=; b=e9xMy02cmpipDN36TgB6VwPXiZQKmLe1Qq6ZuYMJ/h5YzFhZ008pzdDBiePn/GRLTH 8ZdvSj2oU9QlL/tje1kvg12Szp40hyKJ6MgKJ3B5RBQ4bCew9yLtbvtPUZOkJ1Kn4Z4w g9np/NK87WkraRjcxmoW98VoTkWL9CKaUGOxlVLNQuYoauWpvSOev4pnAAAY/Q78HCpT xsYfU0vY9jjx0ANpmVRkayzm4Flx6TV2LqDifCyvn5BniRwjxB9XYE0hFbDLbVbamCuy PckjnvVz0XtdYpZrcq0TFGYh+J4GDpjzLqX6UEqKoxXj9e8YSx27EQWA0NPx2hze+vj0 e0lA== 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 h12-20020a170902f54c00b001b2381c898asi2879222plf.319.2023.06.19.06.43.28; Mon, 19 Jun 2023 06:43:40 -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 S229759AbjFSNaq (ORCPT + 99 others); Mon, 19 Jun 2023 09:30:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36670 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231961AbjFSNao (ORCPT ); Mon, 19 Jun 2023 09:30:44 -0400 Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7EB2C1A4; Mon, 19 Jun 2023 06:30:41 -0700 (PDT) Received: from dggpeml500012.china.huawei.com (unknown [172.30.72.54]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4Ql9Zg5ZdFzLmq5; Mon, 19 Jun 2023 21:28:43 +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.27; Mon, 19 Jun 2023 21:30:39 +0800 From: Zheng Yejian To: , , CC: , , , Subject: [PATCH 5.15] tracing: Add tracing_reset_all_online_cpus_unlocked() function Date: Tue, 20 Jun 2023 09:30:52 +0800 Message-ID: <20230620013052.1127047-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?1769138784829861750?= X-GMAIL-MSGID: =?utf-8?q?1769138784829861750?= 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) [Refers to commit message of 417d5ea6e735e5d88ffb6c436cf2938f3f476dd1, this patch is pre-depended, and tracing_reset_all_online_cpus() should be called after trace_types_lock is held as its comment describes.] Fixes: 417d5ea6e735 ("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 f8b5abd6e36c..0202f23ae960 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -2175,10 +2175,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; @@ -2190,6 +2192,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 66b6c8395fbc..2c3d9b6ce148 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -580,6 +580,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 1aadc9a6487b..160298d285c0 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c @@ -2974,7 +2974,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 2fdf3fd591e1..08c7df42ade7 100644 --- a/kernel/trace/trace_events_synth.c +++ b/kernel/trace/trace_events_synth.c @@ -1416,7 +1416,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 @@ -1428,7 +1427,6 @@ int synth_event_delete(const char *event_name) * occur. */ tracing_reset_all_online_cpus(); - mutex_unlock(&trace_types_lock); } return ret;