#!/bin/sh
#
# Test Case 4
#
export TCID="cpuhotplug04"
export TST_TOTAL=1
# Includes:
. test.sh
. cpuhotplug_testsuite.sh
. cpuhotplug_hotplug.sh
cat <<EOF
Name: $TCID
Date: `date`
Desc: Does it prevent us from offlining the last CPU?
EOF
usage()
{
cat << EOF
usage: $0 -l loop
OPTIONS
-l number of cycle test
EOF
exit 1
}
do_clean()
{
# Online the ones that were on initially
# Restore CPU states
set_all_cpu_states "$cpu_states"
}
while getopts l: OPTION; do
case $OPTION in
l)
HOTPLUG04_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 [ $(get_hotplug_cpus_num) -lt 1 ]; then
tst_brkm TCONF "system doesn't have at least one hotpluggable CPU"
fi
TST_CLEANUP=do_clean
cpu_states=$(get_all_cpu_states)
until [ $LOOP_COUNT -gt $HOTPLUG04_LOOPS ]; do
# Online all the hotpluggable CPUs
for i in $(get_hotplug_cpus); do
if ! cpu_is_online $i; then
if ! online_cpu $i; then
tst_brkm TBROK "$i can not be onlined"
fi
fi
done
# Now offline them
cpu=0
for i in $(get_hotplug_cpus); do
cpu=$((cpu + 1))
# If all the CPUs are hotpluggable, we expect
# that the kernel will refuse to offline the last CPU.
# If only some of the CPUs are hotpluggable,
# they all can be offlined.
if [ $cpu -eq $cpus_num ]; then
if offline_cpu $i 2> /dev/null; then
tst_brkm TFAIL "Have we just offlined the last CPU?"
else
tst_resm TPASS "System prevented us from offlining the last CPU - $i"
fi
else
if ! offline_cpu $i; then
tst_brkm TFAIL "Could not offline $i"
fi
fi
done
LOOP_COUNT=$((LOOP_COUNT+1))
done
tst_resm TPASS "Success"
tst_exit