diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2013-10-04 16:15:55 -0400 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2013-12-03 13:11:15 -0500 |
commit | 315c540d46f8f11fe2a84e627d9473e90441ae96 (patch) | |
tree | 24544028c66196efce7dcd113a51549c04585fc5 /tools/testing | |
parent | 2bcdf4e31ae4e215b1e61831d9defa3632cb7bd3 (diff) |
rcutorture: Refactor to enable non-x86 architectures
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 <paulmck@linux.vnet.ibm.com>
Cc: Greg KH <gregkh@linuxfoundation.org>
Diffstat (limited to 'tools/testing')
-rw-r--r-- | tools/testing/selftests/rcutorture/bin/functions.sh | 78 | ||||
-rwxr-xr-x | tools/testing/selftests/rcutorture/bin/kvm-test-1-rcu.sh | 27 | ||||
-rw-r--r-- | 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 () { | |||
78 | exit 1 | 78 | exit 1 |
79 | fi | 79 | fi |
80 | } | 80 | } |
81 | |||
82 | # identify_qemu_append qemu-cmd | ||
83 | # | ||
84 | # Output arguments for the qemu "-append" string based on CPU type | ||
85 | # and the RCU_QEMU_INTERACTIVE environment variable. | ||
86 | identify_qemu_append () { | ||
87 | case "$1" in | ||
88 | qemu-system-x86_64|qemu-system-i386) | ||
89 | echo noapic selinux=0 initcall_debug debug | ||
90 | ;; | ||
91 | esac | ||
92 | if test -n "$RCU_QEMU_INTERACTIVE" | ||
93 | then | ||
94 | echo root=/dev/sda | ||
95 | else | ||
96 | echo console=ttyS0 | ||
97 | fi | ||
98 | } | ||
99 | |||
100 | # identify_qemu_args qemu-cmd serial-file | ||
101 | # | ||
102 | # Output arguments for qemu arguments based on the RCU_QEMU_MAC | ||
103 | # and RCU_QEMU_INTERACTIVE environment variables. | ||
104 | identify_qemu_args () { | ||
105 | case "$1" in | ||
106 | qemu-system-x86_64|qemu-system-i386) | ||
107 | ;; | ||
108 | qemu-system-ppc64) | ||
109 | echo -enable-kvm -M pseries -cpu POWER7 -nodefaults | ||
110 | echo -device spapr-vscsi | ||
111 | if test -n "$RCU_QEMU_INTERACTIVE" -a -n "$RCU_QEMU_MAC" | ||
112 | then | ||
113 | echo -device spapr-vlan,netdev=net0,mac=$RCU_QEMU_MAC | ||
114 | echo -netdev bridge,br=br0,id=net0 | ||
115 | elif test -n "$RCU_QEMU_INTERACTIVE" | ||
116 | then | ||
117 | echo -net nic -net user | ||
118 | fi | ||
119 | ;; | ||
120 | esac | ||
121 | if test -n "$RCU_QEMU_INTERACTIVE" | ||
122 | then | ||
123 | echo -monitor stdio -serial pty -S | ||
124 | else | ||
125 | echo -serial file:$2 | ||
126 | fi | ||
127 | } | ||
128 | |||
129 | # identify_qemu_vcpus | ||
130 | # | ||
131 | # Returns the number of virtual CPUs available to the aggregate of the | ||
132 | # guest OSes. | ||
133 | identify_qemu_vcpus () { | ||
134 | lscpu | grep '^CPU(s):' | sed -e 's/CPU(s)://' | ||
135 | } | ||
136 | |||
137 | # specify_qemu_cpus qemu-cmd qemu-args #cpus | ||
138 | # | ||
139 | # Appends a string containing "-smp XXX" to qemu-args, unless the incoming | ||
140 | # qemu-args already contains "-smp". | ||
141 | specify_qemu_cpus () { | ||
142 | local nt; | ||
143 | |||
144 | if echo $2 | grep -q -e -smp | ||
145 | then | ||
146 | echo $2 | ||
147 | else | ||
148 | case "$1" in | ||
149 | qemu-system-x86_64|qemu-system-i386) | ||
150 | echo $2 -smp $3 | ||
151 | ;; | ||
152 | qemu-system-ppc64) | ||
153 | nt="`lscpu | grep '^NUMA node0' | sed -e 's/^[^,]*,\([0-9]*\),.*$/\1/'`" | ||
154 | echo $2 -smp cores=`expr \( $3 + $nt - 1 \) / $nt`,threads=$nt | ||
155 | ;; | ||
156 | esac | ||
157 | fi | ||
158 | } | ||
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`" | |||
115 | 115 | ||
116 | # Generate -smp qemu argument. | 116 | # Generate -smp qemu argument. |
117 | cpu_count=`configNR_CPUS.sh $config_template` | 117 | cpu_count=`configNR_CPUS.sh $config_template` |
118 | ncpus=`grep '^processor' /proc/cpuinfo | wc -l` | 118 | vcpus=`identify_qemu_vcpus` |
119 | if test $cpu_count -gt $ncpus | 119 | if test $cpu_count -gt $vcpus |
120 | then | 120 | then |
121 | echo CPU count limited from $cpu_count to $ncpus | 121 | echo CPU count limited from $cpu_count to $vcpus |
122 | touch $resdir/Warnings | 122 | touch $resdir/Warnings |
123 | echo CPU count limited from $cpu_count to $ncpus >> $resdir/Warnings | 123 | echo CPU count limited from $cpu_count to $vcpus >> $resdir/Warnings |
124 | cpu_count=$ncpus | 124 | cpu_count=$vcpus |
125 | fi | ||
126 | if echo $qemu_args | grep -q -e -smp | ||
127 | then | ||
128 | echo CPU count specified by caller | ||
129 | else | ||
130 | qemu_args="$qemu_args -smp $cpu_count" | ||
131 | fi | 125 | fi |
126 | qemu_args="`specify_qemu_cpus "$QEMU" "$qemu_args" "$cpu_count"`" | ||
127 | |||
128 | # Generate architecture-specific and interaction-specific qemu arguments | ||
129 | qemu_args="$qemu_args `identify_qemu_args "$QEMU" "$builddir/console.log"`" | ||
130 | |||
131 | # Generate qemu -append arguments | ||
132 | qemu_append="`identify_qemu_append "$QEMU"`" | ||
132 | 133 | ||
133 | # Generate CPU-hotplug boot parameters | 134 | # Generate CPU-hotplug boot parameters |
134 | boot_args="`rcutorture_param_onoff "$boot_args" $builddir/.config`" | 135 | boot_args="`rcutorture_param_onoff "$boot_args" $builddir/.config`" |
@@ -137,8 +138,8 @@ boot_args="`rcutorture_param_n_barrier_cbs "$boot_args"`" | |||
137 | # Pull in Kconfig-fragment boot parameters | 138 | # Pull in Kconfig-fragment boot parameters |
138 | boot_args="`configfrag_boot_params "$boot_args" "$config_template"`" | 139 | boot_args="`configfrag_boot_params "$boot_args" "$config_template"`" |
139 | 140 | ||
140 | 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 | 141 | 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 |
141 | $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" & | 142 | $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" & |
142 | qemu_pid=$! | 143 | qemu_pid=$! |
143 | commandcompleted=0 | 144 | commandcompleted=0 |
144 | echo Monitoring qemu job at pid $qemu_pid | 145 | 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 () { | |||
44 | echo " --configs \"config-file list\"" | 44 | echo " --configs \"config-file list\"" |
45 | echo " --datestamp string" | 45 | echo " --datestamp string" |
46 | echo " --duration minutes" | 46 | echo " --duration minutes" |
47 | echo " --interactive" | ||
47 | echo " --kversion vN.NN" | 48 | echo " --kversion vN.NN" |
49 | echo " --mac nn:nn:nn:nn:nn:nn" | ||
48 | echo " --qemu-cmd qemu-system-..." | 50 | echo " --qemu-cmd qemu-system-..." |
49 | echo " --results absolute-pathname" | 51 | echo " --results absolute-pathname" |
50 | echo " --relbuilddir relative-pathname" | 52 | echo " --relbuilddir relative-pathname" |
@@ -96,11 +98,19 @@ do | |||
96 | dur=$2 | 98 | dur=$2 |
97 | shift | 99 | shift |
98 | ;; | 100 | ;; |
101 | --interactive) | ||
102 | RCU_QEMU_INTERACTIVE=1; export RCU_QEMU_INTERACTIVE | ||
103 | ;; | ||
99 | --kversion) | 104 | --kversion) |
100 | checkarg --kversion "(kernel version)" $# "$2" '^v[0-9.]*$' error | 105 | checkarg --kversion "(kernel version)" $# "$2" '^v[0-9.]*$' error |
101 | kversion=$2 | 106 | kversion=$2 |
102 | shift | 107 | shift |
103 | ;; | 108 | ;; |
109 | --mac) | ||
110 | checkarg --mac "(MAC address)" $# "$2" '^\([0-9a-fA-F]\{2\}:\)\{5\}[0-9a-fA-F]\{2\}$' error | ||
111 | RCU_QEMU_MAC=$2; export RCU_QEMU_MAC | ||
112 | shift | ||
113 | ;; | ||
104 | --qemu-cmd) | 114 | --qemu-cmd) |
105 | checkarg --qemu-cmd "(qemu-system-...)" $# "$2" 'qemu-system-' '^--' | 115 | checkarg --qemu-cmd "(qemu-system-...)" $# "$2" 'qemu-system-' '^--' |
106 | RCU_QEMU_CMD="$2"; export RCU_QEMU_CMD | 116 | RCU_QEMU_CMD="$2"; export RCU_QEMU_CMD |