From: "Paul E. McKenney" <paul...@linux.vnet.ibm.com>

This commit expands the checks for what architecture is running to generate
additional qemu-system- commands, then uses the resulting qemu-system-
command name to choose different qemu arguments as needed for different
architectures.

Signed-off-by: Paul E. McKenney <paul...@linux.vnet.ibm.com>
Cc: Greg KH <gre...@linuxfoundation.org>
---
 .../testing/selftests/rcutorture/bin/functions.sh  | 78 ++++++++++++++++++++++
 .../selftests/rcutorture/bin/kvm-test-1-rcu.sh     | 27 ++++----
 tools/testing/selftests/rcutorture/bin/kvm.sh      | 10 +++
 3 files changed, 102 insertions(+), 13 deletions(-)

diff --git a/tools/testing/selftests/rcutorture/bin/functions.sh 
b/tools/testing/selftests/rcutorture/bin/functions.sh
index c974414ef7a5..d0d19ebd2a94 100644
--- a/tools/testing/selftests/rcutorture/bin/functions.sh
+++ b/tools/testing/selftests/rcutorture/bin/functions.sh
@@ -78,3 +78,81 @@ identify_qemu () {
                exit 1
        fi
 }
+
+# identify_qemu_append qemu-cmd
+#
+# Output arguments for the qemu "-append" string based on CPU type
+# and the RCU_QEMU_INTERACTIVE environment variable.
+identify_qemu_append () {
+       case "$1" in
+       qemu-system-x86_64|qemu-system-i386)
+               echo noapic selinux=0 initcall_debug debug
+               ;;
+       esac
+       if test -n "$RCU_QEMU_INTERACTIVE"
+       then
+               echo root=/dev/sda
+       else
+               echo console=ttyS0
+       fi
+}
+
+# identify_qemu_args qemu-cmd serial-file
+#
+# Output arguments for qemu arguments based on the RCU_QEMU_MAC
+# and RCU_QEMU_INTERACTIVE environment variables.
+identify_qemu_args () {
+       case "$1" in
+       qemu-system-x86_64|qemu-system-i386)
+               ;;
+       qemu-system-ppc64)
+               echo -enable-kvm -M pseries -cpu POWER7 -nodefaults
+               echo -device spapr-vscsi
+               if test -n "$RCU_QEMU_INTERACTIVE" -a -n "$RCU_QEMU_MAC"
+               then
+                       echo -device spapr-vlan,netdev=net0,mac=$RCU_QEMU_MAC
+                       echo -netdev bridge,br=br0,id=net0
+               elif test -n "$RCU_QEMU_INTERACTIVE"
+               then
+                       echo -net nic -net user
+               fi
+               ;;
+       esac
+       if test -n "$RCU_QEMU_INTERACTIVE"
+       then
+               echo -monitor stdio -serial pty -S
+       else
+               echo -serial file:$2
+       fi
+}
+
+# identify_qemu_vcpus
+#
+# Returns the number of virtual CPUs available to the aggregate of the
+# guest OSes.
+identify_qemu_vcpus () {
+       lscpu | grep '^CPU(s):' | sed -e 's/CPU(s)://'
+}
+
+# specify_qemu_cpus qemu-cmd qemu-args #cpus
+#
+# Appends a string containing "-smp XXX" to qemu-args, unless the incoming
+# qemu-args already contains "-smp".
+specify_qemu_cpus () {
+       local nt;
+
+       if echo $2 | grep -q -e -smp
+       then
+               echo $2
+       else
+               case "$1" in
+               qemu-system-x86_64|qemu-system-i386)
+                       echo $2 -smp $3
+                       ;;
+               qemu-system-ppc64)
+                       nt="`lscpu | grep '^NUMA node0' | sed -e 
's/^[^,]*,\([0-9]*\),.*$/\1/'`"
+                       echo $2 -smp cores=`expr \( $3 + $nt - 1 \) / 
$nt`,threads=$nt
+                       ;;
+               esac
+       fi
+}
diff --git a/tools/testing/selftests/rcutorture/bin/kvm-test-1-rcu.sh 
b/tools/testing/selftests/rcutorture/bin/kvm-test-1-rcu.sh
index 5e2e79b5eaba..9fd546ccb075 100755
--- a/tools/testing/selftests/rcutorture/bin/kvm-test-1-rcu.sh
+++ b/tools/testing/selftests/rcutorture/bin/kvm-test-1-rcu.sh
@@ -115,20 +115,21 @@ QEMU="`identify_qemu $builddir/vmlinux.o`"
 
 # Generate -smp qemu argument.
 cpu_count=`configNR_CPUS.sh $config_template`
-ncpus=`grep '^processor' /proc/cpuinfo | wc -l`
-if test $cpu_count -gt $ncpus
+vcpus=`identify_qemu_vcpus`
+if test $cpu_count -gt $vcpus
 then
-       echo CPU count limited from $cpu_count to $ncpus
+       echo CPU count limited from $cpu_count to $vcpus
        touch $resdir/Warnings
-       echo CPU count limited from $cpu_count to $ncpus >> $resdir/Warnings
-       cpu_count=$ncpus
-fi
-if echo $qemu_args | grep -q -e -smp
-then
-       echo CPU count specified by caller
-else
-       qemu_args="$qemu_args -smp $cpu_count"
+       echo CPU count limited from $cpu_count to $vcpus >> $resdir/Warnings
+       cpu_count=$vcpus
 fi
+qemu_args="`specify_qemu_cpus "$QEMU" "$qemu_args" "$cpu_count"`"
+
+# Generate architecture-specific and interaction-specific qemu arguments
+qemu_args="$qemu_args `identify_qemu_args "$QEMU" "$builddir/console.log"`"
+
+# Generate qemu -append arguments
+qemu_append="`identify_qemu_append "$QEMU"`"
 
 # Generate CPU-hotplug boot parameters
 boot_args="`rcutorture_param_onoff "$boot_args" $builddir/.config`"
@@ -137,8 +138,8 @@ boot_args="`rcutorture_param_n_barrier_cbs "$boot_args"`"
 # Pull in Kconfig-fragment boot parameters
 boot_args="`configfrag_boot_params "$boot_args" "$config_template"`"
 
-echo $QEMU -serial file:$builddir/console.log $qemu_args -m 512 -kernel 
$builddir/arch/x86/boot/bzImage -append \"noapic selinux=0 console=ttyS0 
initcall_debug debug rcutorture.stat_interval=15 
rcutorture.shutdown_secs=$seconds rcutorture.rcutorture_runnable=1 $boot_args\" 
> $resdir/qemu-cmd
-$QEMU -name rcu-test -serial file:$builddir/console.log $qemu_args -m 512 
-kernel $builddir/arch/x86/boot/bzImage -append "noapic selinux=0 console=ttyS0 
initcall_debug debug rcutorture.stat_interval=15 
rcutorture.shutdown_secs=$seconds rcutorture.rcutorture_runnable=1 $boot_args" &
+echo $QEMU $qemu_args -m 512 -kernel $builddir/arch/x86/boot/bzImage -append 
\"$qemu_append rcutorture.stat_interval=15 rcutorture.shutdown_secs=$seconds 
rcutorture.rcutorture_runnable=1 $boot_args\" > $resdir/qemu-cmd
+$QEMU $qemu_args -m 512 -kernel $builddir/arch/x86/boot/bzImage -append 
"$qemu_append rcutorture.stat_interval=15 rcutorture.shutdown_secs=$seconds 
rcutorture.rcutorture_runnable=1 $boot_args" &
 qemu_pid=$!
 commandcompleted=0
 echo Monitoring qemu job at pid $qemu_pid
diff --git a/tools/testing/selftests/rcutorture/bin/kvm.sh 
b/tools/testing/selftests/rcutorture/bin/kvm.sh
index 2af549491f23..979c34134634 100644
--- a/tools/testing/selftests/rcutorture/bin/kvm.sh
+++ b/tools/testing/selftests/rcutorture/bin/kvm.sh
@@ -44,7 +44,9 @@ usage () {
        echo "       --configs \"config-file list\""
        echo "       --datestamp string"
        echo "       --duration minutes"
+       echo "       --interactive"
        echo "       --kversion vN.NN"
+       echo "       --mac nn:nn:nn:nn:nn:nn"
        echo "       --qemu-cmd qemu-system-..."
        echo "       --results absolute-pathname"
        echo "       --relbuilddir relative-pathname"
@@ -96,11 +98,19 @@ do
                dur=$2
                shift
                ;;
+       --interactive)
+               RCU_QEMU_INTERACTIVE=1; export RCU_QEMU_INTERACTIVE
+               ;;
        --kversion)
                checkarg --kversion "(kernel version)" $# "$2" '^v[0-9.]*$' 
error
                kversion=$2
                shift
                ;;
+       --mac)
+               checkarg --mac "(MAC address)" $# "$2" 
'^\([0-9a-fA-F]\{2\}:\)\{5\}[0-9a-fA-F]\{2\}$' error
+               RCU_QEMU_MAC=$2; export RCU_QEMU_MAC
+               shift
+               ;;
        --qemu-cmd)
                checkarg --qemu-cmd "(qemu-system-...)" $# "$2" 'qemu-system-' 
'^--'
                RCU_QEMU_CMD="$2"; export RCU_QEMU_CMD
-- 
1.8.1.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to