Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1E9B4C6FD1F for ; Tue, 14 Mar 2023 23:04:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230402AbjCNXEC (ORCPT ); Tue, 14 Mar 2023 19:04:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39698 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230266AbjCNXD6 (ORCPT ); Tue, 14 Mar 2023 19:03:58 -0400 Received: from mail-yb1-xb2e.google.com (mail-yb1-xb2e.google.com [IPv6:2607:f8b0:4864:20::b2e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E3F8C1D93D for ; Tue, 14 Mar 2023 16:03:56 -0700 (PDT) Received: by mail-yb1-xb2e.google.com with SMTP id r1so4742729ybu.5 for ; Tue, 14 Mar 2023 16:03:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joelfernandes.org; s=google; t=1678835036; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=+M/wJAcMOPDypo34VuMZysKjW37fet4aHdhyCFRkO50=; b=JFMvFsDkDX4N6+R2NB/BVGGCNkl4a/iQBFHOdlyiVy3dHZ2FRp3IA9rDVkaAWnQejv iVWxJy88Q2Gb8ay1tG2EY0O7XnQSjlkjJCNlnXxhTgRPMyp5J4eI5KJb/joS+JO8y8AP 0bjymXmuvgpndNDI+8R7gAOOY5Yw9XDE4VDwM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678835036; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+M/wJAcMOPDypo34VuMZysKjW37fet4aHdhyCFRkO50=; b=MHzerhpiYxAyh9lJDzVD/uEClIFcMUuiTDhvjzlBxeOTNzHGR31jdDwREvObiIePz7 KwQaV7gXS3y6N201Vo4U0zhIXNKwFxu+v4G8mm3vy2Ebv//MJTBDl98+Tk+wBba/HEwG C5aQigs+JnQjoaBCMpt6Bd0vXdhxFU5SEfWxyYmQnGrIGrS4bmCfxTCMW2K4f1POtlBE GARF7R5h9FvNWvAqYB3nD9XQVaYsLyrqzBnrTqAb99WXxEReA3kSPQnKSuT0YlPKsuEG BOHjHmWdbFCIOnYC0jkPaY5m6/E8lJKwjCxVX2RyyKKMEhiSLRMyr1FBxLTF71QBee7v 4bmw== X-Gm-Message-State: AO0yUKV4ciGLd6k22uICjgcixAR0xu++0HvuwGgoneH+ImsdKJ3paVoR bjALBtjIGZChvtEmUvmZwETC62pljxZUFLX++hG+7Q== X-Google-Smtp-Source: AK7set/EqPgzTvragippGHLnm3Quj4y4xpXczhtAu3Hn0zlNlQh6+GH1BfN+FyjvWPzdYVJXVGr/HIC0rL2KuEiLCNM= X-Received: by 2002:a5b:6c4:0:b0:b26:d140:5f74 with SMTP id r4-20020a5b06c4000000b00b26d1405f74mr10387224ybq.1.1678835035784; Tue, 14 Mar 2023 16:03:55 -0700 (PDT) MIME-Version: 1.0 References: <20230314190236.203370742@goodmis.org> <20230314190310.486609095@goodmis.org> In-Reply-To: <20230314190310.486609095@goodmis.org> From: Joel Fernandes Date: Tue, 14 Mar 2023 19:03:44 -0400 Message-ID: Subject: Re: [for-linus][PATCH 5/5] tracing: Make tracepoint lockdep check actually test something To: Steven Rostedt Cc: linux-kernel@vger.kernel.org, Masami Hiramatsu , Andrew Morton , stable@vger.kernel.org, Dave Hansen , "Paul E. McKenney" , Mathieu Desnoyers , "Peter Zijlstra (Intel)" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Mar 14, 2023 at 3:03=E2=80=AFPM Steven Rostedt wrote: > > From: "Steven Rostedt (Google)" > > A while ago where the trace events had the following: > > rcu_read_lock_sched_notrace(); > rcu_dereference_sched(...); > rcu_read_unlock_sched_notrace(); > > If the tracepoint is enabled, it could trigger RCU issues if called in > the wrong place. And this warning was only triggered if lockdep was > enabled. If the tracepoint was never enabled with lockdep, the bug would > not be caught. To handle this, the above sequence was done when lockdep > was enabled regardless if the tracepoint was enabled or not (although the > always enabled code really didn't do anything, it would still trigger a > warning). > > But a lot has changed since that lockdep code was added. One is, that > sequence no longer triggers any warning. Another is, the tracepoint when > enabled doesn't even do that sequence anymore. I agree with the change but I am confused by the commit message a bit due to "Another is, the tracepoint when enabled doesn't even do that sequence anymore.". Whether the tracepoint was enabled or disabled, it is always doing the old sequence because we were skipping the tracepoint's static key test before running the sequence. Right? So how was it not doing the old sequence before? Other than that, Reviewed-by: Joel Fernandes (Google) - Joel > The main check we care about today is whether RCU is "watching" or not. > So if lockdep is enabled, always check if rcu_is_watching() which will > trigger a warning if it is not (tracepoints require RCU to be watching). > > Note, that old sequence did add a bit of overhead when lockdep was enable= d, > and with the latest kernel updates, would cause the system to slow down > enough to trigger kernel "stalled" warnings. > > Link: http://lore.kernel.org/lkml/20140806181801.GA4605@redhat.com > Link: http://lore.kernel.org/lkml/20140807175204.C257CAC5@viggo.jf.intel.= com > Link: https://lore.kernel.org/lkml/20230307184645.521db5c9@gandalf.local.= home/ > Link: https://lore.kernel.org/linux-trace-kernel/20230310172856.77406446@= gandalf.local.home > > Cc: stable@vger.kernel.org > Cc: Masami Hiramatsu > Cc: Dave Hansen > Cc: "Paul E. McKenney" > Cc: Mathieu Desnoyers > Cc: Joel Fernandes > Acked-by: Peter Zijlstra (Intel) > Fixes: e6753f23d961 ("tracepoint: Make rcuidle tracepoint callers use SRC= U") > Signed-off-by: Steven Rostedt (Google) > --- > include/linux/tracepoint.h | 15 ++++++--------- > 1 file changed, 6 insertions(+), 9 deletions(-) > > diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h > index fa1004fcf810..2083f2d2f05b 100644 > --- a/include/linux/tracepoint.h > +++ b/include/linux/tracepoint.h > @@ -231,12 +231,11 @@ static inline struct tracepoint *tracepoint_ptr_der= ef(tracepoint_ptr_t *p) > * not add unwanted padding between the beginning of the section and the > * structure. Force alignment to the same alignment as the section start= . > * > - * When lockdep is enabled, we make sure to always do the RCU portions o= f > - * the tracepoint code, regardless of whether tracing is on. However, > - * don't check if the condition is false, due to interaction with idle > - * instrumentation. This lets us find RCU issues triggered with tracepoi= nts > - * even when this tracepoint is off. This code has no purpose other than > - * poking RCU a bit. > + * When lockdep is enabled, we make sure to always test if RCU is > + * "watching" regardless if the tracepoint is enabled or not. Tracepoint= s > + * require RCU to be active, and it should always warn at the tracepoint > + * site if it is not watching, as it will need to be active when the > + * tracepoint is enabled. > */ > #define __DECLARE_TRACE(name, proto, args, cond, data_proto) \ > extern int __traceiter_##name(data_proto); \ > @@ -249,9 +248,7 @@ static inline struct tracepoint *tracepoint_ptr_deref= (tracepoint_ptr_t *p) > TP_ARGS(args), \ > TP_CONDITION(cond), 0); \ > if (IS_ENABLED(CONFIG_LOCKDEP) && (cond)) { \ > - rcu_read_lock_sched_notrace(); \ > - rcu_dereference_sched(__tracepoint_##name.funcs);= \ > - rcu_read_unlock_sched_notrace(); \ > + WARN_ON_ONCE(!rcu_is_watching()); \ > } \ > } \ > __DECLARE_TRACE_RCU(name, PARAMS(proto), PARAMS(args), \ > -- > 2.39.1