From mboxrd@z Thu Jan 1 00:00:00 1970 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 94C2DEE49A4 for ; Tue, 22 Aug 2023 15:34:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237163AbjHVPeU (ORCPT ); Tue, 22 Aug 2023 11:34:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39134 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235936AbjHVPeU (ORCPT ); Tue, 22 Aug 2023 11:34:20 -0400 Received: from mail-io1-xd33.google.com (mail-io1-xd33.google.com [IPv6:2607:f8b0:4864:20::d33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 45556113 for ; Tue, 22 Aug 2023 08:34:18 -0700 (PDT) Received: by mail-io1-xd33.google.com with SMTP id ca18e2360f4ac-79244dd2e49so34362039f.1 for ; Tue, 22 Aug 2023 08:34:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joelfernandes.org; s=google; t=1692718457; x=1693323257; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=23HZEtSy74oKRHG4dRJMMnNxq2Nhz1/Vw/8CyykmCFA=; b=sy4v8ZilSundFmjh1wetcR8Cq484nYree/rTTCQXHX1HbVxrtmaDT+XSjMzjOsx7Ip 03VhBqHfzRlt7wI8RITAWh3v2kxBml8XLfjbBkObFoqrUSaux5+qwJ26bM2YiO54yiFu vbj51a8T39bvpCTKbhZOI34cKH/I1j2PkfeEs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692718457; x=1693323257; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=23HZEtSy74oKRHG4dRJMMnNxq2Nhz1/Vw/8CyykmCFA=; b=EldSj8u3hNVz+kjT/+F60aOAj1obgPry6uSfU37xsxqpSZyGfU2QCDxutE4bbt5Nfe WOay+9mUKQeAmgUx+StmpQBxNGTCTH+xFrGI6uRWYUMvVQ3+EV7DWAcR5BKnebauX7ig nWK3i+2OoFZIIGONUx06flH3Wm5aiDX7AgH5zzpNXE3bUu+bQUj+fgKaeDj7N+wBgYac aFnScAEZfMC2LsE+s54ifQBv19/aKJgvOOLoZG63xPAVkkYjsT8gvOd5X0NKco/64Shw krpStbeEqvsYBjNlHtpXdmMrqhkHnJlrSkctx/QadHgxXCOh/v56Z41pwM7V9OBhnz/l 6t1A== X-Gm-Message-State: AOJu0YxKv27YvYmMKpfjf7Y76tdD7mAOuR+xfA89axCriA475RrqiWv0 vYys9g4BKtUK32TnK6haKAon7Q== X-Google-Smtp-Source: AGHT+IHGD5ggcRJRfTk5XATu8k1Uz0pBZJzm3JpEKzEMirIhJduTlwj54ThHlo9nj2B2EDZdQpso8g== X-Received: by 2002:a5d:8550:0:b0:783:6272:afbb with SMTP id b16-20020a5d8550000000b007836272afbbmr63912ios.9.1692718457609; Tue, 22 Aug 2023 08:34:17 -0700 (PDT) Received: from localhost (156.190.123.34.bc.googleusercontent.com. [34.123.190.156]) by smtp.gmail.com with ESMTPSA id g4-20020a02c544000000b0042b3ad1656bsm3163204jaj.45.2023.08.22.08.34.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Aug 2023 08:34:16 -0700 (PDT) Date: Tue, 22 Aug 2023 15:34:16 +0000 From: Joel Fernandes To: Huacai Chen Cc: "Paul E . McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Josh Triplett , Boqun Feng , Thomas Gleixner , Steven Rostedt , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Sergey Senozhatsky , chenhuacai@kernel.org, rcu@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Binbin Zhou Subject: Re: [PATCH V3] rcu: Update jiffies locally in rcu_cpu_stall_reset() Message-ID: <20230822153416.GA72567@google.com> References: <20230822040248.329442-1-chenhuacai@loongson.cn> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230822040248.329442-1-chenhuacai@loongson.cn> Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org On Tue, Aug 22, 2023 at 12:02:48PM +0800, Huacai Chen wrote: > The KGDB initial breakpoint gets an rcu stall warning after commit > a80be428fbc1f1f3bc9ed924 ("rcu: Do not disable GP stall detection in > rcu_cpu_stall_reset()"). > > [ 53.452051] rcu: INFO: rcu_preempt self-detected stall on CPU [...] > > [1] https://lore.kernel.org/rcu/20230814020045.51950-1-chenhuacai@loongson.cn/T/#t > > Cc: stable@vger.kernel.org > Fixes: a80be428fbc1f1f3bc9ed924 ("rcu: Do not disable GP stall detection in rcu_cpu_stall_reset()") > Reported-off-by: Binbin Zhou > Signed-off-by: Huacai Chen > --- > V2: Use NMI safe functions. > V3: Add comments to explain why. > > kernel/rcu/tree_stall.h | 17 ++++++++++++++++- > 1 file changed, 16 insertions(+), 1 deletion(-) > > diff --git a/kernel/rcu/tree_stall.h b/kernel/rcu/tree_stall.h > index b10b8349bb2a..e4e53113d062 100644 > --- a/kernel/rcu/tree_stall.h > +++ b/kernel/rcu/tree_stall.h > @@ -150,11 +150,26 @@ static void panic_on_rcu_stall(void) > * rcu_cpu_stall_reset - restart stall-warning timeout for current grace period > * > * The caller must disable hard irqs. > + * > + * The jiffies updating may be delayed for a very long time due to tickless and > + * irq disabled, especially in the KGDB case, so we need to add the delayed time > + * (delta) to rcu_state.jiffies_stall. > + * > + * This function may be called in NMI context, so we cannot use ktime_get_ns() > + * and ktime_get_coarse_ns(). Instead, we use their inaccurate but safe friends > + * ktime_get_mono_fast_ns() and ktime_get_seconds() which will cause rcu_state. > + * jiffies_stall to be a little large than expected (harmless and safer). > */ > void rcu_cpu_stall_reset(void) > { > + u64 curr, last, delta; > + > + curr = ktime_get_mono_fast_ns(); > + last = ktime_get_seconds() * NSEC_PER_SEC; > + delta = nsecs_to_jiffies(curr - last); > + > WRITE_ONCE(rcu_state.jiffies_stall, > - jiffies + rcu_jiffies_till_stall_check()); > + jiffies + delta + rcu_jiffies_till_stall_check()); > } I prefer the following diff on top of your patch to take advantage of UBSAN detecting overflows. If you take my diff, feel free to add: Reviewed-by: Joel Fernandes (Google) ---8<----------------------- diff --git a/kernel/rcu/tree_stall.h b/kernel/rcu/tree_stall.h index 5e9e4779bdf1..3398cf2d19c5 100644 --- a/kernel/rcu/tree_stall.h +++ b/kernel/rcu/tree_stall.h @@ -162,14 +162,15 @@ static void panic_on_rcu_stall(void) */ void rcu_cpu_stall_reset(void) { - u64 curr, last, delta; + ktime_t last, delta_ns; + u64 delta_jiff; - curr = ktime_get_mono_fast_ns(); last = ktime_get_seconds() * NSEC_PER_SEC; - delta = nsecs_to_jiffies(curr - last); + delta_ns = ktime_sub(ktime_get_mono_fast_ns(), last); + delta_jiff = nsecs_to_jiffies(delta_ns); WRITE_ONCE(rcu_state.jiffies_stall, - jiffies + delta + rcu_jiffies_till_stall_check()); + jiffies + delta_jiff + rcu_jiffies_till_stall_check()); } //////////////////////////////////////////////////////////////////////////////