151 lines
3.7 KiB
Bash
Executable File
151 lines
3.7 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2015 Fujitsu Ltd.
|
|
# Author: Zeng Linggang <zenglg.jy@cn.fujitsu.com>
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
#
|
|
# This is a regression test for commit:
|
|
# http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/
|
|
# ?id=bb2bc55
|
|
#
|
|
|
|
TCID=cpuset_regression_test
|
|
TST_TOTAL=1
|
|
. test.sh
|
|
|
|
setup()
|
|
{
|
|
tst_require_root
|
|
|
|
if tst_kvcmp -lt "3.18"; then
|
|
tst_brkm TCONF "Test must be run with kernel 3.18.0 or newer"
|
|
fi
|
|
|
|
local cpu_num=$(tst_getconf _NPROCESSORS_ONLN)
|
|
if [ $cpu_num -lt 2 ]; then
|
|
tst_brkm TCONF "We need 2 cpus at least to have test"
|
|
fi
|
|
|
|
tst_tmpdir
|
|
|
|
TST_CLEANUP=cleanup
|
|
|
|
# We need to mount cpuset if it is not found.
|
|
mount_flag=0
|
|
grep -w cpuset /proc/mounts > tmpfile
|
|
if [ $? -eq 0 ]; then
|
|
root_cpuset_dir=$(cat tmpfile | awk '{print $2}')
|
|
else
|
|
root_cpuset_dir="cpuset_test"
|
|
|
|
ROD_SILENT mkdir -p ${root_cpuset_dir}
|
|
|
|
ROD_SILENT mount -t cpuset cpuset ${root_cpuset_dir}
|
|
|
|
mount_flag=1
|
|
fi
|
|
|
|
if [ -f ${root_cpuset_dir}/cpuset.cpu_exclusive ]; then
|
|
cpu_exclusive=cpuset.cpu_exclusive
|
|
cpus=cpuset.cpus
|
|
elif [ -f ${root_cpuset_dir}/cpu_exclusive ]; then
|
|
cpu_exclusive=cpu_exclusive
|
|
cpus=cpus
|
|
else
|
|
tst_brkm TBROK "Both cpuset.cpu_exclusive and cpu_exclusive" \
|
|
"do not exist."
|
|
fi
|
|
|
|
cpu_exclusive_value=$(cat ${root_cpuset_dir}/${cpu_exclusive})
|
|
if [ "${cpu_exclusive_value}" != "1" ];then
|
|
echo 1 > ${root_cpuset_dir}/${cpu_exclusive}
|
|
if [ $? -ne 0 ]; then
|
|
tst_brkm TBROK "'echo 1 >" \
|
|
"${root_cpuset_dir}/${cpu_exclusive}'" \
|
|
"failed"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
cleanup()
|
|
{
|
|
if [ -d "${root_cpuset_dir}/testdir" ]; then
|
|
rmdir ${root_cpuset_dir}/testdir
|
|
fi
|
|
|
|
if [ "$cpu_exclusive_value" != 1 ]; then
|
|
# Need to flush, or may be output:
|
|
# "write error: Device or resource busy"
|
|
sync
|
|
|
|
echo ${cpu_exclusive_value} > \
|
|
${root_cpuset_dir}/${cpu_exclusive}
|
|
fi
|
|
|
|
if [ "${mount_flag}" = "1" ]; then
|
|
umount ${root_cpuset_dir}
|
|
if [ $? -ne 0 ]; then
|
|
tst_resm TWARN "'umount ${root_cpuset_dir}' failed"
|
|
fi
|
|
|
|
if [ -d "${root_cpuset_dir}" ]; then
|
|
rmdir ${root_cpuset_dir}
|
|
fi
|
|
fi
|
|
|
|
tst_rmdir
|
|
}
|
|
|
|
cpuset_test()
|
|
{
|
|
ROD_SILENT mkdir ${root_cpuset_dir}/testdir
|
|
|
|
# Creat an exclusive cpuset.
|
|
echo 1 > ${root_cpuset_dir}/testdir/${cpu_exclusive}
|
|
if [ $? -ne 0 ]; then
|
|
tst_brkm TFAIL "'echo 1 >" \
|
|
"${root_cpuset_dir}/testdir/${cpu_exclusive}'" \
|
|
"failed"
|
|
fi
|
|
|
|
local cpu_exclusive_tmp=$(cat \
|
|
${root_cpuset_dir}/testdir/${cpu_exclusive})
|
|
if [ "${cpu_exclusive_tmp}" != "1" ]; then
|
|
tst_brkm TFAIL "${cpu_exclusive} is '${cpu_exclusive_tmp}'," \
|
|
"expected '1'"
|
|
fi
|
|
|
|
# ${cpus} is empty at the begin, that maybe make the system *crash*.
|
|
echo 0-1 > ${root_cpuset_dir}/testdir/${cpus}
|
|
if [ $? -ne 0 ]; then
|
|
tst_brkm TFAIL "'echo 0-1 >" \
|
|
"${root_cpuset_dir}/testdir/${cpus}' failed"
|
|
fi
|
|
|
|
local cpus_value=$(cat ${root_cpuset_dir}/testdir/${cpus})
|
|
if [ "${cpus_value}" != "0-1" ]; then
|
|
tst_brkm TFAIL "${cpus} is '${cpus_value}', expected '0-1'"
|
|
fi
|
|
|
|
tst_resm TPASS "Bug is not reproduced"
|
|
}
|
|
|
|
setup
|
|
|
|
cpuset_test
|
|
|
|
tst_exit
|