123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- #!/bin/sh
- #
- # Test Case 7
- #
- # Runs continuous offline/online of CPUs along with
- # a kernel compilation load.
- export TCID="cpuhotplug07"
- export TST_TOTAL=1
- # Includes:
- . test.sh
- . cpuhotplug_testsuite.sh
- . cpuhotplug_hotplug.sh
- cat <<EOF
- Name: $TCID
- Date: `date`
- Desc: What happens when hotplugging during a heavy workload?
- Issue: Hotplug bugs have been found during kernel compiles
- EOF
- usage()
- {
- cat << EOF
- usage: $0 -c cpu -l loop -d directory
- OPTIONS
- -c cpu which is specified for testing
- -l number of cycle test
- -d kernel directory where run this test
- EOF
- exit 1
- }
- do_clean()
- {
- kill_pid ${KCOMPILE_LOOP_PID}
- }
- while getopts c:l:d: OPTION; do
- case $OPTION in
- c)
- CPU_TO_TEST=$OPTARG;;
- l)
- HOTPLUG07_LOOPS=$OPTARG;;
- d)
- KERNEL_DIR=$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 [ ! -d "${KERNEL_DIR}" ]; then
- tst_brkm TCONF "kernel directory - $KERNEL_DIR - does not exist"
- fi
- if [ -z "${CPU_TO_TEST}" ]; then
- tst_brkm TBROK "usage: ${0##*/} <CPU to offline> <Kernel \
- source code directory>"
- 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
- 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
- cpuhotplug_do_kcompile_loop $KERNEL_DIR > /dev/null 2>&1 &
- KCOMPILE_LOOP_PID=$!
- tst_resm TINFO "initial CPU affinity for kernel compile is: \
- $(get_affinity_mask ${KCOMPILE_LOOP_PID})"
- sleep 2
- until [ $LOOP_COUNT -gt $HOTPLUG07_LOOPS ]; do
- tst_resm TINFO "Starting loop"
- # Move spin_loop.sh to the CPU to offline.
- set_affinity ${KCOMPILE_LOOP_PID} ${CPU_TO_TEST}
- offline_cpu ${CPU_TO_TEST}
- RC=$?
- echo "Offlining cpu${CPU_TO_TEST}: Return Code = ${RC}"
- NEW_CPU=`ps --pid=${KCOMPILE_LOOP_PID} -o psr --no-headers`
- if [ -z "${NEW_CPU}" ]; then
- tst_brkm TBROK "PID ${KCOMPILE_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
- online_cpu ${CPU_TO_TEST}
- RC=$?
- echo "Onlining cpu${CPU_TO_TEST}: Return Code = ${RC}"
- 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
|