126 lines
2.4 KiB
Bash
Executable File
126 lines
2.4 KiB
Bash
Executable File
#!/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
|