From: "Paul E. McKenney" <paul...@kernel.org>

[ Upstream commit c64659ef29e3901be0900ec6fb0485fa3dbdcfd8 ]

Even when the kernel panics and qemu dies, runs with jitter enabled will
continue uselessly until the jitter.sh processes terminate.  This can
be annoying if a planned one-hour run instead dies during boot.

This commit therefore kills the jitter.sh processes when the run ends
more than one minute prior to the termination time specified by the
kvm.sh --duration argument or its default.

Signed-off-by: Paul E. McKenney <paul...@kernel.org>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 .../selftests/rcutorture/bin/kvm-test-1-run.sh     | 14 ++++++++++++++
 tools/testing/selftests/rcutorture/bin/kvm.sh      |  5 ++++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/rcutorture/bin/kvm-test-1-run.sh 
b/tools/testing/selftests/rcutorture/bin/kvm-test-1-run.sh
index 33c6696197364..a0e01a69d0d25 100755
--- a/tools/testing/selftests/rcutorture/bin/kvm-test-1-run.sh
+++ b/tools/testing/selftests/rcutorture/bin/kvm-test-1-run.sh
@@ -197,6 +197,20 @@ do
                                echo "ps -fp $killpid" >> $resdir/Warnings 2>&1
                                ps -fp $killpid >> $resdir/Warnings 2>&1
                        fi
+                       # Reduce probability of PID reuse by allowing a 
one-minute buffer
+                       if test $((kruntime + 60)) -lt $seconds && test -s 
"$resdir/../jitter_pids"
+                       then
+                               awk < "$resdir/../jitter_pids" '
+                               NF > 0 {
+                                       pidlist = pidlist " " $1;
+                                       n++;
+                               }
+                               END {
+                                       if (n > 0) {
+                                               print "kill " pidlist;
+                                       }
+                               }' | sh
+                       fi
                else
                        echo ' ---' `date`: "Kernel done"
                fi
diff --git a/tools/testing/selftests/rcutorture/bin/kvm.sh 
b/tools/testing/selftests/rcutorture/bin/kvm.sh
index 72518580df236..a9a6f81d9564c 100755
--- a/tools/testing/selftests/rcutorture/bin/kvm.sh
+++ b/tools/testing/selftests/rcutorture/bin/kvm.sh
@@ -404,8 +404,11 @@ function dump(first, pastlast, batchnum)
        print "if test -n \"$needqemurun\""
        print "then"
        print "\techo ---- Starting kernels. `date` | tee -a " rd "log";
-       for (j = 0; j < njitter; j++)
+       print "\techo > " rd "jitter_pids"
+       for (j = 0; j < njitter; j++) {
                print "\tjitter.sh " j " " dur " " ja[2] " " ja[3] "&"
+               print "\techo $! >> " rd "jitter_pids"
+       }
        print "\twait"
        print "\techo ---- All kernel runs complete. `date` | tee -a " rd "log";
        print "else"
-- 
2.27.0

Reply via email to