rcutorture: Test start-poll primitives with interrupts disabled

This commit tests the ->start_poll() and ->start_poll_full() functions
with interrupts disabled, but only for RCU variants setting the
->start_poll_irqsoff flag.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Reviewed-by: Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
This commit is contained in:
Paul E. McKenney
2024-10-09 11:00:43 -07:00
committed by Frederic Weisbecker
parent a30763800b
commit de2ad0e72c
+10
View File
@@ -393,6 +393,7 @@ struct rcu_torture_ops {
int slow_gps;
int no_pi_lock;
int debug_objects;
int start_poll_irqsoff;
const char *name;
};
@@ -581,6 +582,7 @@ static struct rcu_torture_ops rcu_ops = {
.can_boost = IS_ENABLED(CONFIG_RCU_BOOST),
.extendables = RCUTORTURE_MAX_EXTEND,
.debug_objects = 1,
.start_poll_irqsoff = 1,
.name = "rcu"
};
@@ -1695,14 +1697,22 @@ rcu_torture_fakewriter(void *arg)
cur_ops->cond_sync_exp_full(&gp_snap_full);
break;
case RTWS_POLL_GET:
if (cur_ops->start_poll_irqsoff)
local_irq_disable();
gp_snap = cur_ops->start_gp_poll();
if (cur_ops->start_poll_irqsoff)
local_irq_enable();
while (!cur_ops->poll_gp_state(gp_snap)) {
torture_hrtimeout_jiffies(torture_random(&rand) % 16,
&rand);
}
break;
case RTWS_POLL_GET_FULL:
if (cur_ops->start_poll_irqsoff)
local_irq_disable();
cur_ops->start_gp_poll_full(&gp_snap_full);
if (cur_ops->start_poll_irqsoff)
local_irq_enable();
while (!cur_ops->poll_gp_state_full(&gp_snap_full)) {
torture_hrtimeout_jiffies(torture_random(&rand) % 16,
&rand);