This fixed by: commit bb2bc55a694d45cdeda91b6f28ab2adec28125ef Author: Mike Galbraith <umgwanakikb...@gmail.com> 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 <zenglg...@cn.fujitsu.com> --- .../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 <zenglg...@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 + + 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 Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list