Skip to content

Commit 065de24

Browse files
paulmckrcuNeeraj Upadhyay (AMD)
authored andcommitted
rcutorture: Pull rcu_torture_updown() loop body into new function
This is strictly a code-movement commit, pulling that part of the rcu_torture_updown() function's loop body that processes one rcu_torture_one_read_state_updown structure into a new rcu_torture_updown_one() function. The checks for the end of the torture test and the current structure being in use remain in the rcu_torture_updown() function. Signed-off-by: Paul E. McKenney <[email protected]> Signed-off-by: Joel Fernandes <[email protected]> Signed-off-by: Neeraj Upadhyay (AMD) <[email protected]>
1 parent 1b67e03 commit 065de24

File tree

1 file changed

+24
-20
lines changed

1 file changed

+24
-20
lines changed

kernel/rcu/rcutorture.c

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2513,6 +2513,29 @@ static void rcu_torture_updown_cleanup(void)
25132513
updownreaders = NULL;
25142514
}
25152515

2516+
// Do one reader for rcu_torture_updown().
2517+
static void rcu_torture_updown_one(struct rcu_torture_one_read_state_updown *rtorsup)
2518+
{
2519+
int idx;
2520+
int rawidx;
2521+
ktime_t t;
2522+
2523+
init_rcu_torture_one_read_state(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_trs);
2524+
rawidx = cur_ops->down_read();
2525+
idx = (rawidx << RCUTORTURE_RDR_SHIFT_1) & RCUTORTURE_RDR_MASK_1;
2526+
rtorsup->rtorsu_rtors.readstate = idx | RCUTORTURE_RDR_UPDOWN;
2527+
rtorsup->rtorsu_rtors.rtrsp++;
2528+
if (!rcu_torture_one_read_start(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_trs, -1)) {
2529+
schedule_timeout_idle(HZ);
2530+
return;
2531+
}
2532+
smp_store_release(&rtorsup->rtorsu_inuse, true);
2533+
t = torture_random(&rtorsup->rtorsu_trs) & 0xfffff; // One per million.
2534+
if (t < 10 * 1000)
2535+
t = 200 * 1000 * 1000;
2536+
hrtimer_start(&rtorsup->rtorsu_hrt, t, HRTIMER_MODE_REL | HRTIMER_MODE_SOFT);
2537+
}
2538+
25162539
/*
25172540
* RCU torture up/down reader kthread, starting RCU readers in kthread
25182541
* context and ending them in hrtimer handlers. Otherwise similar to
@@ -2521,10 +2544,7 @@ static void rcu_torture_updown_cleanup(void)
25212544
static int
25222545
rcu_torture_updown(void *arg)
25232546
{
2524-
int idx;
2525-
int rawidx;
25262547
struct rcu_torture_one_read_state_updown *rtorsup;
2527-
ktime_t t;
25282548

25292549
VERBOSE_TOROUT_STRING("rcu_torture_updown task started");
25302550
do {
@@ -2533,23 +2553,7 @@ rcu_torture_updown(void *arg)
25332553
break;
25342554
if (smp_load_acquire(&rtorsup->rtorsu_inuse))
25352555
continue;
2536-
init_rcu_torture_one_read_state(&rtorsup->rtorsu_rtors,
2537-
&rtorsup->rtorsu_trs);
2538-
rawidx = cur_ops->down_read();
2539-
idx = (rawidx << RCUTORTURE_RDR_SHIFT_1) & RCUTORTURE_RDR_MASK_1;
2540-
rtorsup->rtorsu_rtors.readstate = idx | RCUTORTURE_RDR_UPDOWN;
2541-
rtorsup->rtorsu_rtors.rtrsp++;
2542-
if (!rcu_torture_one_read_start(&rtorsup->rtorsu_rtors,
2543-
&rtorsup->rtorsu_trs, -1)) {
2544-
schedule_timeout_idle(HZ);
2545-
continue;
2546-
}
2547-
smp_store_release(&rtorsup->rtorsu_inuse, true);
2548-
t = torture_random(&rtorsup->rtorsu_trs) & 0xfffff; // One per million.
2549-
if (t < 10 * 1000)
2550-
t = 200 * 1000 * 1000;
2551-
hrtimer_start(&rtorsup->rtorsu_hrt, t,
2552-
HRTIMER_MODE_REL | HRTIMER_MODE_SOFT);
2556+
rcu_torture_updown_one(rtorsup);
25532557
}
25542558
torture_hrtimeout_ms(1, 1000, &rcu_torture_updown_rand);
25552559
stutter_wait("rcu_torture_updown");

0 commit comments

Comments
 (0)