From patchwork Tue Dec 5 21:52:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 174211 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp3729628vqy; Tue, 5 Dec 2023 13:59:59 -0800 (PST) X-Google-Smtp-Source: AGHT+IHwMVkq9tySG8Yyxmqdwsid1IGZG5phkITLLxStn6LXWoA/DpWlqGB7ZGFzifR0lwp7pdM4 X-Received: by 2002:a05:6a00:178f:b0:6ce:751b:7b5a with SMTP id s15-20020a056a00178f00b006ce751b7b5amr1488416pfg.62.1701813598954; Tue, 05 Dec 2023 13:59:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701813598; cv=none; d=google.com; s=arc-20160816; b=JzHVMfWJbyjEkn34El7npQKzCXVEaFcCctb/qWTqjmSjzx0f/oVJCMAxc85bRykw3G +WgLDsR58SPhUK7toi1ZPAxVBW9mJfpPaD2mU9TvlY0R3098vxcF86Ly4gZJodxUkaLi U5kgxGeQUSAlMgEMSiHzP6IcGP5DerBRWHq8GfOoiVNm9rGASIdMpB9dm1jKg88qpb/Z rF/U/ez1rr7YfkQzf/r1qnluXf6c35sBGHVLO7+Y1Yz0LBvyzEOcw8O9l6ykFA9wK0ZL FsFrhfZXMAYDUYiNdpKxfmtuanDnj9/mWE/eNaBCw28ckvzs4JSntnsmj52hNeFds5v1 Rm5w== 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=wju4bz4ZZB5HfKXEJ3E/0DUNGAOpRCbvOj6tu97hmsA=; fh=F2250jmQaoXj9LX9jKci9w4XCpR+cJC9ffd782I0skk=; b=MK/rjKYNvCblYpe4KIim3HHaw1KIbMzZ0rIONHzGPlmJxTW1YlQHpPAlCTCCRQXyOQ +EFP1NV/1aRbc3KEqNSQARyD89RJfSoGEGBVeKTTuw62hglyUjQPgihKwSsel6yYL8Lg WJib2tb+TSl9c+f0m9Zc53687eTYcl6fHaT8FOWMKofkyPwrSQBFTdw0ObOuOwNbGFbG vb7MvBpf/IxFDEp42dTjaIz3SFJTEyNbbfRW2btAJotN542iaJO8mjDpZex8xeCdTNzZ /ryk3HsdfGm/Z4WVujVDeU2eF+CahSA9Y1Mf1/sSNWaYLmB+vfYS43dAUBngvqoe4Wvp ZmLA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id a20-20020a056a000c9400b006cdf3e98118si874613pfv.118.2023.12.05.13.59.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Dec 2023 13:59:58 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 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 EF6DA80BC533; Tue, 5 Dec 2023 13:59:57 -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 S1346352AbjLEV7r (ORCPT + 99 others); Tue, 5 Dec 2023 16:59:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54488 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230106AbjLEV7m (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 1E22ED45 for ; Tue, 5 Dec 2023 13:59:44 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id BE052C433CA; Tue, 5 Dec 2023 21:59:43 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.97) (envelope-from ) id 1rAdSc-00000000POI-2qad; Tue, 05 Dec 2023 17:00:10 -0500 Message-ID: <20231205220010.454662151@goodmis.org> User-Agent: quilt/0.67 Date: Tue, 05 Dec 2023 16:52:09 -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 1/3] tracing: Always update snapshot buffer size References: <20231205215208.195443981@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]); Tue, 05 Dec 2023 13:59:58 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784480896473266325 X-GMAIL-MSGID: 1784480896473266325 From: "Steven Rostedt (Google)" It use to be that only the top level instance had a snapshot buffer (for latency tracers like wakeup and irqsoff). The update of the ring buffer size would check if the instance was the top level and if so, it would also update the snapshot buffer as it needs to be the same as the main buffer. Now that lower level instances also has a snapshot buffer, they too need to update their snapshot buffer sizes when the main buffer is changed, otherwise the following can be triggered: # cd /sys/kernel/tracing # echo 1500 > buffer_size_kb # mkdir instances/foo # echo irqsoff > instances/foo/current_tracer # echo 1000 > instances/foo/buffer_size_kb Produces: WARNING: CPU: 2 PID: 856 at kernel/trace/trace.c:1938 update_max_tr_single.part.0+0x27d/0x320 Which is: ret = ring_buffer_swap_cpu(tr->max_buffer.buffer, tr->array_buffer.buffer, cpu); if (ret == -EBUSY) { [..] } WARN_ON_ONCE(ret && ret != -EAGAIN && ret != -EBUSY); <== here That's because ring_buffer_swap_cpu() has: int ret = -EINVAL; [..] /* At least make sure the two buffers are somewhat the same */ if (cpu_buffer_a->nr_pages != cpu_buffer_b->nr_pages) goto out; [..] out: return ret; } Instead, update all instances' snapshot buffer sizes when their main buffer size is updated. Cc: stable@vger.kernel.org Fixes: 6d9b3fa5e7f6 ("tracing: Move tracing_max_latency into trace_array") Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 9aebf904ff97..231c173ec04f 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -6392,8 +6392,7 @@ static int __tracing_resize_ring_buffer(struct trace_array *tr, return ret; #ifdef CONFIG_TRACER_MAX_TRACE - if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL) || - !tr->current_trace->use_max_tr) + if (!tr->current_trace->use_max_tr) goto out; ret = ring_buffer_resize(tr->max_buffer.buffer, size, cpu); 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; } From patchwork Tue Dec 5 21:52:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 174212 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp3729728vqy; Tue, 5 Dec 2023 14:00:07 -0800 (PST) X-Google-Smtp-Source: AGHT+IHHL2X0JqYNdaFyIQEERsq4loN1WrgF8Bd5XWZLKUHNMXpNFA6ETgfE/WQcauSZCI1BEpfu X-Received: by 2002:a05:6e02:1d0f:b0:35c:8410:84ee with SMTP id i15-20020a056e021d0f00b0035c841084eemr22314ila.24.1701813607548; Tue, 05 Dec 2023 14:00:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701813607; cv=none; d=google.com; s=arc-20160816; b=CRhnttavdagOaGS0fno5sKRgIwpRSMlfPYK9lhIm4c05+hFmvzWMheUbj1VrZKaxyO naUvrpeczE5T+jyr3Nxk0DnTxtnrIuTfQipwksksOucbWhUhLg2DhjFXxJOGCFtKy/th 357PgliUp1ne5bXHp+wvQH7fVYAyv8qXdlEYvfOfT0x9E+u1BYtE7iFkTT1h1ZXzM3Kr 1rTmnm96Vx2cVgul2lmoMe//A2ZhqsfVGoT6aDIM9h9/DxllzqOcjTAWfcmUdHEbMhjb sw1gDgt8LWZnRU1TtwtVwQrk/b+s2MWU5Mq2h4qhpSwbWKPiKxmwMSWCiF47Y77niVDe dt8Q== 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=/zRPygPXcBIqLQ4DKmXWh8mTXv/a09WFAmxaLbbYFMI=; fh=F2250jmQaoXj9LX9jKci9w4XCpR+cJC9ffd782I0skk=; b=V+3LGMXE19TiOA6ACaPnTCZ24lLP2WOLGABqAZBsLlP5sqnJGC+WNXZgQdmGVlFNIJ p+a+/Tv6UODugoVodsUrF2/WRuBbxRJaJz7BppcEu83SmMBuRM7Txfugpjm9gsPhR9is +RYhkCafqunXrZBkqVtgJz0HdjhH0ylfubzwjK3R/ybi2Urv0mbFurRVQKV2J1uUYajK D5eX0TgwZZz9IgVjhPm+HkO2qjScR2Ny8mObcY2evHyefzZkPvNN7J2ge+ENwb3sSQD7 Sv5I1brKH0EjDn8pSu97jEUV/R1jGa0gN6Gbg2S3i63LrhJWyNpMucINKttM08BOLAXd gNCw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id b7-20020a655cc7000000b005c6034ba3f4si10305633pgt.419.2023.12.05.14.00.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Dec 2023 14:00:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 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 groat.vger.email (Postfix) with ESMTP id E1104809B745; Tue, 5 Dec 2023 13:59:59 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346350AbjLEV7t (ORCPT + 99 others); Tue, 5 Dec 2023 16:59:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54488 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232272AbjLEV7n (ORCPT ); Tue, 5 Dec 2023 16:59:43 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BA528D5F for ; Tue, 5 Dec 2023 13:59:44 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5F38AC433CD; Tue, 5 Dec 2023 21:59:44 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.97) (envelope-from ) id 1rAdSd-00000000PPG-16Io; Tue, 05 Dec 2023 17:00:11 -0500 Message-ID: <20231205220011.041220035@goodmis.org> User-Agent: quilt/0.67 Date: Tue, 05 Dec 2023 16:52:11 -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 3/3] tracing: Disable snapshot buffer when stopping instance tracers 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=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.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 (groat.vger.email [0.0.0.0]); Tue, 05 Dec 2023 14:00:00 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784480905506376694 X-GMAIL-MSGID: 1784480905506376694 From: "Steven Rostedt (Google)" It use to be that only the top level instance had a snapshot buffer (for latency tracers like wakeup and irqsoff). When stopping a tracer in an instance would not disable the snapshot buffer. This could have some unintended consequences if the irqsoff tracer is enabled. Consolidate the tracing_start/stop() with tracing_start/stop_tr() so that all instances behave the same. The tracing_start/stop() functions will just call their respective tracing_start/stop_tr() with the global_array passed in. Cc: stable@vger.kernel.org Fixes: 6d9b3fa5e7f6 ("tracing: Move tracing_max_latency into trace_array") Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.c | 110 +++++++++++++------------------------------ 1 file changed, 34 insertions(+), 76 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index e978868b1a22..2492c6c76850 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -2360,13 +2360,7 @@ int is_tracing_stopped(void) return global_trace.stop_count; } -/** - * tracing_start - quick start of the tracer - * - * If tracing is enabled but was stopped by tracing_stop, - * this will start the tracer back up. - */ -void tracing_start(void) +static void tracing_start_tr(struct trace_array *tr) { struct trace_buffer *buffer; unsigned long flags; @@ -2374,119 +2368,83 @@ void tracing_start(void) if (tracing_disabled) return; - raw_spin_lock_irqsave(&global_trace.start_lock, flags); - if (--global_trace.stop_count) { - if (global_trace.stop_count < 0) { + raw_spin_lock_irqsave(&tr->start_lock, flags); + if (--tr->stop_count) { + if (WARN_ON_ONCE(tr->stop_count < 0)) { /* Someone screwed up their debugging */ - WARN_ON_ONCE(1); - global_trace.stop_count = 0; + tr->stop_count = 0; } goto out; } /* Prevent the buffers from switching */ - arch_spin_lock(&global_trace.max_lock); + arch_spin_lock(&tr->max_lock); - buffer = global_trace.array_buffer.buffer; + buffer = tr->array_buffer.buffer; if (buffer) ring_buffer_record_enable(buffer); #ifdef CONFIG_TRACER_MAX_TRACE - buffer = global_trace.max_buffer.buffer; + buffer = tr->max_buffer.buffer; if (buffer) ring_buffer_record_enable(buffer); #endif - arch_spin_unlock(&global_trace.max_lock); - - out: - raw_spin_unlock_irqrestore(&global_trace.start_lock, flags); -} - -static void tracing_start_tr(struct trace_array *tr) -{ - struct trace_buffer *buffer; - unsigned long flags; - - if (tracing_disabled) - return; - - /* If global, we need to also start the max tracer */ - if (tr->flags & TRACE_ARRAY_FL_GLOBAL) - return tracing_start(); - - raw_spin_lock_irqsave(&tr->start_lock, flags); - - if (--tr->stop_count) { - if (tr->stop_count < 0) { - /* Someone screwed up their debugging */ - WARN_ON_ONCE(1); - tr->stop_count = 0; - } - goto out; - } - - buffer = tr->array_buffer.buffer; - if (buffer) - ring_buffer_record_enable(buffer); + arch_spin_unlock(&tr->max_lock); out: raw_spin_unlock_irqrestore(&tr->start_lock, flags); } /** - * tracing_stop - quick stop of the tracer + * tracing_start - quick start of the tracer * - * Light weight way to stop tracing. Use in conjunction with - * tracing_start. + * If tracing is enabled but was stopped by tracing_stop, + * this will start the tracer back up. */ -void tracing_stop(void) +void tracing_start(void) + +{ + return tracing_start_tr(&global_trace); +} + +static void tracing_stop_tr(struct trace_array *tr) { struct trace_buffer *buffer; unsigned long flags; - raw_spin_lock_irqsave(&global_trace.start_lock, flags); - if (global_trace.stop_count++) + raw_spin_lock_irqsave(&tr->start_lock, flags); + if (tr->stop_count++) goto out; /* Prevent the buffers from switching */ - arch_spin_lock(&global_trace.max_lock); + arch_spin_lock(&tr->max_lock); - buffer = global_trace.array_buffer.buffer; + buffer = tr->array_buffer.buffer; if (buffer) ring_buffer_record_disable(buffer); #ifdef CONFIG_TRACER_MAX_TRACE - buffer = global_trace.max_buffer.buffer; + buffer = tr->max_buffer.buffer; if (buffer) ring_buffer_record_disable(buffer); #endif - arch_spin_unlock(&global_trace.max_lock); + arch_spin_unlock(&tr->max_lock); out: - raw_spin_unlock_irqrestore(&global_trace.start_lock, flags); + raw_spin_unlock_irqrestore(&tr->start_lock, flags); } -static void tracing_stop_tr(struct trace_array *tr) +/** + * tracing_stop - quick stop of the tracer + * + * Light weight way to stop tracing. Use in conjunction with + * tracing_start. + */ +void tracing_stop(void) { - struct trace_buffer *buffer; - unsigned long flags; - - /* If global, we need to also stop the max tracer */ - if (tr->flags & TRACE_ARRAY_FL_GLOBAL) - return tracing_stop(); - - raw_spin_lock_irqsave(&tr->start_lock, flags); - if (tr->stop_count++) - goto out; - - buffer = tr->array_buffer.buffer; - if (buffer) - ring_buffer_record_disable(buffer); - - out: - raw_spin_unlock_irqrestore(&tr->start_lock, flags); + return tracing_stop_tr(&global_trace); } static int trace_save_cmdline(struct task_struct *tsk)