This fixed by:
commit bb2bc55a694d45cdeda91b6f28ab2adec28125ef
Author: Mike Galbraith <[email protected]>
Date: Wed Jan 28 04:53:55 2015 +0100
sched: Fix crash if cpuset_cpumask_can_shrink() is passed an empty cpumask
Signed-off-by: Zeng Linggang <[email protected]>
---
.../controllers/cpuset/cpuset_regression_test.sh | 151 +++++++++++++++++++++
1 file changed, 151 insertions(+)
create mode 100755
testcases/kernel/controllers/cpuset/cpuset_regression_test.sh
diff --git a/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh
b/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh
new file mode 100755
index 0000000..7d484f5
--- /dev/null
+++ b/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh
@@ -0,0 +1,151 @@
+#!/bin/sh
+#
+# Copyright (c) 2015 Fujitsu Ltd.
+# Author: Zeng Linggang <[email protected]>
+#
+# 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
+
+ tst_kvercmp 3 18 0
+ if [ $? -eq 0 ]; then
+ tst_brkm TCONF "Test must be run with kernel 3.18.0 or newer"
+ fi
+
+ local cpu_num=$(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 [ "${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
+
+ if [ -n ${cpu_exclusive_value} -a ${cpu_exclusive_value} -ne 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
+
+ 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
--
1.8.3.1
------------------------------------------------------------------------------
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list