All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@kernel.org>
To: rcu@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, kernel-team@fb.com,
	rostedt@goodmis.org, Zqiang <qiang1.zhang@intel.com>,
	Joel Fernandes <joel@joelfernandes.org>,
	"Paul E . McKenney" <paulmck@kernel.org>
Subject: [PATCH rcu 8/8] rcu: Fix __this_cpu_read() lockdep warning in rcu_force_quiescent_state()
Date: Wed, 19 Oct 2022 15:46:59 -0700	[thread overview]
Message-ID: <20221019224659.2499511-8-paulmck@kernel.org> (raw)
In-Reply-To: <20221019224652.GA2499358@paulmck-ThinkPad-P17-Gen-1>

From: Zqiang <qiang1.zhang@intel.com>

Running rcutorture with non-zero fqs_duration module parameter in a
kernel built with CONFIG_PREEMPTION=y results in the following splat:

BUG: using __this_cpu_read() in preemptible [00000000]
code: rcu_torture_fqs/398
caller is __this_cpu_preempt_check+0x13/0x20
CPU: 3 PID: 398 Comm: rcu_torture_fqs Not tainted 6.0.0-rc1-yoctodev-standard+
Call Trace:
<TASK>
dump_stack_lvl+0x5b/0x86
dump_stack+0x10/0x16
check_preemption_disabled+0xe5/0xf0
__this_cpu_preempt_check+0x13/0x20
rcu_force_quiescent_state.part.0+0x1c/0x170
rcu_force_quiescent_state+0x1e/0x30
rcu_torture_fqs+0xca/0x160
? rcu_torture_boost+0x430/0x430
kthread+0x192/0x1d0
? kthread_complete_and_exit+0x30/0x30
ret_from_fork+0x22/0x30
</TASK>

The problem is that rcu_force_quiescent_state() uses __this_cpu_read()
in preemptible code instead of the proper raw_cpu_read().  This commit
therefore changes __this_cpu_read() to raw_cpu_read().

Signed-off-by: Zqiang <qiang1.zhang@intel.com>
Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
---
 kernel/rcu/tree.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index f6561aa401c04..1e1d333d07ffe 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -2410,7 +2410,7 @@ void rcu_force_quiescent_state(void)
 	struct rcu_node *rnp_old = NULL;
 
 	/* Funnel through hierarchy to reduce memory contention. */
-	rnp = __this_cpu_read(rcu_data.mynode);
+	rnp = raw_cpu_read(rcu_data.mynode);
 	for (; rnp != NULL; rnp = rnp->parent) {
 		ret = (READ_ONCE(rcu_state.gp_flags) & RCU_GP_FLAG_FQS) ||
 		       !raw_spin_trylock(&rnp->fqslock);
-- 
2.31.1.189.g2e36527f23


      parent reply	other threads:[~2022-10-19 22:47 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-19 22:46 [PATCH rcu 0/8] Miscellaneous fixes for v6.2 Paul E. McKenney
2022-10-19 22:46 ` [PATCH rcu 1/8] rcu: Remove duplicate RCU exp QS report from rcu_report_dead() Paul E. McKenney
2022-10-19 22:46 ` [PATCH rcu 2/8] rcu: Synchronize ->qsmaskinitnext in rcu_boost_kthread_setaffinity() Paul E. McKenney
2022-10-19 22:46 ` [PATCH rcu 3/8] rcu: Remove unused 'cpu' in rcu_virt_note_context_switch() Paul E. McKenney
2022-10-19 22:46 ` [PATCH rcu 4/8] rcu: Use READ_ONCE() for lockless read of rnp->qsmask Paul E. McKenney
2022-10-19 22:46 ` [PATCH rcu 5/8] slab: Explain why SLAB_DESTROY_BY_RCU reference before locking Paul E. McKenney
2022-10-20  7:10   ` Vlastimil Babka
2022-10-20 16:31     ` Paul E. McKenney
2022-10-21  7:44   ` Christoph Lameter
2022-10-21 13:43     ` Paul E. McKenney
2022-10-21 13:50       ` Vlastimil Babka
2022-10-21 15:42         ` Paul E. McKenney
2022-10-21 15:50           ` Vlastimil Babka
2022-10-21 16:10             ` Paul E. McKenney
2022-10-19 22:46 ` [PATCH rcu 6/8] rcu: Remove rcu_is_idle_cpu() Paul E. McKenney
2022-10-19 22:46 ` [PATCH rcu 7/8] rcu-tasks: Make grace-period-age message human-readable Paul E. McKenney
2022-10-19 22:46 ` Paul E. McKenney [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221019224659.2499511-8-paulmck@kernel.org \
    --to=paulmck@kernel.org \
    --cc=joel@joelfernandes.org \
    --cc=kernel-team@fb.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=qiang1.zhang@intel.com \
    --cc=rcu@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.