#!/bin/sh # # Test Case 2 # export TCID="cpuhotplug02" export TST_TOTAL=1 # Includes: . test.sh . cpuhotplug_testsuite.sh . cpuhotplug_hotplug.sh cat <<EOF Name: $TCID Date: `date` Desc: What happens to a process when its CPU is offlined? 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_pid ${SPIN_LOOP_PID} } while getopts c:l: OPTION; do case $OPTION in c) CPU_TO_TEST=$OPTARG;; l) HOTPLUG02_LOOPS=$OPTARG;; ?) usage;; esac done LOOP_COUNT=1 if [ $(get_present_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 # Validate the specified CPU is online; if not, online it if ! cpu_is_online "${CPU_TO_TEST}" ; then if ! online_cpu ${CPU_TO_TEST}; then tst_brkm TBROK "CPU${CPU_TO_TEST} cannot be onlined" fi fi TST_CLEANUP=do_clean # Start up a process that just uses CPU cycles cpuhotplug_do_spin_loop > /dev/null& SPIN_LOOP_PID=$! sleep 5 until [ $LOOP_COUNT -gt $HOTPLUG02_LOOPS ]; do # Move spin_loop.sh to the CPU to offline. set_affinity ${SPIN_LOOP_PID} ${CPU_TO_TEST} # Verify the process migrated to the CPU we intended it to go to offline_cpu ${CPU_TO_TEST} NEW_CPU=`ps --pid=${SPIN_LOOP_PID} -o psr --no-headers` if [ -z "${NEW_CPU}" ]; then tst_brkm TBROK "PID ${SPIN_LOOP_PID} no longer running" fi if [ ${CPU_TO_TEST} = ${NEW_CPU} ]; then tst_resm TFAIL "process did not change from CPU ${NEW_CPU}" tst_exit fi # Turn the CPU back online just to see what happens. online_cpu ${CPU_TO_TEST} LOOP_COUNT=$((LOOP_COUNT+1)) done tst_resm TPASS "turned off CPU ${CPU_TO_TEST}, process migrated to \ CPU ${NEW_CPU}" sleep 2 tst_exit