On Sat, Sep 19, 2026 at 01:06:06AM +0000, Zhouyi Zhou wrote:
> Discovered in the Open Source Lab of Oregon State University when running
> torture.sh on a ppc64le VM.  Two bugs were exposed:
> 
> 1. The kvm-transform.sh call hard-coded "bzImage" as the kernel image
>    name.  On ppc64, the boot image is vmlinux, not bzImage, so the
>    re-run failed to find the image.  Fix this by extracting the QEMU
>    binary from the qemu-cmd file and passing it to identify_boot_image()
>    to obtain the correct architecture-specific image name, the same way
>    kvm.sh already does.
> 
> 2. The rm -f invocation on re-run listed vmlinux among the files to
>    delete.  On ppc64 vmlinux is the boot image, so deleting it broke
>    the re-run on that architecture.  Drop vmlinux from the unconditional
>    list, and instead conditionally delete it only when the boot image
>    basename is not vmlinux.
> 
> In addition, identify qemu_binary before the copy step so that on
> non-PowerPC systems (where vmlinux is not the boot image) the vmlinux
> file can be removed immediately after the run directory is copied,
> saving storage before any tests run.  This also eliminates the
> per-iteration re-computation of qemu_binary and boot_image inside
> the qemu-cmd transform loop.
> 
> Tested on a local x86_64 machine and on a PPC VM of the Open Source Lab
> of Oregon State University.
> 
> Signed-off-by: Zhouyi Zhou <[email protected]>

Queued for review and testing, thank you!

                                                        Thanx, Paul

> ---
> Changes in v3:
>  - Identify qemu_binary and boot_image earlier, before the copy step,
>    so that vmlinux can be removed right after copying the run directory
>    on non-PowerPC systems, saving storage.  This also eliminates the
>    per-iteration re-computation of qemu_binary and boot_image inside
>    the qemu-cmd transform loop.
> Suggested-by: Paul E. McKenney <[email protected]>
> ---
>  tools/testing/selftests/rcutorture/bin/kvm-again.sh | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/testing/selftests/rcutorture/bin/kvm-again.sh 
> b/tools/testing/selftests/rcutorture/bin/kvm-again.sh
> index b5239b52cb5d..9060b3dc8926 100755
> --- a/tools/testing/selftests/rcutorture/bin/kvm-again.sh
> +++ b/tools/testing/selftests/rcutorture/bin/kvm-again.sh
> @@ -180,6 +180,9 @@ fi
>  
>  echo ---- Re-run results directory: $rundir
>  
> +qemu_binary="$(find "$oldrun" -maxdepth 2 -name 'qemu-cmd' -type f 
> 2>/dev/null | head -1 | xargs -r grep -v '^#' 2>/dev/null | awk 'NF { print 
> $1; exit }')"
> +boot_image="`identify_boot_image "$qemu_binary"`"
> +
>  if test "$oldrun" != "$rundir"
>  then
>       # Copy old run directory tree over and adjust.
> @@ -189,7 +192,7 @@ then
>               echo "Cannot copy from $oldrun to $rundir."
>               usage
>       fi
> -     rm -f 
> "$rundir"/*/{console.log,console.log.diags,qemu_pid,qemu-pid,qemu-retval,Warnings,kvm-test-1-run.sh.out,kvm-test-1-run-qemu.sh.out,vmlinux}
>  "$rundir"/log
> +     rm -f 
> "$rundir"/*/{console.log,console.log.diags,qemu_pid,qemu-pid,qemu-retval,Warnings,kvm-test-1-run.sh.out,kvm-test-1-run-qemu.sh.out}
>  "$rundir"/log
>       touch "$rundir/log"
>       echo $scriptname $args | tee -a "$rundir/log"
>       echo $oldrun > "$rundir/re-run"
> @@ -197,6 +200,10 @@ then
>       then
>               $arg_link "$oldrun/../../bin" "$rundir/../.."
>       fi
> +     if test "`basename "$boot_image"`" != vmlinux
> +     then
> +             rm -f "$rundir"/*/vmlinux
> +     fi
>  else
>       # Check for a run having already happened.
>       find "$rundir" -name console.log -print > $T/oldrun-console.log
> @@ -217,7 +224,7 @@ do
>       qemu_cmd_dir="`dirname "$i"`"
>       kernel_dir="`echo $qemu_cmd_dir | sed -e 's/\.[0-9]\+$//'`"
>       jitter_dir="`dirname "$kernel_dir"`"
> -     kvm-transform.sh "$kernel_dir/bzImage" "$qemu_cmd_dir/console.log" 
> "$jitter_dir" "$dur" "$bootargs" < $T/qemu-cmd > $i
> +     kvm-transform.sh "$kernel_dir/`basename $boot_image`" 
> "$qemu_cmd_dir/console.log" "$jitter_dir" "$dur" "$bootargs" < $T/qemu-cmd > 
> $i
>       if test -n "$arg_remote"
>       then
>               echo "# TORTURE_KCONFIG_GDB_ARG=''" >> $i
> -- 
> 2.43.0
> 

Reply via email to