]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
rcutorture: Use finer-grained timeouts for rcu_torture_writer() polling
authorPaul E. McKenney <paulmck@kernel.org>
Mon, 21 Oct 2024 14:07:47 +0000 (07:07 -0700)
committerUladzislau Rezki (Sony) <urezki@gmail.com>
Sat, 14 Dec 2024 16:02:28 +0000 (17:02 +0100)
The rcu_torture_writer() polling currently uses timeouts ranging from
zero to 16 milliseconds to wait for the polled grace period to end.
This works, but it would be better to have a higher probability of
exercising races with the code that cleans up after a grace period.
This commit therefore switches from these millisecond-scale timeouts
to timeouts ranging from zero to 128 microseconds, and with a full
microsecond's worth of timeout fuzz.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
kernel/rcu/rcutorture.c

index 0bc6fc582215306ac5581c86c89f2fb160c37b8c..6067f2740247d8603f1b342b5a31f4fb20f4f469 100644 (file)
@@ -1561,8 +1561,8 @@ rcu_torture_writer(void *arg)
                                                        break;
                                                }
                                        WARN_ON_ONCE(ulo_size > 0 && i >= ulo_size);
-                                       torture_hrtimeout_jiffies(torture_random(&rand) % 16,
-                                                                 &rand);
+                                       torture_hrtimeout_us(torture_random(&rand) % 128, 1000,
+                                                            &rand);
                                }
                                rcu_torture_pipe_update(old_rp);
                                break;
@@ -1582,8 +1582,8 @@ rcu_torture_writer(void *arg)
                                                        break;
                                                }
                                        WARN_ON_ONCE(rgo_size > 0 && i >= rgo_size);
-                                       torture_hrtimeout_jiffies(torture_random(&rand) % 16,
-                                                                 &rand);
+                                       torture_hrtimeout_us(torture_random(&rand) % 128, 1000,
+                                                            &rand);
                                }
                                rcu_torture_pipe_update(old_rp);
                                break;
@@ -1592,8 +1592,8 @@ rcu_torture_writer(void *arg)
                                gp_snap = cur_ops->start_gp_poll_exp();
                                rcu_torture_writer_state = RTWS_POLL_WAIT_EXP;
                                while (!cur_ops->poll_gp_state_exp(gp_snap))
-                                       torture_hrtimeout_jiffies(torture_random(&rand) % 16,
-                                                                 &rand);
+                                       torture_hrtimeout_us(torture_random(&rand) % 128, 1000,
+                                                            &rand);
                                rcu_torture_pipe_update(old_rp);
                                break;
                        case RTWS_POLL_GET_EXP_FULL:
@@ -1601,8 +1601,8 @@ rcu_torture_writer(void *arg)
                                cur_ops->start_gp_poll_exp_full(&gp_snap_full);
                                rcu_torture_writer_state = RTWS_POLL_WAIT_EXP_FULL;
                                while (!cur_ops->poll_gp_state_full(&gp_snap_full))
-                                       torture_hrtimeout_jiffies(torture_random(&rand) % 16,
-                                                                 &rand);
+                                       torture_hrtimeout_us(torture_random(&rand) % 128, 1000,
+                                                            &rand);
                                rcu_torture_pipe_update(old_rp);
                                break;
                        case RTWS_SYNC: