]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
torture: Allow disabling of boottime CPU-hotplug torture operations
authorPaul E. McKenney <paulmck@kernel.org>
Fri, 6 Dec 2019 23:02:59 +0000 (15:02 -0800)
committerPaul E. McKenney <paulmck@kernel.org>
Fri, 21 Feb 2020 00:03:30 +0000 (16:03 -0800)
In theory, RCU-hotplug operations are supposed to work as soon as there
is more than one CPU online.  However, in practice, in normal production
there is no way to make them happen until userspace is up and running.
Besides which, on smaller systems, rcutorture doesn't start doing hotplug
operations until 30 seconds after the start of boot, which on most
systems also means the better part of 30 seconds after the end of boot.
This commit therefore provides a new torture.disable_onoff_at_boot kernel
boot parameter that suppresses CPU-hotplug torture operations until
about the time that init is spawned.

Of course, if you know of a need for boottime CPU-hotplug operations,
then you should avoid passing this argument to any of the torture tests.
You might also want to look at the splats linked to below.

Link: https://lore.kernel.org/lkml/20191206185208.GA25636@paulmck-ThinkPad-P72/
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Documentation/admin-guide/kernel-parameters.txt
kernel/torture.c

index ee007b5c874f14533570b5158b39f6fd29c7a33b..868f59a48580dfb768086474c13888ce6f23dab3 100644 (file)
                        topology updates sent by the hypervisor to this
                        LPAR.
 
+       torture.disable_onoff_at_boot= [KNL]
+                       Prevent the CPU-hotplug component of torturing
+                       until after init has spawned.
+
        tp720=          [HW,PS2]
 
        tpm_suspend_pcr=[HW,TPM]
index e377b5b17de8820702c4875024887e0dac1d403d..8683375dc0c7488ef59da4d3413cb64f060c8088 100644 (file)
@@ -42,6 +42,9 @@
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Paul E. McKenney <paulmck@linux.ibm.com>");
 
+static bool disable_onoff_at_boot;
+module_param(disable_onoff_at_boot, bool, 0444);
+
 static char *torture_type;
 static int verbose;
 
@@ -229,6 +232,10 @@ torture_onoff(void *arg)
                VERBOSE_TOROUT_STRING("torture_onoff end holdoff");
        }
        while (!torture_must_stop()) {
+               if (disable_onoff_at_boot && !rcu_inkernel_boot_has_ended()) {
+                       schedule_timeout_interruptible(HZ / 10);
+                       continue;
+               }
                cpu = (torture_random(&rand) >> 4) % (maxcpu + 1);
                if (!torture_offline(cpu,
                                     &n_offline_attempts, &n_offline_successes,