1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0
3#
4# Test the special cpuset v1 hotplug case where a cpuset become empty of
5# CPUs will force migration of tasks out to an ancestor.
6#
7
8skip_test() {
9	echo "$1"
10	echo "Test SKIPPED"
11	exit 4 # ksft_skip
12}
13
14[[ $(id -u) -eq 0 ]] || skip_test "Test must be run as root!"
15
16# Find cpuset v1 mount point
17CPUSET=$(mount -t cgroup | grep cpuset | head -1 | awk -e '{print $3}')
18[[ -n "$CPUSET" ]] || skip_test "cpuset v1 mount point not found!"
19
20#
21# Create a test cpuset, put a CPU and a task there and offline that CPU
22#
23TDIR=test$$
24[[ -d $CPUSET/$TDIR ]] || mkdir $CPUSET/$TDIR
25echo 1 > $CPUSET/$TDIR/cpuset.cpus
26echo 0 > $CPUSET/$TDIR/cpuset.mems
27sleep 10&
28TASK=$!
29echo $TASK > $CPUSET/$TDIR/tasks
30NEWCS=$(cat /proc/$TASK/cpuset)
31[[ $NEWCS != "/$TDIR" ]] && {
32	echo "Unexpected cpuset $NEWCS, test FAILED!"
33	exit 1
34}
35
36echo 0 > /sys/devices/system/cpu/cpu1/online
37sleep 0.5
38echo 1 > /sys/devices/system/cpu/cpu1/online
39NEWCS=$(cat /proc/$TASK/cpuset)
40rmdir $CPUSET/$TDIR
41[[ $NEWCS != "/" ]] && {
42	echo "cpuset $NEWCS, test FAILED!"
43	exit 1
44}
45echo "Test PASSED"
46exit 0
47