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 | 146 +++++++++++++++++++++ 1 file changed, 146 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..fa06326 --- /dev/null +++ b/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh @@ -0,0 +1,146 @@ +#!/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=$(grep processor /proc/cpuinfo | wc -l) + if [ $cpu_num -lt 2 ]; then + tst_brkm TCONF "We need 2 cpus at least to have test" + fi + + tst_tmpdir +} + +setup1() +{ + # We need to mount cpuset if it is not found. + mount_flag=0 + mount | grep -w cpuset > tmpfile + if [ $? -eq 0 ]; then + root_cpuset_dir=$(cat tmpfile | awk '{print $3}') + rm -rf tmpfile + 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 + + local 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 + + 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_value=$(cat \ + ${root_cpuset_dir}/testdir/${cpu_exclusive}) + if [ "${cpu_exclusive_value}" != "1" ]; then + tst_brkm TFAIL "${cpu_exclusive} is '${cpu_exclusive_value}'," \ + "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 +TST_CLEANUP=cleanup + +setup1 +cpuset_test + +tst_exit -- 1.8.3.1 ------------------------------------------------------------------------------ One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y _______________________________________________ Ltp-list mailing list Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list