From patchwork Thu Dec 7 02:37:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 174890 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp4515529vqy; Wed, 6 Dec 2023 18:39:11 -0800 (PST) X-Google-Smtp-Source: AGHT+IG9LzosBMbLyGXLlcKifj5mEBigJSH2hB/9IBywVSlIQjlbmieWzge6/n0UAQoem/gaj2WU X-Received: by 2002:a17:902:e5cd:b0:1d0:9228:575e with SMTP id u13-20020a170902e5cd00b001d09228575emr2296747plf.43.1701916751034; Wed, 06 Dec 2023 18:39:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701916751; cv=none; d=google.com; s=arc-20160816; b=L1vj0WEe/xNaZDbzg10bqaQmq8Tibb++I6YREm1C5bmNlVqfJZ+qCfbFULtRzLfo8u O5Cwk3QASFVFWPIFaWp8FVcbVr4TD+lS9IbArSUXga4/B50hKcJj/XJhKbIU9cIGb9zy uP+Lx4EoD9ELeNVi2TAJOpVtAvol7u7JYeEgHezEIYmG1q0V+iYFnZBTn+J71nWQ1pVL xhkPXhvTi8K0orf661bZh/TPnlY4TdGkgks79qOlMS7IFHFq+0erYgOSAC8wGgy//IdA 6WsntmxLapic/JxGFlxDu5iykV645yBJhDv4jDjiAiijHxO8zPOher5dw281ons+fMnb DCFg== 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=0iPwape2cBcGbiWjABF57dqt9GgCEXbViVWrdaFTky0=; fh=hu/11vjhAVGN2soHkDrejjtKeeIeHno3fFH7CvZIC0Y=; b=NKcP4Auc8MtScMSQfGeOUYP8dk3hUiS10uexI56YwrEOmT8eSEoQkxZFpWZWDNG00V sTTYKZDJmKIdNas+fdlKkpRsBtdYlY1IZ3MOZP84wdmxKyHyfM3XkIz5NnG9UgGR9nta Nzb4AlsgQBvakH+fgNRksgpPh9OgjcgbdegXXwNyj22bXuZR/ecVUgX2HO/chcViqPqo 3u3t53rSJjelNoo8NmTc0Ii+5xC0Lj7bzYfIOTHMGkqiNxFBHcQyoR6sHlVg8AlkKq+K LfVKgnM7T0yi0A1nbb9QPGhHwb/HbJugQoH5KpnsvjW+Q1mHTRlc7w8GekgTSdtNBlJP sERA== 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 y18-20020a170902d65200b001d0b3c280f9si251616plh.501.2023.12.06.18.39.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Dec 2023 18:39:11 -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 EED9F805802E; Wed, 6 Dec 2023 18:38:19 -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 S1443129AbjLGCiD (ORCPT + 99 others); Wed, 6 Dec 2023 21:38:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55788 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235202AbjLGCho (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 494C0D4B for ; Wed, 6 Dec 2023 18:37:51 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E78F6C433C8; Thu, 7 Dec 2023 02:37:50 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.97) (envelope-from ) id 1rB4HM-00000001aPg-32s9; Wed, 06 Dec 2023 21:38:20 -0500 Message-ID: <20231207023820.509376496@goodmis.org> User-Agent: quilt/0.67 Date: Wed, 06 Dec 2023 21:37:59 -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 7/8] ring-buffer: Force absolute timestamp on discard of event 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:20 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784589059113919751 X-GMAIL-MSGID: 1784589059113919751 From: "Steven Rostedt (Google)" There's a race where if an event is discarded from the ring buffer and an interrupt were to happen at that time and insert an event, the time stamp is still used from the discarded event as an offset. This can screw up the timings. If the event is going to be discarded, set the "before_stamp" to zero. When a new event comes in, it compares the "before_stamp" with the "write_stamp" and if they are not equal, it will insert an absolute timestamp. This will prevent the timings from getting out of sync due to the discarded event. Link: https://lore.kernel.org/linux-trace-kernel/20231206100244.5130f9b3@gandalf.local.home Cc: stable@vger.kernel.org Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Mathieu Desnoyers Fixes: 6f6be606e763f ("ring-buffer: Force before_stamp and write_stamp to be different on discard") Signed-off-by: Steven Rostedt (Google) --- kernel/trace/ring_buffer.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 43cc47d7faaf..a6da2d765c78 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -3030,22 +3030,19 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer, local_read(&bpage->write) & ~RB_WRITE_MASK; unsigned long event_length = rb_event_length(event); + /* + * For the before_stamp to be different than the write_stamp + * to make sure that the next event adds an absolute + * value and does not rely on the saved write stamp, which + * is now going to be bogus. + */ + rb_time_set(&cpu_buffer->before_stamp, 0); + /* Something came in, can't discard */ if (!rb_time_cmpxchg(&cpu_buffer->write_stamp, write_stamp, write_stamp - delta)) return false; - /* - * It's possible that the event time delta is zero - * (has the same time stamp as the previous event) - * in which case write_stamp and before_stamp could - * be the same. In such a case, force before_stamp - * to be different than write_stamp. It doesn't - * matter what it is, as long as its different. - */ - if (!delta) - rb_time_set(&cpu_buffer->before_stamp, 0); - /* * If an event were to come in now, it would see that the * write_stamp and the before_stamp are different, and assume