#!/bin/sh # # Test Case 3 # export TCID="cpuhotplug03" export TST_TOTAL=1 # Includes: . test.sh . cpuhotplug_testsuite.sh . cpuhotplug_hotplug.sh cat <<EOF Name: $TCID Date: `date` Desc: Do tasks get scheduled to a newly on-lined CPU? EOF usage() { cat << EOF usage: $0 -c cpu -l loop OPTIONS -c cpu which is specified for testing -l number of cycle test EOF exit 1 } # do_clean() # # Callback to be executed when script exits from a user interrupt # or regular program termination # do_clean() { # Kill all the processes we started up and get rid of their pid files if [ -e "/var/run/hotplug4_$$.pid" ]; then for i in `cat /var/run/hotplug4_$$.pid`; do kill_pid $i done rm /var/run/hotplug4_$$.pid fi # Restore CPU states set_all_cpu_states "$cpu_states" } while getopts c:l: OPTION; do case $OPTION in c) CPU_TO_TEST=$OPTARG;; l) HOTPLUG03_LOOPS=$OPTARG;; ?) usage;; esac done LOOP_COUNT=1 cpus_num=$(get_present_cpus_num) if [ $cpus_num -lt 2 ]; then tst_brkm TCONF "system doesn't have required CPU hotplug support" fi if [ -z $CPU_TO_TEST ]; then tst_brkm TBROK "usage: ${0##*} <CPU to online>" fi # Validate the specified CPU is available if ! cpu_is_valid "${CPU_TO_TEST}" ; then tst_brkm TCONF "cpu${CPU_TO_TEST} doesn't support hotplug" fi TST_CLEANUP=do_clean cpu_states=$(get_all_cpu_states) until [ $LOOP_COUNT -gt $HOTPLUG03_LOOPS ]; do # Turns on all CPUs for i in $( get_hotplug_cpus ); do if ! cpu_is_online $i; then if ! online_cpu $i; then tst_brkm TBROK "Could not online cpu $i" fi fi done if ! offline_cpu ${CPU_TO_TEST} ; then tst_resm TBROK "CPU${CPU_TO_TEST} cannot be offlined" fi # Start up a number of processes equal to twice the number of # CPUs we have. This is to help ensure we've got enough processes # that at least one will migrate to the new CPU. Store the PIDs # so we can kill them later. number_of_procs=$((cpus_num*2)) until [ $number_of_procs -eq 0 ]; do cpuhotplug_do_spin_loop > /dev/null 2>&1 & echo $! >> /var/run/hotplug4_$$.pid number_of_procs=$((number_of_procs-1)) done ps aux | head -n 1 ps aux | grep cpuhotplug_do_spin_loop # Online the CPU tst_resm TINFO "Onlining CPU ${CPU_TO_TEST}" if ! online_cpu ${CPU_TO_TEST}; then tst_brkm TBROK "CPU${CPU_TO_TEST} cannot be onlined" fi sleep 1 # Verify at least one process has migrated to the new CPU ps -o psr -o command --no-headers -C cpuhotplug_do_spin_loop if [ $? -ne 0 ]; then tst_brkm TBROK "No cpuhotplug_do_spin_loop processes \ found on any processor" fi NUM=`ps -o psr -o command --no-headers -C cpuhotplug_do_spin_loop \ | sed -e "s/^ *//" | cut -d' ' -f 1 | grep "^${CPU_TO_TEST}$" \ | wc -l` if [ $NUM -lt 1 ]; then tst_resm TFAIL "No cpuhotplug_do_spin_loop processes found on \ CPU${CPU_TO_TEST}" tst_exit fi do_clean LOOP_COUNT=$((LOOP_COUNT+1)) done tst_resm TPASS "$NUM cpuhotplug_do_spin_loop processes found on \ CPU${CPU_TO_TEST}" tst_exit