srcu: Make Tiny SRCU use multi-bit grace-period counter
authorPaul E. McKenney <paulmck@kernel.org>
Fri, 13 Nov 2020 00:34:09 +0000 (16:34 -0800)
committerPaul E. McKenney <paulmck@kernel.org>
Mon, 4 Jan 2021 21:53:36 +0000 (13:53 -0800)
commit74612a07b83fc46c2b2e6f71a541d55b024ebefc
tree22b7b70daa6adc9227083ff6381815f2aa1712a8
parent5c8fe583cce542aa0b84adc939ce85293de36e5e
srcu: Make Tiny SRCU use multi-bit grace-period counter

There is a need for a polling interface for SRCU grace periods.  This
polling needs to distinguish between an SRCU instance being idle on the
one hand or in the middle of a grace period on the other.  This commit
therefore converts the Tiny SRCU srcu_struct structure's srcu_idx from
a defacto boolean to a free-running counter, using the bottom bit to
indicate that a grace period is in progress.  The second-from-bottom
bit is thus used as the index returned by srcu_read_lock().

Link: https://lore.kernel.org/rcu/20201112201547.GF3365678@moria.home.lan/
Reported-by: Kent Overstreet <kent.overstreet@gmail.com>
[ paulmck: Fix ->srcu_lock_nesting[] indexing per Neeraj Upadhyay. ]
Reviewed-by: Neeraj Upadhyay <neeraju@codeaurora.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
include/linux/srcutiny.h
kernel/rcu/srcutiny.c