torture: Make jitter.sh handle large systems
authorPaul E. McKenney <paulmck@kernel.org>
Wed, 10 Feb 2021 21:25:58 +0000 (13:25 -0800)
committerPaul E. McKenney <paulmck@kernel.org>
Mon, 8 Mar 2021 22:21:41 +0000 (14:21 -0800)
The current jitter.sh script expects cpumask bits to fit into whatever
the awk interpreter uses for an integer, which clearly does not hold for
even medium-sized systems these days.  This means that on a large system,
only the first 32 or 64 CPUs (depending) are subjected to jitter.sh
CPU-time perturbations.  This commit therefore computes a given CPU's
cpumask using text manipulation rather than arithmetic shifts.

Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
tools/testing/selftests/rcutorture/bin/jitter.sh

index 188b864..3a856ec 100755 (executable)
@@ -67,10 +67,10 @@ do
                srand(n + me + systime());
                ncpus = split(cpus, ca);
                curcpu = ca[int(rand() * ncpus + 1)];
-               mask = lshift(1, curcpu);
-               if (mask + 0 <= 0)
-                       mask = 1;
-               printf("%#x\n", mask);
+               z = "";
+               for (i = 1; 4 * i <= curcpu; i++)
+                       z = z "0";
+               print "0x" 2 ^ (curcpu % 4) z;
        }' < /dev/null`
        n=$(($n+1))
        if ! taskset -p $cpumask $$ > /dev/null 2>&1