blob: f6083756ab0e12ba7273ee8fb9b15fa7eca5a722 [file] [log] [blame]
#!/bin/sh
################################################################################
## ##
## Copyright (c) 2009 FUJITSU LIMITED ##
## Author: Shi Weihua <shiwh@cn.fujitsu.com> ##
## Copyright (c) 2015 Cedric Hnyda <chnyda@suse.com> ##
## Copyright (c) 2015-2016 Cyril Hrubis <chrubis@suse.cz> ##
## ##
## 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 Street, Fifth Floor, Boston, MA 02110-1301 USA ##
## ##
################################################################################
for arg; do
TCID="${TCID}_$arg"
done
. test.sh
exist_subsystem()
{
local subsystem="$1"
local exist=`grep -w $subsystem /proc/cgroups | cut -f1`
if [ -z "$exist" ]; then
tst_brkm TCONF "Subsystem $subsystem not supported"
fi
}
attach_and_check()
{
local pid="$1"
local path="$2"
local task
shift
tst_resm TINFO "Attaching task $pid to $path"
ROD echo "$pid" \> "$path/tasks"
for task in $(cat "$path/tasks"); do
if [ "$task" -ne "$pid" ]; then
tst_resm TINFO "Unexpected pid $task in $path/tasks, expected $pid"
return 1
fi
done
return 0
}
create_subgroup()
{
path="$1"
ROD mkdir "$path"
# cpuset.cpus and cpuset.mems must be initialized with suitable value
# before any pids are attached
if [ "$subsystem" = "cpuset" ]; then
if [ -e "$mount_point/cpus" ]; then
ROD cat "$mount_point/cpus" \> "$path/cpus"
ROD cat "$mount_point/mems" \> "$path/mems"
else
ROD cat "$mount_point/cpuset.cpus" \> "$path/cpuset.cpus"
ROD cat "$mount_point/cpuset.mems" \> "$path/cpuset.mems"
fi
fi
}
setup()
{
tst_require_root
tst_test_cmds killall
if [ ! -f /proc/cgroups ]; then
tst_brkm TCONF "Kernel does not support for control groups"
fi
exist_subsystem "$subsystem"
tst_tmpdir
TST_CLEANUP=cleanup
mount_point=`grep -w $subsystem /proc/mounts | grep -w "cgroup" | \
cut -f 2 | cut -d " " -f2`
if [ -z "$mount_point" ]; then
try_umount=1
mount_point="/dev/cgroup"
tst_resm TINFO "Subsystem $subsystem is not mounted, mounting it at $mount_point"
ROD mkdir $mount_point
ROD mount -t cgroup -o "$subsystem" "ltp_cgroup" "$mount_point"
else
tst_resm TINFO "Subsystem $subsystem is mounted at $mount_point"
fi
}
cleanup()
{
tst_rmdir
killall -9 cgroup_fj_proc >/dev/null 2>&1
tst_resm TINFO "Removing all ltp subgroups..."
find "$mount_point/ltp/" -depth -type d -exec rmdir '{}' \;
if [ -z "$try_umount" ]; then
return
fi
if grep -q "$mount_point" /proc/mounts; then
umount "$mount_point"
fi
if [ -e "$mount_point" ]; then
rmdir "$mount_point"
fi
}