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>
---
 runtest/controllers                                |   2 +
 .../controllers/cpuset/cpuset_regression_test.sh   | 151 +++++++++++++++++++++
 2 files changed, 153 insertions(+)
 create mode 100755 
testcases/kernel/controllers/cpuset/cpuset_regression_test.sh

diff --git a/runtest/controllers b/runtest/controllers
index 81a9a10..b0966b8 100644
--- a/runtest/controllers
+++ b/runtest/controllers
@@ -25,4 +25,6 @@ cpuset_memory cpuset_memory_testset.sh
 cpuset_memory_pressure cpuset_memory_pressure_testset.sh
 cpuset_memory_spread   cpuset_memory_spread_testset.sh
 
+cpuset_regression_test cpuset_regression_test.sh
+
 cgroup_xattr   cgroup_xattr
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.9.3




------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to