Re: [PATCH tip/core/rcu 0/5] Provide SRCU polling grace-period interfaces
From: Paul E. McKenney
Date: Fri Nov 20 2020 - 19:59:34 EST
Hello!
This is V2 of the series provides a polling interface for SRCU grace periods. The
API is still as follows:
unsigned long start_poll_synchronize_srcu(struct srcu_struct *ssp)
Returns a "cookie" that can be thought of as a snapshot of
the specified SRCU instance's grace-period sequence number.
Also ensures that enough future grace periods happen to eventually
make the grace-period sequence number reach the cookie.
bool poll_state_synchronize_srcu(struct srcu_struct *ssp, unsigned long cookie)
Given a cookie from start_poll_synchronize_srcu(), returns true if
at least one full SRCU grace period has elapsed in the meantime.
Given finite SRCU readers in a well-behaved kernel, the following
code will complete in finite time:
cookie = start_poll_synchronize_srcu(&my_srcu);
while (!poll_state_synchronize_srcu(&my_srcu, cookie))
schedule_timeout_uninterruptible(1);
unsigned long get_state_synchronize_srcu(struct srcu_struct *ssp)
Like start_poll_synchronize_srcu(), except that it does not start
any grace periods. This means that the following code is -not-
guaranteed to complete:
cookie = get_state_synchronize_srcu(&my_srcu);
while (!poll_state_synchronize_srcu(&my_srcu, cookie))
schedule_timeout_uninterruptible(1);
Use this if you know that something else will be starting the
needed SRCU grace periods. This might also be useful if you
had items that were likely to be reused before the SRCU grace
period elapsed, so that you avoid burning CPU on SRCU grace
periods that prove to be unnecessary. Or if you don't want
to have more than (say) 100 SRCU grace periods per seconds,
in which case you might use a timer to start the grace periods.
Or maybe you don't bother starting the SRCU grace period until
some sort of emergency situation has arisen. Or...
OK, maybe no one needs it, but rcutorture does need it, so here
it is anyway.
The patches in this version of the series are as follows:
1. Make Tiny SRCU use multi-bit grace-period counter.
2. Provide internal interface to start a Tiny SRCU grace period.
3. Provide internal interface to start a Tree SRCU grace period.
4. Provide polling interfaces for Tiny SRCU grace periods.
5. Provide polling interfaces for Tree SRCU grace periods.
6. Document polling interfaces for Tree SRCU grace periods.
Changes from v1:
o Added EXPORT_SYMBOL_GPL() to allow rcutorture testing when
rcutorture is built as a module.
o Applied review feedback from Neeraj Upadhyay.
o Updated RCU requirements documentation.
Thanx, Paul
------------------------------------------------------------------------
Documentation/RCU/Design/Requirements/Requirements.rst | 18 ++
include/linux/rcupdate.h | 2
include/linux/srcu.h | 3
include/linux/srcutiny.h | 5
kernel/rcu/srcutiny.c | 76 ++++++++-
kernel/rcu/srcutree.c | 133 ++++++++++++-----
6 files changed, 191 insertions(+), 46 deletions(-)