Lines Matching +full:1 +full:- +full:3

2 # SPDX-License-Identifier: GPL-2.0
11 echo "$1"
16 [[ $(id -u) -eq 0 ]] || skip_test "Test must be run as root!"
23 CGROUP2=$(mount -t cgroup2 | head -1 | awk -e '{print $3}')
24 [[ -n "$CGROUP2" ]] || skip_test "Cgroup v2 mount point not found!"
28 NR_CPUS=$(lscpu | grep "^CPU(s):" | sed -e "s/.*:[[:space:]]*//")
29 [[ $NR_CPUS -lt 8 ]] && skip_test "Test needs at least 8 cpus available!"
32 if [[ -c /dev/console && -w /dev/console ]]
40 PROG=$1
42 DELAY_FACTOR=1
44 while [[ "$1" = -* ]]
46 case "$1" in
47 -v) ((VERBOSE++))
49 [[ $DELAY_FACTOR -eq 1 ]] &&
52 -d) DELAY_FACTOR=$2
55 *) echo "Usage: $PROG [-v] [-d <delay-factor>"
62 # Set sched verbose flag if available when "-v" option is specified
63 if [[ $VERBOSE -gt 0 && -d /sys/kernel/debug/sched ]]
78 [[ -d test ]] || mkdir test
79 echo 0-6 > test/cpuset.cpus
81 cat test/cpuset.cpus.partition | grep -q invalid
85 [[ $RESULT -eq 0 ]] && skip_test "Child cgroups are using cpuset!"
89 # cpuset.cpus.isolated), these isolated CPUs should be outside of CPUs 0-7
95 if [[ -n "$BOOT_ISOLCPUS" ]]
97 [[ $(echo $BOOT_ISOLCPUS | sed -e "s/[,-].*//") -le 7 ]] &&
98 skip_test "Pre-isolated CPUs ($BOOT_ISOLCPUS) overlap CPUs to be tested"
99 echo "Pre-isolated CPUs: $BOOT_ISOLCPUS"
105 rmdir A1/A2/A3 A1/A2 A1 B1 > /dev/null 2>&1
106 rmdir test > /dev/null 2>&1
107 [[ -n "$SCHED_DEBUG" ]] &&
114 DELAY=$1
116 while [[ $LOOP -lt $DELAY_FACTOR ]]
126 MSG=$1
135 EXPECTED_VAL=$1
137 [[ $? -eq 0 ]] || exit 1
142 exit 1
148 EXPECTED_VAL=$1
153 exit 1
160 OUTSTR="$1"
162 echo $ERRMSG | grep -q "$OUTSTR"
163 [[ $? -ne 0 ]] && {
166 exit 1
176 # root -- A1 -- A2 -- A3
177 # +- B1
179 # P<v> = set cpus.partition (0:member, 1:root, 2:isolated)
180 # C<l> = add cpu-list to cpuset.cpus
181 # X<l> = add cpu-list to cpuset.cpus.exclusive
186 # ECPUs - effective CPUs of cpusets
187 # Pstate - partition root state
188 # ISOLCPUS - isolated CPUs (<icpus>[,<icpus2>])
191 # sched-debug matching which includes offline CPUs and single-CPU partitions
194 SETUP_A123_PARTITIONS="C1-3:P1:S+ C2-3:P1:S+ C3:P1"
196 # old-A1 old-A2 old-A3 old-B1 new-A1 new-A2 new-A3 new-B1 fail ECPUs Pstate ISOLCPUS
197 # ------ ------ ------ ------ ------ ------ ------ ------ ---- ----- ------ --------
198 " C0-1 . . C2-3 S+ C4-5 . . 0 A2:0-1"
199 " C0-1 . . C2-3 P1 . . . 0 "
200 " C0-1 . . C2-3 P1:S+ C0-1:P1 . . 0 "
201 " C0-1 . . C2-3 P1:S+ C1:P1 . . 0 "
202 " C0-1:S+ . . C2-3 . . . P1 0 "
203 " C0-1:P1 . . C2-3 S+ C1 . . 0 "
204 " C0-1:P1 . . C2-3 S+ C1:P1 . . 0 "
205 " C0-1:P1 . . C2-3 S+ C1:P1 . P1 0 "
206 " C0-1:P1 . . C2-3 C4-5 . . . 0 A1:4-5"
207 " C0-1:P1 . . C2-3 S+:C4-5 . . . 0 A1:4-5"
208 " C0-1 . . C2-3:P1 . . . C2 0 "
209 " C0-1 . . C2-3:P1 . . . C4-5 0 B1:4-5"
210 "C0-3:P1:S+ C2-3:P1 . . . . . . 0 A1:0-1,A2:2-3"
211 "C0-3:P1:S+ C2-3:P1 . . C1-3 . . . 0 A1:1,A2:2-3"
212 "C2-3:P1:S+ C3:P1 . . C3 . . . 0 A1:,A2:3 A1:P1,A2:P1"
213 "C2-3:P1:S+ C3:P1 . . C3 P0 . . 0 A1:3,A2:3 A1:P1,A2:P0"
214 "C2-3:P1:S+ C2:P1 . . C2-4 . . . 0 A1:3-4,A2:2"
215 "C2-3:P1:S+ C3:P1 . . C3 . . C0-2 0 A1:,B1:0-2 A1:P1,A2:P1"
216 "$SETUP_A123_PARTITIONS . C2-3 . . . 0 A1:,A2:2,A3:3 A1:P1,A2:P1,A3:P1"
219 " C0-1 . . C2-3 S+ C4-5 . O2=0 0 A1:0-1,B1:3"
220 "C0-3:P1:S+ C2-3:P1 . . O2=0 . . . 0 A1:0-1,A2:3"
221 "C0-3:P1:S+ C2-3:P1 . . O2=0 O2=1 . . 0 A1:0-1,A2:2-3"
222 "C0-3:P1:S+ C2-3:P1 . . O1=0 . . . 0 A1:0,A2:2-3"
223 "C0-3:P1:S+ C2-3:P1 . . O1=0 O1=1 . . 0 A1:0-1,A2:2-3"
224 "C2-3:P1:S+ C3:P1 . . O3=0 O3=1 . . 0 A1:2,A2:3 A1:P1,A2:P1"
225 "C2-3:P1:S+ C3:P2 . . O3=0 O3=1 . . 0 A1:2,A2:3 A1:P1,A2:P2"
226 "C2-3:P1:S+ C3:P1 . . O2=0 O2=1 . . 0 A1:2,A2:3 A1:P1,A2:P1"
227 "C2-3:P1:S+ C3:P2 . . O2=0 O2=1 . . 0 A1:2,A2:3 A1:P1,A2:P2"
228 "C2-3:P1:S+ C3:P1 . . O2=0 . . . 0 A1:,A2:3 A1:P1,A2:P1"
229 "C2-3:P1:S+ C3:P1 . . O3=0 . . . 0 A1:2,A2: A1:P1,A2:P1"
230 "C2-3:P1:S+ C3:P1 . . T:O2=0 . . . 0 A1:3,A2:3 A1:P1,A2:P-1"
231 "C2-3:P1:S+ C3:P1 . . . T:O3=0 . . 0 A1:2,A2:2 A1:P1,A2:P-1"
232 "$SETUP_A123_PARTITIONS . O1=0 . . . 0 A1:,A2:2,A3:3 A1:P1,A2:P1,A3:P1"
233 "$SETUP_A123_PARTITIONS . O2=0 . . . 0 A1:1,A2:,A3:3 A1:P1,A2:P1,A3:P1"
234 "$SETUP_A123_PARTITIONS . O3=0 . . . 0 A1:1,A2:2,A3: A1:P1,A2:P1,A3:P1"
235 "$SETUP_A123_PARTITIONS . T:O1=0 . . . 0 A1:2-3,A2:2-3,A3:3 A1:P1,A2:P-1,A3:P-1"
236 "$SETUP_A123_PARTITIONS . . T:O2=0 . . 0 A1:1,A2:3,A3:3 A1:P1,A2:P1,A3:P-1"
237 "$SETUP_A123_PARTITIONS . . . T:O3=0 . 0 A1:1,A2:2,A3:2 A1:P1,A2:P1,A3:P-1"
238 "$SETUP_A123_PARTITIONS . T:O1=0 O1=1 . . 0 A1:1,A2:2,A3:3 A1:P1,A2:P1,A3:P1"
239 "$SETUP_A123_PARTITIONS . . T:O2=0 O2=1 . 0 A1:1,A2:2,A3:3 A1:P1,A2:P1,A3:P1"
240 "$SETUP_A123_PARTITIONS . . . T:O3=0 O3=1 0 A1:1,A2:2,A3:3 A1:P1,A2:P1,A3:P1"
241 "$SETUP_A123_PARTITIONS . T:O1=0 O2=0 O1=1 . 0 A1:1,A2:,A3:3 A1:P1,A2:P1,A3:P1"
242 "$SETUP_A123_PARTITIONS . T:O1=0 O2=0 O2=1 . 0 A1:2-3,A2:2-3,A3:3 A1:P1,A2:P-1,A3:P-1"
244 # old-A1 old-A2 old-A3 old-B1 new-A1 new-A2 new-A3 new-B1 fail ECPUs Pstate ISOLCPUS
245 # ------ ------ ------ ------ ------ ------ ------ ------ ---- ----- ------ --------
249 " C0-3:S+ C1-3:S+ C2-3 . X2-3 . . . 0 A1:0-3,A2:1-3,A3:2-3,XA1:2-3"
250 " C0-3:S+ C1-3:S+ C2-3 . X2-3 X2-3:P2 . . 0 A1:0-1,A2:2-3,A3:2-3 A1:P0,A2:P2 2-3"
251 " C0-3:S+ C1-3:S+ C2-3 . X2-3 X3:P2 . . 0 A1:0-2,A2:3,A3:3 A1:P0,A2:P2 3"
252 " C0-3:S+ C1-3:S+ C2-3 . X2-3 X2-3 X2-3:P2 . 0 A1:0-1,A2:1,A3:2-3 A1:P0,A3:P2 2-3"
253 " C0-3:S+ C1-3:S+ C2-3 . X2-3 X2-3 X2-3:P2:C3 . 0 A1:0-1,A2:1,A3:2-3 A1:P0,A3:P2 2-3"
254 " C0-3:S+ C1-3:S+ C2-3 C2-3 . . . P2 0 A1:0-3,A2:1-3,A3:2-3,B1:2-3 A1:P0,A3:P0,B1:P-2"
255 " C0-3:S+ C1-3:S+ C2-3 C4-5 . . . P2 0 B1:4-5 B1:P2 4-5"
256 " C0-3:S+ C1-3:S+ C2-3 C4 X2-3 X2-3 X2-3:P2 P2 0 A3:2-3,B1:4 A3:P2,B1:P2 2-4"
257 " C0-3:S+ C1-3:S+ C2-3 C4 X2-3 X2-3 X2-3:P2:C1-3 P2 0 A3:2-3,B1:4 A3:P2,B1:P2 2-4"
258 " C0-3:S+ C1-3:S+ C2-3 C4 X1-3 X1-3:P2 P2 . 0 A2:1,A3:2-3 A2:P2,A3:P2 1-3"
259 " C0-3:S+ C1-3:S+ C2-3 C4 X2-3 X2-3 X2-3:P2 P2:C4-5 0 A3:2-3,B1:4-5 A3:P2,B1:P2 2-5"
260 " C4:X0-3:S+ X1-3:S+ X2-3 . . P2 . . 0 A1:4,A2:1-3,A3:1-3 A2:P2 1-3"
261 " C4:X0-3:S+ X1-3:S+ X2-3 . . . P2 . 0 A1:4,A2:4,A3:2-3 A3:P2 2-3"
264 " C0-3:S+ C1-3:S+ C2-3 C4-5 X2-3 X2-3:P1 P2 P1 0 A1:0-1,A2:,A3:2-3,B1:4-5 \
265 A1:P0,A2:P1,A3:P2,B1:P1 2-3"
266 " C0-3:S+ C1-3:S+ C2-3 C4 X2-3 X2-3:P1 P2 P1 0 A1:0-1,A2:,A3:2-3,B1:4 \
267 A1:P0,A2:P1,A3:P2,B1:P1 2-4,2-3"
268 " C0-3:S+ C1-3:S+ C2-3 C4 X2-3 X2-3:P1 . P1 0 A1:0-1,A2:2-3,A3:2-3,B1:4 \
270 " C0-3:S+ C1-3:S+ C3 C4 X2-3 X2-3:P1 P2 P1 0 A1:0-1,A2:2,A3:3,B1:4 \
271 A1:P0,A2:P1,A3:P2,B1:P1 2-4,3"
272 " C0-4:S+ C1-4:S+ C2-4 . X2-4 X2-4:P2 X4:P1 . 0 A1:0-1,A2:2-3,A3:4 \
273 A1:P0,A2:P2,A3:P1 2-4,2-3"
274 " C0-4:S+ C1-4:S+ C2-4 . X2-4 X2-4:P2 X3-4:P1 . 0 A1:0-1,A2:2,A3:3-4 \
276 " C0-4:X2-4:S+ C1-4:X2-4:S+:P2 C2-4:X4:P1 \
277 . . X5 . . 0 A1:0-4,A2:1-4,A3:2-4 \
278 A1:P0,A2:P-2,A3:P-1"
279 " C0-4:X2-4:S+ C1-4:X2-4:S+:P2 C2-4:X4:P1 \
280 . . . X1 . 0 A1:0-1,A2:2-4,A3:2-4 \
281 A1:P0,A2:P2,A3:P-1 2-4"
284 " C0-3:S+ C1-3:S+ C2-3 . X2-3 X2-3 X2-3:P2:O2=0 . 0 A1:0-1,A2:1,A3:3 A1:P0,A3:P2 2-3"
285 " C0-3:S+ C1-3:S+ C2-3 . X2-3 X2-3 X2-3:P2:O2=0 O2=1 0 A1:0-1,A2:1,A3:2-3 A1:P0,A3:P2 2-3"
286 " C0-3:S+ C1-3:S+ C3 . X2-3 X2-3 P2:O3=0 . 0 A1:0-2,A2:1-2,A3: A1:P0,A3:P2 3"
287 " C0-3:S+ C1-3:S+ C3 . X2-3 X2-3 T:P2:O3=0 . 0 A1:0-2,A2:1-2,A3:1-2 A1:P0,A3:P-2 3,"
289 # An invalidated remote partition cannot self-recover from hotplug
290 " C0-3:S+ C1-3:S+ C2 . X2-3 X2-3 T:P2:O2=0 O2=1 0 A1:0-3,A2:1-3,A3:2 A1:P0,A3:P-2"
293 " C0-3:S+ C1-3:S+ C2 . X2-3:X . . . 0 A1:0-3,A2:1-3,A3:2,XA1:"
296 " C0-3:S+ C1-3 . . . X3:P2 . . 0 A1:0-3,A2:1-3,XA2: A2:P-2"
297 " C0-3:S+ C1-3:X3:P2
298 . . X2-3 P2 . . 0 A1:0-2,A2:3,XA2:3 A2:P2 3"
301 " C1-3:S+:P2 X4:P2 . . . . . . 0 A1:1-3,XA1:1-3,A2:1-3:XA2: A1:P2,A2:P-2 1-3"
302 " C1-3:S+:P2 X4:P2 . . . X3:P2 . . 0 A1:1-2,XA1:1-3,A2:3:XA2:3 A1:P2,A2:P2 1-3"
303 " C0-3:P2 . . C4-6 C0-4 . . . 0 A1:0-4,B1:4-6 A1:P-2,B1:P0"
304 " C0-3:P2 . . C4-6 C0-4:C0-3 . . . 0 A1:0-3,B1:4-6 A1:P2,B1:P0 0-3"
305 " C0-3:P2 . . C3-5:C4-5 . . . . 0 A1:0-3,B1:4-5 A1:P2,B1:P0 0-3"
308 " C0-3:X1-3:S+:P2 C1-3:X2-3:S+:P2 C2-3:X3:P2 \
309 . . . . . 0 A1:1,A2:2,A3:3 A1:P2,A2:P2,A3:P2 1-3"
310 " C0-3:X1-3:S+:P2 C1-3:X2-3:S+:P2 C2-3:X3:P2 \
311 . . X4 . . 0 A1:1-3,A2:1-3,A3:2-3,XA2:,XA3: A1:P2,A2:P-2,A3:P-2 1-3"
312 " C0-3:X1-3:S+:P2 C1-3:X2-3:S+:P2 C2-3:X3:P2 \
313 . . C4:X . . 0 A1:1-3,A2:1-3,A3:2-3,XA2:,XA3: A1:P2,A2:P-2,A3:P-2 1-3"
315 " C0-5:S+:P2 C4-5:S+:P1 . . . C3-5 . . 0 A1:0-2,A2:3-5 A1:P2,A2:P1 0-2"
316 " C0-5:S+:P2 C4-5:S+:P1 . . C1-5 . . . 0 A1:1-3,A2:4-5 A1:P2,A2:P1 1-3"
319 " C0-3:X2-3:S+ C1-3:X2-3:S+ C2-3:X2-3 \
321 A1:P0,A3:P-2"
322 " C0-3:X2-3:S+ C1-3:X2-3:S+ C2-3:X2-3 \
323 . X1 . P2 . 0 A1:0-3,A2:1-3,XA1:1,XA2:,XA3:,A3:2-3 \
324 A1:P0,A3:P-2"
325 " C0-3:X2-3:S+ C1-3:X2-3:S+ C2-3:X2-3 \
326 . . X3 P2 . 0 A1:0-2,A2:1-2,XA2:3,XA3:3,A3:3 \
327 A1:P0,A3:P2 3"
328 " C0-3:X2-3:S+ C1-3:X2-3:S+ C2-3:X2-3:P2 \
329 . . X3 . . 0 A1:0-3,A2:1-3,XA2:3,XA3:3,A3:2-3 \
330 A1:P0,A3:P-2"
331 " C0-3:X2-3:S+ C1-3:X2-3:S+ C2-3:X2-3:P2 \
332 . X4 . . . 0 A1:0-3,A2:1-3,A3:2-3,XA1:4,XA2:,XA3 \
333 A1:P0,A3:P-2"
335 # old-A1 old-A2 old-A3 old-B1 new-A1 new-A2 new-A3 new-B1 fail ECPUs Pstate ISOLCPUS
336 # ------ ------ ------ ------ ------ ------ ------ ------ ---- ----- ------ --------
342 "C2-3:P1:S+ C3:P1 . . . C2-4 . . 0 A1:,A2:2-3 A1:P1,A2:P1"
346 "C2-3:P1:S+ C3:P1 . . T C2-3 . . 0 A1:2-3,A2:2-3 A1:P1,A2:P-1"
347 " C3:P1:S+ C3 . . T P1 . . 0 A1:3,A2:3 A1:P1,A2:P-1"
348 "$SETUP_A123_PARTITIONS . T:C2-3 . . . 0 A1:2-3,A2:2-3,A3:3 A1:P1,A2:P-1,A3:P-1"
349 "$SETUP_A123_PARTITIONS . T:C2-3:C1-3 . . . 0 A1:1,A2:2,A3:3 A1:P1,A2:P1,A3:P1"
352 "C2-3:P1:S+ C3:P1 . . P0 . . . 0 A1:2-3,A2:3 A1:P0,A2:P-1"
353 "$SETUP_A123_PARTITIONS . C2-3 P0 . . 0 A1:2-3,A2:2-3,A3:3 A1:P1,A2:P0,A3:P-1"
357 "C2-3:P1:S+ . . . . C3-4:P1 . . 0 A1:2,A2:3 A1:P1,A2:P1"
360 "C0-1:P1:S+ C1 . C2-3 C4-5 . . . 0 A1:4-5,A2:4-5"
364 " C0-1:P1 . . C2-3 S+ C4-5:P1 . . 0 A1:0-1,A2:0-1 A1:P1,A2:P-1"
367 " C0-1:S+ C1 . C2-3 P1 . . . 0 A1:0-1,A2:1 A1:P1"
369 # A partition root with non-partition root parent is invalid, but it
371 " C0-1:S+ C1 . C2-3 . P2 . . 0 A1:0-1,A2:1 A1:P0,A2:P-2"
372 " C0-1:S+ C1:P2 . C2-3 P1 . . . 0 A1:0,A2:1 A1:P1,A2:P2"
374 # A non-exclusive cpuset.cpus change will invalidate partition and its siblings
375 " C0-1:P1 . . C2-3 C0-2 . . . 0 A1:0-2,B1:2-3 A1:P-1,B1:P0"
376 " C0-1:P1 . . P1:C2-3 C0-2 . . . 0 A1:0-2,B1:2-3 A1:P-1,B1:P-1"
377 " C0-1 . . P1:C2-3 C0-2 . . . 0 A1:0-2,B1:2-3 A1:P0,B1:P-1"
380 " C0-3 . . C4-5 X5 . . . 0 A1:0-3,B1:4-5"
384 " C1-4:P1:S+ P1 . . . . . . 0 A1:1-4,A2:1-4 A1:P1,A2:P-1"
385 " C1-4:P1:S+ P1 . . . C1-4 . . 0 A1,A2:1-4 A1:P1,A2:P1"
386 " C1-4:P1:S+ P1 . . T C1-4 . . 0 A1:1-4,A2:1-4 A1:P1,A2:P-1"
390 " C1-4:X3:S+ C1:X3 . . . C . . 0 A2:1-4,XA2:3"
392 # old-A1 old-A2 old-A3 old-B1 new-A1 new-A2 new-A3 new-B1 fail ECPUs Pstate ISOLCPUS
393 # ------ ------ ------ ------ ------ ------ ------ ------ ---- ----- ------ --------
397 "C2-3:P1:S+ C3:P1 . . O2=0:T . . . 1 A1:,A2:3 A1:P1,A2:P1"
400 " C0-3 . . C4-5 X0-3 . . X3-5 1 A1:0-3,B1:4-5"
403 " C0-3 . . C4-5 X3-5 . . . 1 A1:0-3,B1:4-5"
408 # $1 - <c>=<v> where <c> = cpu number, <v> value to be written
412 CPU=${1%=*}
413 VAL=${1#*=}
415 if [[ $VAL -eq 0 ]]
419 [[ -n "$OFFLINE_CPUS" ]] && {
420 OFFLINE_CPUS=$(echo $CPU $CPU $OFFLINE_CPUS | fmt -1 |\
421 sort | uniq -u)
430 # $1 - cgroup directory
431 # $2 - state
432 # $3 - showerr
439 CGRP=$1
441 SHOWERR=${3}
445 [[ -z "$STATE" || "$STATE" = '.' ]] && return 0
446 [[ $VERBOSE -gt 0 ]] && SHOWERR=1
448 rm -f $TMPMSG
449 for CMD in $(echo $STATE | sed -e "s/:/ /g")
456 S=$(expr substr $CMD 1 1)
478 1) VAL=root
483 echo "Invalid partition state - $VAL"
484 exit 1
499 [[ $RET -ne 0 ]] && {
500 [[ -n "$SHOWERR" ]] && {
504 HASERR=1
507 rm -f $TMPMSG
514 CGRP=$1
516 [[ -d $CGRP ]] || mkdir $CGRP
517 set_ctrl_state $CGRP $STATE 1
518 [[ $? -ne 0 ]] && {
519 echo "ERROR: Failed to set $2 to cgroup $1!"
520 exit 1
526 [[ -n "OFFLINE_CPUS" ]] && {
529 write_cpu_online ${C}=1
535 # Return 1 if the list of effective cpus isn't the same as the initial list.
541 rmdir A1/A2/A3 A1/A2 A1 B1 > /dev/null 2>&1
543 set_ctrl_state . R-
558 [[ -e $CPUS ]] && echo "$CPUS: $(cat $CPUS)"
559 [[ -e $XCPUS ]] && echo "$XCPUS: $(cat $XCPUS)"
560 [[ -e $ECPUS ]] && echo "$ECPUS: $(cat $ECPUS)"
561 [[ -e $XECPUS ]] && echo "$XECPUS: $(cat $XECPUS)"
562 [[ -e $PRS ]] && echo "$PRS: $(cat $PRS)"
563 [[ -e $PCPUS ]] && echo "$PCPUS: $(cat $PCPUS)"
564 [[ -e $ISCPUS ]] && echo "$ISCPUS: $(cat $ISCPUS)"
570 # $1 - check string, format: <cgroup>:<cpu-list>[,<cgroup>:<cpu-list>]*
574 CHK_STR=$1
575 for CHK in $(echo $CHK_STR | sed -e "s/,/ /g")
577 set -- $(echo $CHK | sed -e "s/:/ /g")
578 CGRP=$1
589 [[ -e $CGRP/$FILE ]] || return 1
590 [[ $CPUS = $(cat $CGRP/$FILE) ]] || return 1
596 # $1 - check string, format: <cgroup>:<state>[,<cgroup>:<state>]*
600 CHK_STR=$1
601 for CHK in $(echo $CHK_STR | sed -e "s/,/ /g")
603 set -- $(echo $CHK | sed -e "s/:/ /g")
604 CGRP=$1
616 exit 1
624 root) VAL=1
630 VAL=-1
633 VAL=-2
636 [[ $EVAL != $VAL ]] && return 1
639 # For root partition, dump sched-domains info to console if
642 [[ $VAL -eq 1 && $VERBOSE -gt 0 ]] && {
644 [[ -n "$DOMS" ]] &&
645 echo " [$CGRP] sched-domain: $DOMS" > $CONSOLE
657 # CPUs as well as CPUs in non-isolated 1-CPU partition. Those CPUs may
662 # $1 - expected isolated cpu list(s) <isolcpus1>{,<isolcpus2>}
663 # <isolcpus1> - expected sched/domains value
664 # <isolcpus2> - cpuset.cpus.isolated value = <isolcpus1> if not defined
668 EXPECT_VAL=$1
679 set -- $(echo $EXPECT_VAL | sed -e "s/,/ /g")
680 EXPECT_VAL=$1
689 if [[ -z "$BOOT_ISOLCPUS" ]]
693 ISOLCPUS=$(cat $ISCPUS | sed -e "s/,*$BOOT_ISOLCPUS//")
700 [[ "$EXPECT_VAL2" != "$ISOLCPUS" ]] && return 1
706 [[ -d $SCHED_DOMAINS ]] || return 0
710 [[ -n "$(ls ${SCHED_DOMAINS}/cpu$CPU)" ]] && continue
712 if [[ -z "$LASTISOLCPU" ]]
716 elif [[ "$LASTISOLCPU" -eq $((CPU - 1)) ]]
718 echo $ISOLCPUS | grep -q "\<$LASTISOLCPU\$"
719 if [[ $? -eq 0 ]]
721 ISOLCPUS=${ISOLCPUS}-
725 if [[ $ISOLCPUS = *- ]]
733 [[ "$ISOLCPUS" = *- ]] && ISOLCPUS=${ISOLCPUS}$LASTISOLCPU
734 [[ -n "BOOT_ISOLCPUS" ]] &&
735 ISOLCPUS=$(echo $ISOLCPUS | sed -e "s/,*$BOOT_ISOLCPUS//")
742 TESTNUM=$1
744 ADDINFO=$3
746 [[ -n "$ADDINFO" ]] && echo "*** $ADDINFO ***"
750 exit 1
759 [[ $VERBOSE -gt 0 ]] || return 0
762 while [[ $RETRY -lt 8 ]]
766 [[ $? -eq 0 ]] && return 0
771 exit 1
776 # $1 - test matrix name
784 TEST=$1
792 while [[ $I -lt $CNT ]]
795 [[ $VERBOSE -gt 1 ]] && {
799 eval set -- "\${$TEST[$I]}"
800 OLD_A1=$1
802 OLD_A3=$3
823 [[ $RETVAL -ne $RESULT ]] && test_fail $I result
825 [[ -n "$ECPUS" && "$ECPUS" != . ]] && {
827 [[ $? -ne 0 ]] && test_fail $I "effective CPU"
830 [[ -n "$STATES" && "$STATES" != . ]] && {
832 [[ $? -ne 0 ]] && test_fail $I states
837 [[ -n "$ICPUS" ]] && {
839 [[ $? -ne 0 ]] && test_fail $I "isolated CPU" \
848 while [[ $NEWLIST != $CPULIST && $RETRY -lt 8 ]]
857 exit 1
860 [[ $VERBOSE -gt 0 ]] && echo "Test $I done."
872 echo 2-3 > cpuset.cpus
903 echo 2-3 > cpuset.cpus
905 test_effective_cpus 2-3
919 test_effective_cpus 3
921 echo 2-3 > cpuset.cpus
928 [[ -d A1 ]] && rmdir A1
934 # $1: cgroup file to wait for
939 CGROUP_FILE=$1
955 [[ -f $WAIT_INOTIFY ]] || {
961 echo 1 > cpuset.cpus
965 rm -f $PRS
970 check_cgroup_states ".:P-1"
971 if [[ $? -ne 0 ]]
973 echo "FAILED: Inotify test - partition not invalid"
974 ERR=1
975 elif [[ ! -f $PRS ]]
977 echo "FAILED: Inotify test - event not generated"
978 ERR=1
979 kill %1
982 echo "FAILED: Inotify test - incorrect state"
984 ERR=1
989 if [[ $ERR -ne 0 ]]
991 exit 1
997 trap cleanup 0 2 3 6