]> www.infradead.org Git - users/dwmw2/linux.git/commit
srcu: Unconditionally record srcu_read_lock_lite() in ->srcu_reader_flavor
authorPaul E. McKenney <paulmck@kernel.org>
Tue, 12 Nov 2024 00:28:51 +0000 (16:28 -0800)
committerFrederic Weisbecker <frederic@kernel.org>
Fri, 15 Nov 2024 21:13:37 +0000 (22:13 +0100)
commit9407f5c3ec10c155aae61fc4496a7c17a96907b4
tree397052adc7965b385e628f13fd87862fa424a4b3
parentf8ce622ac9d89260595e26d4e0da8cb6b4a8e030
srcu: Unconditionally record srcu_read_lock_lite() in ->srcu_reader_flavor

Currently, srcu_read_lock_lite() uses the SRCU_READ_FLAVOR_LITE bit in
->srcu_reader_flavor to communicate to the grace-period processing in
srcu_readers_active_idx_check() that the smp_mb() must be replaced by a
synchronize_rcu().  Unfortunately, ->srcu_reader_flavor is not updated
unless the kernel is built with CONFIG_PROVE_RCU=y.  Therefore in all
kernels built with CONFIG_PROVE_RCU=n, srcu_readers_active_idx_check()
incorrectly uses smp_mb() instead of synchronize_rcu() for srcu_struct
structures whose readers use srcu_read_lock_lite().

This commit therefore causes Tree SRCU srcu_read_lock_lite()
to unconditionally update ->srcu_reader_flavor so that
srcu_readers_active_idx_check() can make the correct choice.

Reported-by: Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>
Closes: https://lore.kernel.org/all/d07e8f4a-d5ff-4c8e-8e61-50db285c57e9@amd.com/
Fixes: c0f08d6b5a61 ("srcu: Add srcu_read_lock_lite() and srcu_read_unlock_lite()")
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Cc: Frederic Weisbecker <frederic@kernel.org>
Reviewed-by: Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
include/linux/srcu.h
include/linux/srcutiny.h
include/linux/srcutree.h
kernel/rcu/srcutree.c