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:
committed by
Frederic Weisbecker
parent
a30763800b
commit
de2ad0e72c
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user