From patchwork Thu Dec 7 02:37:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 174888 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp4515497vqy; Wed, 6 Dec 2023 18:39:06 -0800 (PST) X-Google-Smtp-Source: AGHT+IFBN3pFXYNGT22HfhVef32NL8lIH1vHcrRBERWQqq7kl4nwlMI/eoKcNf+E4tck83YmRNnP X-Received: by 2002:a05:6808:9a4:b0:3b8:b063:9b79 with SMTP id e4-20020a05680809a400b003b8b0639b79mr1792059oig.107.1701916746316; Wed, 06 Dec 2023 18:39:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701916746; cv=none; d=google.com; s=arc-20160816; b=ZAM9RDZQ5fAUTAojOp5H4msF0ouF443AU0mFum7M+lNInYEZq1F6DanE4HVJVFZD/u mLXYbBHQfS3S/LhbYFn2ZpSvT+wqz2s2OZPS6PBIlYZMORUvpR6WFacewtc+gqshfavJ aIJLVGVHCQDax2ZGw7NdMbUlPKnQKDJoHJrqmMCg57RgXkYPVIjoFeR01Li0FKNWa8Ys mb//r+jtHFhUvCLSn4a4gXE1k03SHfXdvdeD4bG0XJGQz/nrGMl5tUIU59VnW4VUuUo3 jOA1E/wVWm4sGFP2UjQXdtZ/z8fV2Fy049JrZkZTVobPXoZcxJLfj1CJUSmSmCnMHN4k lXLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id; bh=CVqBID7jPEWFGf86Nz8rBIBuCwHlXsuLrM1jXt9b0x4=; fh=hu/11vjhAVGN2soHkDrejjtKeeIeHno3fFH7CvZIC0Y=; b=d3vVEgRA25ODxYE6X6DcdvbWp3M7LdUJR/E7QnfSiPDAhU5pudmMDNeTOOEPEkKVG4 EqyJZ/MUg2eBb380qIlpqN7Vc1pyNeAWnnTBFu6h5b0hJtCvOGEcHl06Wue2ZRPf+KPT WDlD1h9zv640sMA/1XVTX0qdaiANaPAvBBuQefZOY26od1s4YPwgbf3M0A6rETcIKW7r bRkFMzqLWdmPOm7yrwjNy9hXuf60wdDY17ND0mPLYZDL5o9QoZ1kzvdeQz7nyfK1yhQL UQFj1qHcsatlKyOwL7wgsMVGhA4BhlXO3WNNVp2woCVbd58EEmy9ZDfOmlYj1ajCAZ6M DYNw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id h11-20020a056a00170b00b006cdfad63657si351429pfc.313.2023.12.06.18.39.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Dec 2023 18:39:06 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id A194880755DD; Wed, 6 Dec 2023 18:38:05 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1443074AbjLGChu (ORCPT + 99 others); Wed, 6 Dec 2023 21:37:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55740 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231284AbjLGCho (ORCPT ); Wed, 6 Dec 2023 21:37:44 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E0AC8D5E for ; Wed, 6 Dec 2023 18:37:49 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 838A8C433CB; Thu, 7 Dec 2023 02:37:49 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.97) (envelope-from ) id 1rB4HL-00000001aND-19dP; Wed, 06 Dec 2023 21:38:19 -0500 Message-ID: <20231207023819.059291958@goodmis.org> User-Agent: quilt/0.67 Date: Wed, 06 Dec 2023 21:37:54 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , stable@vger.kernel.org Subject: [for-linus][PATCH 2/8] tracing: Stop current tracer when resizing buffer References: <20231207023752.712829638@goodmis.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham 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-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Wed, 06 Dec 2023 18:38:05 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784589054475760291 X-GMAIL-MSGID: 1784589054475760291 From: "Steven Rostedt (Google)" When the ring buffer is being resized, it can cause side effects to the running tracer. For instance, there's a race with irqsoff tracer that swaps individual per cpu buffers between the main buffer and the snapshot buffer. The resize operation modifies the main buffer and then the snapshot buffer. If a swap happens in between those two operations it will break the tracer. Simply stop the running tracer before resizing the buffers and enable it again when finished. Link: https://lkml.kernel.org/r/20231205220010.748996423@goodmis.org Cc: stable@vger.kernel.org Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Mathieu Desnoyers Cc: Andrew Morton Fixes: 3928a8a2d9808 ("ftrace: make work with new ring buffer") Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 231c173ec04f..e978868b1a22 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -6387,9 +6387,12 @@ static int __tracing_resize_ring_buffer(struct trace_array *tr, if (!tr->array_buffer.buffer) return 0; + /* Do not allow tracing while resizng ring buffer */ + tracing_stop_tr(tr); + ret = ring_buffer_resize(tr->array_buffer.buffer, size, cpu); if (ret < 0) - return ret; + goto out_start; #ifdef CONFIG_TRACER_MAX_TRACE if (!tr->current_trace->use_max_tr) @@ -6417,7 +6420,7 @@ static int __tracing_resize_ring_buffer(struct trace_array *tr, WARN_ON(1); tracing_disabled = 1; } - return ret; + goto out_start; } update_buffer_entries(&tr->max_buffer, cpu); @@ -6426,7 +6429,8 @@ static int __tracing_resize_ring_buffer(struct trace_array *tr, #endif /* CONFIG_TRACER_MAX_TRACE */ update_buffer_entries(&tr->array_buffer, cpu); - + out_start: + tracing_start_tr(tr); return ret; }