Lines Matching +full:3 +full:- +full:c22

2 # SPDX-License-Identifier: GPL-2.0
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 ]]
44 while [[ "$1" = -* ]]
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-8
95 # These pre-isolated CPUs should stay in an isolated state throughout the
99 [[ -n "$BOOT_ISOLCPUS" ]] && {
103 if [[ -n "$BOOT_ISOLCPUS" ]]
105 [[ $(echo $BOOT_ISOLCPUS | sed -e "s/[,-].*//") -le 8 ]] &&
106 skip_test "Pre-isolated CPUs ($BOOT_ISOLCPUS) overlap CPUs to be tested"
107 echo "Pre-isolated CPUs: $BOOT_ISOLCPUS"
116 rtest/p2/c22 rtest/p1 rtest/p2 rtest > /dev/null 2>&1
117 [[ -n "$SCHED_DEBUG" ]] &&
126 while [[ $LOOP -lt $DELAY_FACTOR ]]
147 [[ $? -eq 0 ]] || exit 1
172 echo $ERRMSG | grep -q "$OUTSTR"
173 [[ $? -ne 0 ]] && {
188 # +------+------+
197 # C<l> = add cpu-list to cpuset.cpus
198 # X<l> = add cpu-list to cpuset.cpus.exclusive
201 # CX<l> = add cpu-list to both cpuset.cpus and cpuset.cpus.exclusive
204 # ECPUs - effective CPUs of cpusets
205 # Pstate - partition root state
206 # ISOLCPUS - isolated CPUs (<icpus>[,<icpus2>])
209 # sched-debug matching which includes offline CPUs and single-CPU partitions
212 SETUP_A123_PARTITIONS="C1-3:P1:S+ C2-3:P1:S+ C3:P1"
214 # old-A1 old-A2 old-A3 old-B1 new-A1 new-A2 new-A3 new-B1 fail ECPUs Pstate ISOLCPUS
215 # ------ ------ ------ ------ ------ ------ ------ ------ ---- ----- ------ --------
216 " C0-1 . . C2-3 S+ C4-5 . . 0 A2:0-1"
217 " C0-1 . . C2-3 P1 . . . 0 "
218 " C0-1 . . C2-3 P1:S+ C0-1:P1 . . 0 "
219 " C0-1 . . C2-3 P1:S+ C1:P1 . . 0 "
220 " C0-1:S+ . . C2-3 . . . P1 0 "
221 " C0-1:P1 . . C2-3 S+ C1 . . 0 "
222 " C0-1:P1 . . C2-3 S+ C1:P1 . . 0 "
223 " C0-1:P1 . . C2-3 S+ C1:P1 . P1 0 "
224 " C0-1:P1 . . C2-3 C4-5 . . . 0 A1:4-5"
225 " C0-1:P1 . . C2-3 S+:C4-5 . . . 0 A1:4-5"
226 " C0-1 . . C2-3:P1 . . . C2 0 "
227 " C0-1 . . C2-3:P1 . . . C4-5 0 B1:4-5"
228 "C0-3:P1:S+ C2-3:P1 . . . . . . 0 A1:0-1|A2:2-3|XA2:2-3"
229 "C0-3:P1:S+ C2-3:P1 . . C1-3 . . . 0 A1:1|A2:2-3|XA2:2-3"
230 "C2-3:P1:S+ C3:P1 . . C3 . . . 0 A1:|A2:3|XA2:3 A1:P1|A2:P1"
231 "C2-3:P1:S+ C3:P1 . . C3 P0 . . 0 A1:3|A2:3 A1:P1|A2:P0"
232 "C2-3:P1:S+ C2:P1 . . C2-4 . . . 0 A1:3-4|A2:2"
233 "C2-3:P1:S+ C3:P1 . . C3 . . C0-2 0 A1:|B1:0-2 A1:P1|A2:P1"
234 "$SETUP_A123_PARTITIONS . C2-3 . . . 0 A1:|A2:2|A3:3 A1:P1|A2:P1|A3:P1"
237 " C0-1 . . C2-3 S+ C4-5 . O2=0 0 A1:0-1|B1:3"
238 "C0-3:P1:S+ C2-3:P1 . . O2=0 . . . 0 A1:0-1|A2:3"
239 "C0-3:P1:S+ C2-3:P1 . . O2=0 O2=1 . . 0 A1:0-1|A2:2-3"
240 "C0-3:P1:S+ C2-3:P1 . . O1=0 . . . 0 A1:0|A2:2-3"
241 "C0-3:P1:S+ C2-3:P1 . . O1=0 O1=1 . . 0 A1:0-1|A2:2-3"
242 "C2-3:P1:S+ C3:P1 . . O3=0 O3=1 . . 0 A1:2|A2:3 A1:P1|A2:P1"
243 "C2-3:P1:S+ C3:P2 . . O3=0 O3=1 . . 0 A1:2|A2:3 A1:P1|A2:P2"
244 "C2-3:P1:S+ C3:P1 . . O2=0 O2=1 . . 0 A1:2|A2:3 A1:P1|A2:P1"
245 "C2-3:P1:S+ C3:P2 . . O2=0 O2=1 . . 0 A1:2|A2:3 A1:P1|A2:P2"
246 "C2-3:P1:S+ C3:P1 . . O2=0 . . . 0 A1:|A2:3 A1:P1|A2:P1"
247 "C2-3:P1:S+ C3:P1 . . O3=0 . . . 0 A1:2|A2: A1:P1|A2:P1"
248 "C2-3:P1:S+ C3:P1 . . T:O2=0 . . . 0 A1:3|A2:3 A1:P1|A2:P-1"
249 "C2-3:P1:S+ C3:P1 . . . T:O3=0 . . 0 A1:2|A2:2 A1:P1|A2:P-1"
250 "$SETUP_A123_PARTITIONS . O1=0 . . . 0 A1:|A2:2|A3:3 A1:P1|A2:P1|A3:P1"
251 "$SETUP_A123_PARTITIONS . O2=0 . . . 0 A1:1|A2:|A3:3 A1:P1|A2:P1|A3:P1"
253 …ETUP_A123_PARTITIONS . T:O1=0 . . . 0 A1:2-3|A2:2-3|A3:3 A1:P1|A2:P-1|A3:P-1"
254 "$SETUP_A123_PARTITIONS . . T:O2=0 . . 0 A1:1|A2:3|A3:3 A1:P1|A2:P1|A3:P-1"
255 "$SETUP_A123_PARTITIONS . . . T:O3=0 . 0 A1:1|A2:2|A3:2 A1:P1|A2:P1|A3:P-1"
256 "$SETUP_A123_PARTITIONS . T:O1=0 O1=1 . . 0 A1:1|A2:2|A3:3 A1:P1|A2:P1|A3:P1"
257 "$SETUP_A123_PARTITIONS . . T:O2=0 O2=1 . 0 A1:1|A2:2|A3:3 A1:P1|A2:P1|A3:P1"
258 "$SETUP_A123_PARTITIONS . . . T:O3=0 O3=1 0 A1:1|A2:2|A3:3 A1:P1|A2:P1|A3:P1"
259 "$SETUP_A123_PARTITIONS . T:O1=0 O2=0 O1=1 . 0 A1:1|A2:|A3:3 A1:P1|A2:P1|A3:P1"
260 …ETUP_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"
262 # old-A1 old-A2 old-A3 old-B1 new-A1 new-A2 new-A3 new-B1 fail ECPUs Pstate ISOLCPUS
263 # ------ ------ ------ ------ ------ ------ ------ ------ ---- ----- ------ --------
267 " C0-3:S+ C1-3:S+ C2-3 . X2-3 . . . 0 A1:0-3|A2:1-3|A3:2-3|XA1:2-3"
268 …" 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-…
269 " 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"
270 " 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"
271 " 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"
272 …" 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|A…
273 " C0-3:S+ C1-3:S+ C2-3 C4-5 . . . P2 0 B1:4-5 B1:P2 4-5"
274 " 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"
275 " 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"
276 " 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"
277 " 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"
278 " C4:X0-3:S+ X1-3:S+ X2-3 . . P2 . . 0 A1:4|A2:1-3|A3:1-3 A2:P2 1-3"
279 " C4:X0-3:S+ X1-3:S+ X2-3 . . . P2 . 0 A1:4|A2:4|A3:2-3 A3:P2 2-3"
282 " 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 \
283 A1:P0|A2:P1|A3:P2|B1:P1 2-3"
284 " 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 \
285 A1:P0|A2:P1|A3:P2|B1:P1 2-4|2-3"
286 " 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 \
288 " 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 \
289 A1:P0|A2:P1|A3:P2|B1:P1 2-4|3"
290 " C0-4:S+ C1-4:S+ C2-4 . X2-4 X2-4:P2 X4:P1 . 0 A1:0-1|A2:2-3|A3:4 \
291 A1:P0|A2:P2|A3:P1 2-4|2-3"
292 " 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 \
294 " C0-4:X2-4:S+ C1-4:X2-4:S+:P2 C2-4:X4:P1 \
295 . . X5 . . 0 A1:0-4|A2:1-4|A3:2-4 \
296 A1:P0|A2:P-2|A3:P-1 ."
297 " C0-4:X2-4:S+ C1-4:X2-4:S+:P2 C2-4:X4:P1 \
298 . . . X1 . 0 A1:0-1|A2:2-4|A3:2-4 \
299 A1:P0|A2:P2|A3:P-1 2-4"
302 " 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"
303 " 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"
304 " 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"
305 …" 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
307 # An invalidated remote partition cannot self-recover from hotplug
308 " 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 ."
311 " C0-3:S+ C1-3:S+ C2 . X2-3:X . . . 0 A1:0-3|A2:1-3|A3:2|XA1:"
314 " C0-3:S+ C1-3 . . . X3:P2 . . 0 A1:0-3|A2:1-3|XA2: A2:P-2 ."
315 " C0-3:S+ C1-3:X3:P2
316 . . X2-3 P2 . . 0 A1:0-2|A2:3|XA2:3 A2:P2 3"
319 …" C1-3:S+:P2 X4:P2 . . . . . . 0 A1:1-3|XA1:1-3|A2:1-3:XA2: A1:P2|A2…
320 …" C1-3:S+:P2 X4:P2 . . . X3:P2 . . 0 A1:1-2|XA1:1-3|A2:3:XA2:3 A1:P2|A2:…
321 " C0-3:P2 . . C4-6 C0-4 . . . 0 A1:0-4|B1:4-6 A1:P-2|B1:P0"
322 " C0-3:P2 . . C4-6 C0-4:C0-3 . . . 0 A1:0-3|B1:4-6 A1:P2|B1:P0 0-3"
325 " C0-3:X1-3:S+:P2 C1-3:X2-3:S+:P2 C2-3:X3:P2 \
326 . . . . . 0 A1:1|A2:2|A3:3 A1:P2|A2:P2|A3:P2 1-3"
327 " C0-3:X1-3:S+:P2 C1-3:X2-3:S+:P2 C2-3:X3:P2 \
328 . . X4 . . 0 A1:1-3|A2:1-3|A3:2-3|XA2:|XA3: A1:P2|A2:P-2|A3:P-2 1-3"
329 " C0-3:X1-3:S+:P2 C1-3:X2-3:S+:P2 C2-3:X3:P2 \
330 . . C4:X . . 0 A1:1-3|A2:1-3|A3:2-3|XA2:|XA3: A1:P2|A2:P-2|A3:P-2 1-3"
332 " C0-5:S+:P2 C4-5:S+:P1 . . . C3-5 . . 0 A1:0-2|A2:3-5 A1:P2|A2:P1 0-2"
333 " C0-5:S+:P2 C4-5:S+:P1 . . C1-5 . . . 0 A1:1-3|A2:4-5 A1:P2|A2:P1 1-3"
336 " C0-3:X2-3:S+ C1-3:X2-3:S+ C2-3:X2-3 \
338 A1:P0|A3:P-2 ."
339 " C0-3:X2-3:S+ C1-3:X2-3:S+ C2-3:X2-3 \
340 . X1 . P2 . 0 A1:0-3|A2:1-3|XA1:1|XA2:|XA3:|A3:2-3 \
341 A1:P0|A3:P-2 ."
342 " C0-3:X2-3:S+ C1-3:X2-3:S+ C2-3:X2-3 \
343 . . X3 P2 . 0 A1:0-2|A2:1-2|XA2:3|XA3:3|A3:3 \
344 A1:P0|A3:P2 3"
345 " C0-3:X2-3:S+ C1-3:X2-3:S+ C2-3:X2-3:P2 \
346 . . X3 . . 0 A1:0-2|A2:1-2|XA2:3|XA3:3|A3:3|XA3:3 \
347 A1:P0|A3:P2 3"
348 " C0-3:X2-3:S+ C1-3:X2-3:S+ C2-3:X2-3:P2 \
349 . X4 . . . 0 A1:0-3|A2:1-3|A3:2-3|XA1:4|XA2:|XA3 \
350 A1:P0|A3:P-2"
352 # old-A1 old-A2 old-A3 old-B1 new-A1 new-A2 new-A3 new-B1 fail ECPUs Pstate ISOLCPUS
353 # ------ ------ ------ ------ ------ ------ ------ ------ ---- ----- ------ --------
359 "C2-3:P1:S+ C3:P1 . . . C2-4 . . 0 A1:|A2:2-3 A1:P1|A2:P1"
363 "C2-3:P1:S+ C3:P1 . . T C2-3 . . 0 A1:2-3|A2:2-3 A1:P1|A2:P-1"
364 " C3:P1:S+ C3 . . T P1 . . 0 A1:3|A2:3 A1:P1|A2:P-1"
365 …"$SETUP_A123_PARTITIONS . T:C2-3 . . . 0 A1:2-3|A2:2-3|A3:3 A1:P1|A2:P-1|A3:…
366 "$SETUP_A123_PARTITIONS . T:C2-3:C1-3 . . . 0 A1:1|A2:2|A3:3 A1:P1|A2:P1|A3:P1"
369 "C2-3:P1:S+ C3:P1 . . P0 . . . 0 A1:2-3|A2:3 A1:P0|A2:P-1"
370 …"$SETUP_A123_PARTITIONS . C2-3 P0 . . 0 A1:2-3|A2:2-3|A3:3 A1:P1|A2:P0|A3:P
374 "C2-3:P1:S+ . . . . C3-4:P1 . . 0 A1:2|A2:3 A1:P1|A2:P1"
377 "C0-1:P1:S+ C1 . C2-3 C4-5 . . . 0 A1:4-5|A2:4-5"
381 " C0-1:P1 . . C2-3 S+ C4-5:P1 . . 0 A1:0-1|A2:0-1 A1:P1|A2:P-1"
384 " C0-1:S+ C1 . C2-3 P1 . . . 0 A1:0-1|A2:1 A1:P1"
386 # A partition root with non-partition root parent is invalid| but it
388 " C0-1:S+ C1 . C2-3 . P2 . . 0 A1:0-1|A2:1 A1:P0|A2:P-2"
389 " C0-1:S+ C1:P2 . C2-3 P1 . . . 0 A1:0|A2:1 A1:P1|A2:P2 0-1|1"
391 # A non-exclusive cpuset.cpus change will invalidate partition and its siblings
392 " C0-1:P1 . . C2-3 C0-2 . . . 0 A1:0-2|B1:2-3 A1:P-1|B1:P0"
393 " C0-1:P1 . . P1:C2-3 C0-2 . . . 0 A1:0-2|B1:2-3 A1:P-1|B1:P-1"
394 " C0-1 . . P1:C2-3 C0-2 . . . 0 A1:0-2|B1:2-3 A1:P0|B1:P-1"
397 " C0-3 . . C4-5 X5 . . . 0 A1:0-3|B1:4-5"
401 " C1-4:P1:S+ P1 . . . . . . 0 A1:1-4|A2:1-4 A1:P1|A2:P-1"
402 " C1-4:P1:S+ P1 . . . C1-4 . . 0 A1|A2:1-4 A1:P1|A2:P1"
403 " C1-4:P1:S+ P1 . . T C1-4 . . 0 A1:1-4|A2:1-4 A1:P1|A2:P-1"
407 " C1-4:X3:S+ C1:X3 . . . C . . 0 A2:1-4|XA2:3"
413 " CX1-4:S+ CX2-4:P2 . C5-6 . . . P1 0 A1:1|A2:2-4|B1:5-6|XB1:5-6 \
414 A1:P0|A2:P2:B1:P1 2-4"
415 " CX1-4:S+ CX2-4:P2 . C3-6 . . . P1 0 A1:1|A2:2-4|B1:5-6 \
416 A1:P0|A2:P2:B1:P-1 2-4"
417 " CX1-4:S+ CX2-4:P2 . C5-6 . . . P1:C3-6 0 A1:1|A2:2-4|B1:5-6 \
418 A1:P0|A2:P2:B1:P-1 2-4"
420 # old-A1 old-A2 old-A3 old-B1 new-A1 new-A2 new-A3 new-B1 fail ECPUs Pstate ISOLCPUS
421 # ------ ------ ------ ------ ------ ------ ------ ------ ---- ----- ------ --------
425 "C2-3:P1:S+ C3:P1 . . O2=0:T . . . 1 A1:|A2:3 A1:P1|A2:P1"
428 " C0-3 . . C4-5 X0-3 . . X3-5 1 A1:0-3|B1:4-5"
431 " C0-3 . . C4-5 X3-5 . . . 1 A1:0-3|B1:4-5"
441 # rtest (cpuset.cpus.exclusive=1-7)
443 # +------+------+
446 # +--+--+ +--+--+
448 # c11 c12 c21 c22
451 # Only CPUs 1-7 should be used.
454 # old-p1 old-p2 old-c11 old-c12 old-c21 old-c22
455 # new-p1 new-p2 new-c11 new-c12 new-c21 new-c22 ECPUs Pstate ISOLCPUS
456 # ------ ------ ------- ------- ------- ------- ----- ------ --------
457 " X1-3:S+ X4-6:S+ X1-2 X3 X4-5 X6 \
458 . . P2 P2 P2 P2 c11:1-2|c12:3|c21:4-5|c22:6 \
459 c11:P2|c12:P2|c21:P2|c22:P2 1-6"
460 " CX1-4:S+ . X1-2:P2 C3 . . \
461 . . . C3-4 . . p1:3-4|c11:1-2|c12:3-4 \
462 p1:P0|c11:P2|c12:P0 1-2"
463 " CX1-4:S+ . X1-2:P2 . . . \
464 X2-4 . . . . . p1:1,3-4|c11:2 \
466 " CX1-5:S+ . X1-2:P2 X3-5:P1 . . \
467 X2-4 . . . . . p1:1,5|c11:2|c12:3-4 \
469 " CX1-4:S+ . X1-2:P2 X3-4:P1 . . \
470 . . X2 . . . p1:1|c11:2|c12:3-4 \
473 " CX1-4:S+ . X1-2:P2 X3-4:P1 . . \
474 . . X1 CX2-4 . . p1:5-7|c11:1|c12:2-4 \
476 " CX1-4:S+ X5-6:P1:S+ . . . . \
477 . . X1-2:P2 X4-5:P1 . X1-7:P2 p1:3|c11:1-2|c12:4:c22:5-6 \
478 p1:P0|p2:P1|c11:P2|c12:P1|c22:P2 \
479 1-2,4-6|1-2,5-6"
484 # $1 - <c>=<v> where <c> = cpu number, <v> value to be written
491 if [[ $VAL -eq 0 ]]
495 [[ -n "$OFFLINE_CPUS" ]] && {
496 OFFLINE_CPUS=$(echo $CPU $CPU $OFFLINE_CPUS | fmt -1 |\
497 sort | uniq -u)
506 # $1 - cgroup directory
507 # $2 - state
508 # $3 - showerr
517 SHOWERR=${3}
521 [[ -z "$STATE" || "$STATE" = '.' ]] && return 0
522 [[ $VERBOSE -gt 0 ]] && SHOWERR=1
524 rm -f $TMPMSG
525 for CMD in $(echo $STATE | sed -e "s/:/ /g")
560 echo "Invalid partition state - $VAL"
578 [[ $RET -ne 0 ]] && {
579 [[ -n "$SHOWERR" ]] && {
586 rm -f $TMPMSG
595 [[ -d $CGRP ]] || mkdir $CGRP
597 [[ $? -ne 0 ]] && {
605 [[ -n "OFFLINE_CPUS" ]] && {
634 [[ -e $CPUS ]] && echo "$CPUS: $(cat $CPUS)"
635 [[ -e $XCPUS ]] && echo "$XCPUS: $(cat $XCPUS)"
636 [[ -e $ECPUS ]] && echo "$ECPUS: $(cat $ECPUS)"
637 [[ -e $XECPUS ]] && echo "$XECPUS: $(cat $XECPUS)"
638 [[ -e $PRS ]] && echo "$PRS: $(cat $PRS)"
639 [[ -e $PCPUS ]] && echo "$PCPUS: $(cat $PCPUS)"
640 [[ -e $ISCPUS ]] && echo "$ISCPUS: $(cat $ISCPUS)"
646 # $1 - cgroup name
656 [[ $CGRP_DIR = c22 ]] && CGRP_DIR=p2/c22
661 # $1 - check string, format: <cgroup>:<cpu-list>[|<cgroup>:<cpu-list>]*
666 for CHK in $(echo $CHK_STR | sed -e "s/|/ /g")
668 set -- $(echo $CHK | sed -e "s/:/ /g")
680 [[ -e $CGRP_DIR/$FILE ]] || return 1
688 # $1 - check string, format: <cgroup>:<state>[|<cgroup>:<state>]*
693 for CHK in $(echo $CHK_STR | sed -e "s/|/ /g")
695 set -- $(echo $CHK | sed -e "s/:/ /g")
720 VAL=-1
723 VAL=-2
729 # For root partition, dump sched-domains info to console if
732 [[ $VAL -eq 1 && $VERBOSE -gt 0 ]] && {
734 [[ -n "$DOMS" ]] &&
735 echo " [$CGRP_DIR] sched-domain: $DOMS" > $CONSOLE
747 # CPUs as well as CPUs in non-isolated 1-CPU partition. Those CPUs may
752 # $1 - expected isolated cpu list(s) <isolcpus1>{,<isolcpus2>}
753 # <isolcpus1> - expected sched/domains value
754 # <isolcpus2> - cpuset.cpus.isolated value = <isolcpus1> if not defined
769 set -- $(echo $EXPECTED_ISOLCPUS | sed -e "s/|/ /g")
777 # Appending pre-isolated CPUs
778 # Even though CPU #8 isn't used for testing, it can't be pre-isolated
781 [[ -n "$BOOT_ISOLCPUS" ]] && {
801 [[ -d $SCHED_DOMAINS ]] || return 0
805 [[ -n "$(ls ${SCHED_DOMAINS}/cpu$CPU)" ]] && continue
807 if [[ -z "$LASTISOLCPU" ]]
811 elif [[ "$LASTISOLCPU" -eq $((CPU - 1)) ]]
813 echo $ISOLCPUS | grep -q "\<$LASTISOLCPU\$"
814 if [[ $? -eq 0 ]]
816 ISOLCPUS=${ISOLCPUS}-
820 if [[ $ISOLCPUS = *- ]]
828 [[ "$ISOLCPUS" = *- ]] && ISOLCPUS=${ISOLCPUS}$LASTISOLCPU
837 ADDINFO=$3
839 [[ -n "$ADDINFO" ]] && echo "*** $ADDINFO ***"
852 [[ $VERBOSE -gt 0 ]] || return 0
855 while [[ $RETRY -lt 8 ]]
859 [[ $? -eq 0 ]] && return 0
869 # $1 - Test number
870 # $2 - Expected effective CPU values
871 # $3 - Expected partition states
872 # $4 - Expected isolated CPUs
878 _PSTATES="$3"
881 [[ -n "$_ECPUS" && "$_ECPUS" != . ]] && {
883 [[ $? -ne 0 ]] && test_fail $_NR "effective CPU" \
887 [[ -n "$_PSTATES" && "$_PSTATES" != . ]] && {
889 [[ $? -ne 0 ]] && test_fail $_NR states \
895 [[ -n "$_ISOLCPUS" ]] && {
897 [[ $? -ne 0 ]] && {
898 [[ -n "$BOOT_ISOLCPUS" ]] && _ISOLCPUS=${_ISOLCPUS},${BOOT_ISOLCPUS}
909 while [[ $_NEWLIST != $CPULIST && $RETRY -lt 8 ]]
921 [[ $VERBOSE -gt 0 ]] && echo "Test $I done."
926 # $1 - test matrix name
944 while [[ $I -lt $CNT ]]
947 [[ $VERBOSE -gt 1 ]] && {
951 eval set -- "\${$TEST[$I]}"
954 OLD_A3=$3
976 [[ $RETVAL -ne $RESULT ]] && test_fail $I result
986 # $1 - test matrix name
992 [[ -d rtest ]] || mkdir rtest
995 echo "1-7" > cpuset.cpus
996 echo "1-7" > cpuset.cpus.exclusive
997 CGROUP_LIST=".. . p1 p2 p1/c11 p1/c12 p2/c21 p2/c22"
998 RESET_LIST="p1/c11 p1/c12 p2/c21 p2/c22 p1 p2"
1005 while [[ $I -lt $CNT ]]
1008 [[ $VERBOSE -gt 1 ]] && {
1012 eval set -- "\${$TEST[$I]}"
1015 OLD_c11=$3
1034 set_ctrl_state_noerr p2/c22 $OLD_c22
1042 set_ctrl_state p2/c22 $NEW_c22; ((RETVAL += $?))
1044 [[ $RETVAL -ne 0 ]] && test_fail $I result
1060 echo 2-3 > cpuset.cpus
1091 echo 2-3 > cpuset.cpus
1093 test_effective_cpus 2-3
1107 test_effective_cpus 3
1109 echo 2-3 > cpuset.cpus
1116 [[ -d A1 ]] && rmdir A1
1144 [[ -f $WAIT_INOTIFY ]] || {
1154 rm -f $PRS
1159 check_cgroup_states ".:P-1"
1160 if [[ $? -ne 0 ]]
1162 echo "FAILED: Inotify test - partition not invalid"
1164 elif [[ ! -f $PRS ]]
1166 echo "FAILED: Inotify test - event not generated"
1171 echo "FAILED: Inotify test - incorrect state"
1178 if [[ $ERR -ne 0 ]]
1188 trap cleanup 0 2 3 6