Commit d0eac20f authored by Paul E. McKenney's avatar Paul E. McKenney
Browse files

rcutorture: Validate get_completed_synchronize_rcu()

This commit verifies that the RCU grace-period state cookie returned
from get_completed_synchronize_rcu() causes poll_state_synchronize_rcu()
to return true, as required.

This commit is in preparation for polled expedited grace periods.

Link: https://lore.kernel.org/all/20220121142454.1994916-1-bfoster@redhat.com/
Link: https://docs.google.com/document/d/1RNKWW9jQyfjxw2E8dsXVTdvZYh0HnYeSHDKog9jhdN8/edit?usp=sharing


Cc: Brian Foster <bfoster@redhat.com>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Ian Kent <raven@themaw.net>
Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
parent 414c1238
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -338,6 +338,7 @@ struct rcu_torture_ops {
	void (*sync)(void);
	void (*exp_sync)(void);
	unsigned long (*get_gp_state)(void);
	unsigned long (*get_gp_completed)(void);
	unsigned long (*start_gp_poll)(void);
	bool (*poll_gp_state)(unsigned long oldstate);
	void (*cond_sync)(unsigned long oldstate);
@@ -504,6 +505,7 @@ static struct rcu_torture_ops rcu_ops = {
	.sync			= synchronize_rcu,
	.exp_sync		= synchronize_rcu_expedited,
	.get_gp_state		= get_state_synchronize_rcu,
	.get_gp_completed	= get_completed_synchronize_rcu,
	.start_gp_poll		= start_poll_synchronize_rcu,
	.poll_gp_state		= poll_state_synchronize_rcu,
	.cond_sync		= cond_synchronize_rcu,
@@ -1254,6 +1256,10 @@ rcu_torture_writer(void *arg)
					  rcu_torture_writer_state_getname(),
					  rcu_torture_writer_state,
					  cookie, cur_ops->get_gp_state());
				if (cur_ops->get_gp_completed) {
					cookie = cur_ops->get_gp_completed();
					WARN_ON_ONCE(!cur_ops->poll_gp_state(cookie));
				}
				cur_ops->readunlock(idx);
			}
			switch (synctype[torture_random(&rand) % nsynctypes]) {