From patchwork Tue Dec 5 21:52:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 174210 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp3729603vqy; Tue, 5 Dec 2023 13:59:55 -0800 (PST) X-Google-Smtp-Source: AGHT+IH1zmx/eSchhJlNogcr70/bHiH+dexXtZmsmQOtPhAU/9hty0pvrTmfpzB8pskF6lHf6Lv5 X-Received: by 2002:a05:6a00:4306:b0:6ce:82bd:93e0 with SMTP id cb6-20020a056a00430600b006ce82bd93e0mr176271pfb.38.1701813595041; Tue, 05 Dec 2023 13:59:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701813595; cv=none; d=google.com; s=arc-20160816; b=PX4wRLLfyzIqzP1r+ZBQ8se8mW85Wik67QHwulo2OW9Q3XufGS2Vk96V5xynis+8h4 PPNo7XuQY8vxOjuO4q46dc/8FnkrUky8TU7tKHLt2Z5MBakmpeWiulnRtZ0jP1ko/g3l Zxec6HIG5VV5YFSNXrdseBkUWC3XPN2byP6Ts+yGnjzND9pM+umpfw6gCkzSq5mOCDQ1 2vL8BZBJ0KMQLmwgRaDIqab7MO4OrT/bnj/DYyll68SkXKxl/SI8GQBjC8oNez0PS8v2 ceCc7aWhzkpyLlpNvERg8ZRHHzeqx/jt4elX2W3a/EnD0aOQb5S2P6edPKY/j/22fCh5 wqwg== 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=gYncijDiLfMpZmnqxPqUzCLlMj8N3ZknIi+1WCv2EIo=; fh=F2250jmQaoXj9LX9jKci9w4XCpR+cJC9ffd782I0skk=; b=Oe1VvG3vz7y8+gQt6Gzm8RHr61DtQsLuO/HD5j6dCuBVd7MRMPk630E+ubw7P7H/rS jo+ipvICXKYBFn8DmMCuy5u9IZAROXpZs964lUvmDPkmFAmXFxSrhp9fPJAlUIBQOowa Tc0CYbs1/O4kEm7Hv4vBD5AZWnxaJg1xk005ozaQGkg4d3Sbbkuv193xTKmISjuCQkKY WQbTVJrWlCw20YOE+esukituhRGjLVqFrm27kxrneNqIXEWPnVHChcUuXyqI6fwHMJkt a8Y4E4rILCm2beTQURvzyEBlH1wq23JjJpJ/d+22vJQmlk7q0FPBskh2se/tDv8Mjgs/ DnIQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from morse.vger.email (morse.vger.email. [23.128.96.31]) by mx.google.com with ESMTPS id q21-20020a056a00085500b006ce5ba43015si3242076pfk.179.2023.12.05.13.59.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Dec 2023 13:59:55 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) client-ip=23.128.96.31; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 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 morse.vger.email (Postfix) with ESMTP id B0C9481F8436; Tue, 5 Dec 2023 13:59:51 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at morse.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346343AbjLEV7n (ORCPT + 99 others); Tue, 5 Dec 2023 16:59:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54486 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232266AbjLEV7m (ORCPT ); Tue, 5 Dec 2023 16:59:42 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 73B59D4E for ; Tue, 5 Dec 2023 13:59:44 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 08F15C433C8; Tue, 5 Dec 2023 21:59:44 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.97) (envelope-from ) id 1rAdSc-00000000POm-43z1; Tue, 05 Dec 2023 17:00:10 -0500 Message-ID: <20231205220010.748996423@goodmis.org> User-Agent: quilt/0.67 Date: Tue, 05 Dec 2023 16:52:10 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , stable@vger.kernel.org Subject: [PATCH v2 2/3] tracing: Stop current tracer when resizing buffer References: <20231205215208.195443981@goodmis.org> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on morse.vger.email 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 (morse.vger.email [0.0.0.0]); Tue, 05 Dec 2023 13:59:51 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784480892298057169 X-GMAIL-MSGID: 1784480892298057169 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. Cc: stable@vger.kernel.org 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; }