Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

kselftest/cgroup: Simplify test_cpuset_prs.sh by removing "S+" command

The "S+" command is used in the test matrix to enable the cpuset
controller. However this can be done automatically and we never use the
"S-" command to disable cpuset controller. Simplify the test matrix and
reduce clutter by removing the command and doing that automatically.
There is no functional change to the test cases.

Signed-off-by: Waiman Long <longman@redhat.com>
Signed-off-by: Tejun Heo <tj@kernel.org>

authored by

Waiman Long and committed by
Tejun Heo
5e6aac57 14713ed9

+104 -109
+104 -109
tools/testing/selftests/cgroup/test_cpuset_prs.sh
··· 196 196 # P<v> = set cpus.partition (0:member, 1:root, 2:isolated) 197 197 # C<l> = add cpu-list to cpuset.cpus 198 198 # X<l> = add cpu-list to cpuset.cpus.exclusive 199 - # S<p> = use prefix in subtree_control 200 199 # T = put a task into cgroup 201 200 # CX<l> = add cpu-list to both cpuset.cpus and cpuset.cpus.exclusive 202 201 # O<c>=<v> = Write <v> to CPU online file of <c> ··· 208 209 # sched-debug matching which includes offline CPUs and single-CPU partitions 209 210 # while the second one is for matching cpuset.cpus.isolated. 210 211 # 211 - SETUP_A123_PARTITIONS="C1-3:P1:S+ C2-3:P1:S+ C3:P1" 212 + SETUP_A123_PARTITIONS="C1-3:P1 C2-3:P1 C3:P1" 212 213 TEST_MATRIX=( 213 214 # old-A1 old-A2 old-A3 old-B1 new-A1 new-A2 new-A3 new-B1 fail ECPUs Pstate ISOLCPUS 214 215 # ------ ------ ------ ------ ------ ------ ------ ------ ---- ----- ------ -------- 215 - " C0-1 . . C2-3 S+ C4-5 . . 0 A2:0-1" 216 + " C0-1 . . C2-3 . C4-5 . . 0 A2:0-1" 216 217 " C0-1 . . C2-3 P1 . . . 0 " 217 - " C0-1 . . C2-3 P1:S+ C0-1:P1 . . 0 " 218 - " C0-1 . . C2-3 P1:S+ C1:P1 . . 0 " 219 - " C0-1:S+ . . C2-3 . . . P1 0 " 220 - " C0-1:P1 . . C2-3 S+ C1 . . 0 " 221 - " C0-1:P1 . . C2-3 S+ C1:P1 . . 0 " 222 - " C0-1:P1 . . C2-3 S+ C1:P1 . P1 0 " 218 + " C0-1 . . C2-3 P1 C0-1:P1 . . 0 " 219 + " C0-1 . . C2-3 P1 C1:P1 . . 0 " 220 + " C0-1 . . C2-3 . . . P1 0 " 221 + " C0-1:P1 . . C2-3 . C1 . . 0 " 222 + " C0-1:P1 . . C2-3 . C1:P1 . . 0 " 223 + " C0-1:P1 . . C2-3 . C1:P1 . P1 0 " 223 224 " C0-1:P1 . . C2-3 C4-5 . . . 0 A1:4-5" 224 - " C0-1:P1 . . C2-3 S+:C4-5 . . . 0 A1:4-5" 225 225 " C0-1 . . C2-3:P1 . . . C2 0 " 226 226 " C0-1 . . C2-3:P1 . . . C4-5 0 B1:4-5" 227 - "C0-3:P1:S+ C2-3:P1 . . . . . . 0 A1:0-1|A2:2-3|XA2:2-3" 228 - "C0-3:P1:S+ C2-3:P1 . . C1-3 . . . 0 A1:1|A2:2-3|XA2:2-3" 229 - "C2-3:P1:S+ C3:P1 . . C3 . . . 0 A1:|A2:3|XA2:3 A1:P1|A2:P1" 230 - "C2-3:P1:S+ C3:P1 . . C3 P0 . . 0 A1:3|A2:3 A1:P1|A2:P0" 231 - "C2-3:P1:S+ C2:P1 . . C2-4 . . . 0 A1:3-4|A2:2" 232 - "C2-3:P1:S+ C3:P1 . . C3 . . C0-2 0 A1:|B1:0-2 A1:P1|A2:P1" 227 + " C0-3:P1 C2-3:P1 . . . . . . 0 A1:0-1|A2:2-3|XA2:2-3" 228 + " C0-3:P1 C2-3:P1 . . C1-3 . . . 0 A1:1|A2:2-3|XA2:2-3" 229 + " C2-3:P1 C3:P1 . . C3 . . . 0 A1:|A2:3|XA2:3 A1:P1|A2:P1" 230 + " C2-3:P1 C3:P1 . . C3 P0 . . 0 A1:3|A2:3 A1:P1|A2:P0" 231 + " C2-3:P1 C2:P1 . . C2-4 . . . 0 A1:3-4|A2:2" 232 + " C2-3:P1 C3:P1 . . C3 . . C0-2 0 A1:|B1:0-2 A1:P1|A2:P1" 233 233 "$SETUP_A123_PARTITIONS . C2-3 . . . 0 A1:|A2:2|A3:3 A1:P1|A2:P1|A3:P1" 234 234 235 235 # CPU offlining cases: 236 - " C0-1 . . C2-3 S+ C4-5 . O2=0 0 A1:0-1|B1:3" 237 - "C0-3:P1:S+ C2-3:P1 . . O2=0 . . . 0 A1:0-1|A2:3" 238 - "C0-3:P1:S+ C2-3:P1 . . O2=0 O2=1 . . 0 A1:0-1|A2:2-3" 239 - "C0-3:P1:S+ C2-3:P1 . . O1=0 . . . 0 A1:0|A2:2-3" 240 - "C0-3:P1:S+ C2-3:P1 . . O1=0 O1=1 . . 0 A1:0-1|A2:2-3" 241 - "C2-3:P1:S+ C3:P1 . . O3=0 O3=1 . . 0 A1:2|A2:3 A1:P1|A2:P1" 242 - "C2-3:P1:S+ C3:P2 . . O3=0 O3=1 . . 0 A1:2|A2:3 A1:P1|A2:P2" 243 - "C2-3:P1:S+ C3:P1 . . O2=0 O2=1 . . 0 A1:2|A2:3 A1:P1|A2:P1" 244 - "C2-3:P1:S+ C3:P2 . . O2=0 O2=1 . . 0 A1:2|A2:3 A1:P1|A2:P2" 245 - "C2-3:P1:S+ C3:P1 . . O2=0 . . . 0 A1:|A2:3 A1:P1|A2:P1" 246 - "C2-3:P1:S+ C3:P1 . . O3=0 . . . 0 A1:2|A2: A1:P1|A2:P1" 247 - "C2-3:P1:S+ C3:P1 . . T:O2=0 . . . 0 A1:3|A2:3 A1:P1|A2:P-1" 248 - "C2-3:P1:S+ C3:P1 . . . T:O3=0 . . 0 A1:2|A2:2 A1:P1|A2:P-1" 236 + " C0-1 . . C2-3 . C4-5 . O2=0 0 A1:0-1|B1:3" 237 + " C0-3:P1 C2-3:P1 . . O2=0 . . . 0 A1:0-1|A2:3" 238 + " C0-3:P1 C2-3:P1 . . O2=0 O2=1 . . 0 A1:0-1|A2:2-3" 239 + " C0-3:P1 C2-3:P1 . . O1=0 . . . 0 A1:0|A2:2-3" 240 + " C0-3:P1 C2-3:P1 . . O1=0 O1=1 . . 0 A1:0-1|A2:2-3" 241 + " C2-3:P1 C3:P1 . . O3=0 O3=1 . . 0 A1:2|A2:3 A1:P1|A2:P1" 242 + " C2-3:P1 C3:P2 . . O3=0 O3=1 . . 0 A1:2|A2:3 A1:P1|A2:P2" 243 + " C2-3:P1 C3:P1 . . O2=0 O2=1 . . 0 A1:2|A2:3 A1:P1|A2:P1" 244 + " C2-3:P1 C3:P2 . . O2=0 O2=1 . . 0 A1:2|A2:3 A1:P1|A2:P2" 245 + " C2-3:P1 C3:P1 . . O2=0 . . . 0 A1:|A2:3 A1:P1|A2:P1" 246 + " C2-3:P1 C3:P1 . . O3=0 . . . 0 A1:2|A2: A1:P1|A2:P1" 247 + " C2-3:P1 C3:P1 . . T:O2=0 . . . 0 A1:3|A2:3 A1:P1|A2:P-1" 248 + " C2-3:P1 C3:P1 . . . T:O3=0 . . 0 A1:2|A2:2 A1:P1|A2:P-1" 249 249 "$SETUP_A123_PARTITIONS . O1=0 . . . 0 A1:|A2:2|A3:3 A1:P1|A2:P1|A3:P1" 250 250 "$SETUP_A123_PARTITIONS . O2=0 . . . 0 A1:1|A2:|A3:3 A1:P1|A2:P1|A3:P1" 251 251 "$SETUP_A123_PARTITIONS . O3=0 . . . 0 A1:1|A2:2|A3: A1:P1|A2:P1|A3:P1" ··· 262 264 # 263 265 # Remote partition and cpuset.cpus.exclusive tests 264 266 # 265 - " C0-3:S+ C1-3:S+ C2-3 . X2-3 . . . 0 A1:0-3|A2:1-3|A3:2-3|XA1:2-3" 266 - " 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" 267 - " 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" 268 - " 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" 269 - " 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" 270 - " C0-3:S+ C1-3:S+ C2-3 C2-3 . . . P2 0 A1:0-1|A2:1|A3:1|B1:2-3 A1:P0|A3:P0|B1:P2" 271 - " C0-3:S+ C1-3:S+ C2-3 C4-5 . . . P2 0 B1:4-5 B1:P2 4-5" 272 - " 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" 273 - " 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" 274 - " 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" 275 - " 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" 276 - " C4:X0-3:S+ X1-3:S+ X2-3 . . P2 . . 0 A1:4|A2:1-3|A3:1-3 A2:P2 1-3" 277 - " C4:X0-3:S+ X1-3:S+ X2-3 . . . P2 . 0 A1:4|A2:4|A3:2-3 A3:P2 2-3" 267 + " C0-3 C1-3 C2-3 . X2-3 . . . 0 A1:0-3|A2:1-3|A3:2-3|XA1:2-3" 268 + " C0-3 C1-3 C2-3 . X2-3 X2-3:P2 . . 0 A1:0-1|A2:2-3|A3:2-3 A1:P0|A2:P2 2-3" 269 + " C0-3 C1-3 C2-3 . X2-3 X3:P2 . . 0 A1:0-2|A2:3|A3:3 A1:P0|A2:P2 3" 270 + " C0-3 C1-3 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 C1-3 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 C1-3 C2-3 C2-3 . . . P2 0 A1:0-1|A2:1|A3:1|B1:2-3 A1:P0|A3:P0|B1:P2" 273 + " C0-3 C1-3 C2-3 C4-5 . . . P2 0 B1:4-5 B1:P2 4-5" 274 + " C0-3 C1-3 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 C1-3 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 C1-3 C2-3 C4 X1-3 X1-3:P2 P2 . 0 A2:1|A3:2-3 A2:P2|A3:P2 1-3" 277 + " C0-3 C1-3 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 X1-3 X2-3 . . P2 . . 0 A1:4|A2:1-3|A3:1-3 A2:P2 1-3" 279 + " C4:X0-3 X1-3 X2-3 . . . P2 . 0 A1:4|A2:4|A3:2-3 A3:P2 2-3" 278 280 279 281 # Nested remote/local partition tests 280 - " 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 \ 282 + " C0-3 C1-3 C2-3 C4-5 X2-3 X2-3:P1 P2 P1 0 A1:0-1|A2:|A3:2-3|B1:4-5 \ 281 283 A1:P0|A2:P1|A3:P2|B1:P1 2-3" 282 - " 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 \ 284 + " C0-3 C1-3 C2-3 C4 X2-3 X2-3:P1 P2 P1 0 A1:0-1|A2:|A3:2-3|B1:4 \ 283 285 A1:P0|A2:P1|A3:P2|B1:P1 2-4|2-3" 284 - " 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 \ 286 + " C0-3 C1-3 C2-3 C4 X2-3 X2-3:P1 . P1 0 A1:0-1|A2:2-3|A3:2-3|B1:4 \ 285 287 A1:P0|A2:P1|A3:P0|B1:P1" 286 - " 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 \ 288 + " C0-3 C1-3 C3 C4 X2-3 X2-3:P1 P2 P1 0 A1:0-1|A2:2|A3:3|B1:4 \ 287 289 A1:P0|A2:P1|A3:P2|B1:P1 2-4|3" 288 - " C0-4:S+ C1-4:S+ C2-4 . X2-4 X2-4:P2 X4:P1 . 0 A1:0-1|A2:2-3|A3:4 \ 290 + " C0-4 C1-4 C2-4 . X2-4 X2-4:P2 X4:P1 . 0 A1:0-1|A2:2-3|A3:4 \ 289 291 A1:P0|A2:P2|A3:P1 2-4|2-3" 290 - " 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 \ 292 + " C0-4 C1-4 C2-4 . X2-4 X2-4:P2 X3-4:P1 . 0 A1:0-1|A2:2|A3:3-4 \ 291 293 A1:P0|A2:P2|A3:P1 2" 292 - " C0-4:X2-4:S+ C1-4:X2-4:S+:P2 C2-4:X4:P1 \ 294 + " C0-4:X2-4 C1-4:X2-4:P2 C2-4:X4:P1 \ 293 295 . . X5 . . 0 A1:0-4|A2:1-4|A3:2-4 \ 294 296 A1:P0|A2:P-2|A3:P-1 ." 295 - " C0-4:X2-4:S+ C1-4:X2-4:S+:P2 C2-4:X4:P1 \ 297 + " C0-4:X2-4 C1-4:X2-4:P2 C2-4:X4:P1 \ 296 298 . . . X1 . 0 A1:0-1|A2:2-4|A3:2-4 \ 297 299 A1:P0|A2:P2|A3:P-1 2-4" 298 300 299 301 # Remote partition offline tests 300 - " 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" 301 - " 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" 302 - " 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" 303 - " 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|" 302 + " C0-3 C1-3 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 C1-3 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 C1-3 C3 . X2-3 X2-3 P2:O3=0 . 0 A1:0-2|A2:1-2|A3: A1:P0|A3:P2 3" 305 + " C0-3 C1-3 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|" 304 306 305 307 # An invalidated remote partition cannot self-recover from hotplug 306 - " 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 ." 308 + " C0-3 C1-3 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 ." 307 309 308 310 # cpus.exclusive.effective clearing test 309 - " C0-3:S+ C1-3:S+ C2 . X2-3:X . . . 0 A1:0-3|A2:1-3|A3:2|XA1:" 311 + " C0-3 C1-3 C2 . X2-3:X . . . 0 A1:0-3|A2:1-3|A3:2|XA1:" 310 312 311 313 # Invalid to valid remote partition transition test 312 - " C0-3:S+ C1-3 . . . X3:P2 . . 0 A1:0-3|A2:1-3|XA2: A2:P-2 ." 313 - " C0-3:S+ C1-3:X3:P2 314 - . . X2-3 P2 . . 0 A1:0-2|A2:3|XA2:3 A2:P2 3" 314 + " C0-3 C1-3 . . . X3:P2 . . 0 A1:0-3|A2:1-3|XA2: A2:P-2 ." 315 + " C0-3 C1-3:X3:P2 . . X2-3 P2 . . 0 A1:0-2|A2:3|XA2:3 A2:P2 3" 315 316 316 317 # Invalid to valid local partition direct transition tests 317 - " C1-3:S+:P2 X4:P2 . . . . . . 0 A1:1-3|XA1:1-3|A2:1-3:XA2: A1:P2|A2:P-2 1-3" 318 - " 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" 319 - " C0-3:P2 . . C4-6 C0-4 . . . 0 A1:0-4|B1:5-6 A1:P2|B1:P0" 320 - " C0-3:P2 . . C4-6 C0-4:C0-3 . . . 0 A1:0-3|B1:4-6 A1:P2|B1:P0 0-3" 318 + " C1-3:P2 X4:P2 . . . . . . 0 A1:1-3|XA1:1-3|A2:1-3:XA2: A1:P2|A2:P-2 1-3" 319 + " C1-3:P2 X4:P2 . . . X3:P2 . . 0 A1:1-2|XA1:1-3|A2:3:XA2:3 A1:P2|A2:P2 1-3" 320 + " C0-3:P2 . . C4-6 C0-4 . . . 0 A1:0-4|B1:5-6 A1:P2|B1:P0" 321 + " C0-3:P2 . . C4-6 C0-4:C0-3 . . . 0 A1:0-3|B1:4-6 A1:P2|B1:P0 0-3" 321 322 322 323 # Local partition invalidation tests 323 - " C0-3:X1-3:S+:P2 C1-3:X2-3:S+:P2 C2-3:X3:P2 \ 324 + " C0-3:X1-3:P2 C1-3:X2-3:P2 C2-3:X3:P2 \ 324 325 . . . . . 0 A1:1|A2:2|A3:3 A1:P2|A2:P2|A3:P2 1-3" 325 - " C0-3:X1-3:S+:P2 C1-3:X2-3:S+:P2 C2-3:X3:P2 \ 326 + " C0-3:X1-3:P2 C1-3:X2-3:P2 C2-3:X3:P2 \ 326 327 . . X4 . . 0 A1:1-3|A2:1-3|A3:2-3|XA2:|XA3: A1:P2|A2:P-2|A3:P-2 1-3" 327 - " C0-3:X1-3:S+:P2 C1-3:X2-3:S+:P2 C2-3:X3:P2 \ 328 + " C0-3:X1-3:P2 C1-3:X2-3:P2 C2-3:X3:P2 \ 328 329 . . C4:X . . 0 A1:1-3|A2:1-3|A3:2-3|XA2:|XA3: A1:P2|A2:P-2|A3:P-2 1-3" 329 330 # Local partition CPU change tests 330 - " C0-5:S+:P2 C4-5:S+:P1 . . . C3-5 . . 0 A1:0-2|A2:3-5 A1:P2|A2:P1 0-2" 331 - " C0-5:S+:P2 C4-5:S+:P1 . . C1-5 . . . 0 A1:1-3|A2:4-5 A1:P2|A2:P1 1-3" 331 + " C0-5:P2 C4-5:P1 . . . C3-5 . . 0 A1:0-2|A2:3-5 A1:P2|A2:P1 0-2" 332 + " C0-5:P2 C4-5:P1 . . C1-5 . . . 0 A1:1-3|A2:4-5 A1:P2|A2:P1 1-3" 332 333 333 334 # cpus_allowed/exclusive_cpus update tests 334 - " C0-3:X2-3:S+ C1-3:X2-3:S+ C2-3:X2-3 \ 335 + " C0-3:X2-3 C1-3:X2-3 C2-3:X2-3 \ 335 336 . X:C4 . P2 . 0 A1:4|A2:4|XA2:|XA3:|A3:4 \ 336 337 A1:P0|A3:P-2 ." 337 - " C0-3:X2-3:S+ C1-3:X2-3:S+ C2-3:X2-3 \ 338 + " C0-3:X2-3 C1-3:X2-3 C2-3:X2-3 \ 338 339 . X1 . P2 . 0 A1:0-3|A2:1-3|XA1:1|XA2:|XA3:|A3:2-3 \ 339 340 A1:P0|A3:P-2 ." 340 - " C0-3:X2-3:S+ C1-3:X2-3:S+ C2-3:X2-3 \ 341 + " C0-3:X2-3 C1-3:X2-3 C2-3:X2-3 \ 341 342 . . X3 P2 . 0 A1:0-2|A2:1-2|XA2:3|XA3:3|A3:3 \ 342 343 A1:P0|A3:P2 3" 343 - " C0-3:X2-3:S+ C1-3:X2-3:S+ C2-3:X2-3:P2 \ 344 + " C0-3:X2-3 C1-3:X2-3 C2-3:X2-3:P2 \ 344 345 . . X3 . . 0 A1:0-2|A2:1-2|XA2:3|XA3:3|A3:3|XA3:3 \ 345 346 A1:P0|A3:P2 3" 346 - " C0-3:X2-3:S+ C1-3:X2-3:S+ C2-3:X2-3:P2 \ 347 + " C0-3:X2-3 C1-3:X2-3 C2-3:X2-3:P2 \ 347 348 . X4 . . . 0 A1:0-3|A2:1-3|A3:2-3|XA1:4|XA2:|XA3 \ 348 349 A1:P0|A3:P-2" 349 350 ··· 353 356 # 354 357 # Adding CPUs to partition root that are not in parent's 355 358 # cpuset.cpus is allowed, but those extra CPUs are ignored. 356 - "C2-3:P1:S+ C3:P1 . . . C2-4 . . 0 A1:|A2:2-3 A1:P1|A2:P1" 359 + " C2-3:P1 C3:P1 . . . C2-4 . . 0 A1:|A2:2-3 A1:P1|A2:P1" 357 360 358 361 # Taking away all CPUs from parent or itself if there are tasks 359 362 # will make the partition invalid. 360 - "C2-3:P1:S+ C3:P1 . . T C2-3 . . 0 A1:2-3|A2:2-3 A1:P1|A2:P-1" 361 - " C3:P1:S+ C3 . . T P1 . . 0 A1:3|A2:3 A1:P1|A2:P-1" 363 + " C2-3:P1 C3:P1 . . T C2-3 . . 0 A1:2-3|A2:2-3 A1:P1|A2:P-1" 364 + " C3:P1 C3 . . T P1 . . 0 A1:3|A2:3 A1:P1|A2:P-1" 362 365 "$SETUP_A123_PARTITIONS . T:C2-3 . . . 0 A1:2-3|A2:2-3|A3:3 A1:P1|A2:P-1|A3:P-1" 363 366 "$SETUP_A123_PARTITIONS . T:C2-3:C1-3 . . . 0 A1:1|A2:2|A3:3 A1:P1|A2:P1|A3:P1" 364 367 365 368 # Changing a partition root to member makes child partitions invalid 366 - "C2-3:P1:S+ C3:P1 . . P0 . . . 0 A1:2-3|A2:3 A1:P0|A2:P-1" 369 + " C2-3:P1 C3:P1 . . P0 . . . 0 A1:2-3|A2:3 A1:P0|A2:P-1" 367 370 "$SETUP_A123_PARTITIONS . C2-3 P0 . . 0 A1:2-3|A2:2-3|A3:3 A1:P1|A2:P0|A3:P-1" 368 371 369 372 # cpuset.cpus can contains cpus not in parent's cpuset.cpus as long 370 373 # as they overlap. 371 - "C2-3:P1:S+ . . . . C3-4:P1 . . 0 A1:2|A2:3 A1:P1|A2:P1" 374 + " C2-3:P1 . . . . C3-4:P1 . . 0 A1:2|A2:3 A1:P1|A2:P1" 372 375 373 376 # Deletion of CPUs distributed to child cgroup is allowed. 374 - "C0-1:P1:S+ C1 . C2-3 C4-5 . . . 0 A1:4-5|A2:4-5" 377 + " C0-1:P1 C1 . C2-3 C4-5 . . . 0 A1:4-5|A2:4-5" 375 378 376 379 # To become a valid partition root, cpuset.cpus must overlap parent's 377 380 # cpuset.cpus. 378 - " C0-1:P1 . . C2-3 S+ C4-5:P1 . . 0 A1:0-1|A2:0-1 A1:P1|A2:P-1" 381 + " C0-1:P1 . . C2-3 . C4-5:P1 . . 0 A1:0-1|A2:0-1 A1:P1|A2:P-1" 379 382 380 383 # Enabling partition with child cpusets is allowed 381 - " C0-1:S+ C1 . C2-3 P1 . . . 0 A1:0-1|A2:1 A1:P1" 384 + " C0-1 C1 . C2-3 P1 . . . 0 A1:0-1|A2:1 A1:P1" 382 385 383 386 # A partition root with non-partition root parent is invalid| but it 384 387 # can be made valid if its parent becomes a partition root too. 385 - " C0-1:S+ C1 . C2-3 . P2 . . 0 A1:0-1|A2:1 A1:P0|A2:P-2" 386 - " C0-1:S+ C1:P2 . C2-3 P1 . . . 0 A1:0|A2:1 A1:P1|A2:P2 0-1|1" 388 + " C0-1 C1 . C2-3 . P2 . . 0 A1:0-1|A2:1 A1:P0|A2:P-2" 389 + " C0-1 C1:P2 . C2-3 P1 . . . 0 A1:0|A2:1 A1:P1|A2:P2 0-1|1" 387 390 388 391 # A non-exclusive cpuset.cpus change will not invalidate its siblings partition. 389 392 " C0-1:P1 . . C2-3 C0-2 . . . 0 A1:0-2|B1:3 A1:P1|B1:P0" ··· 395 398 396 399 # Child partition root that try to take all CPUs from parent partition 397 400 # with tasks will remain invalid. 398 - " C1-4:P1:S+ P1 . . . . . . 0 A1:1-4|A2:1-4 A1:P1|A2:P-1" 399 - " C1-4:P1:S+ P1 . . . C1-4 . . 0 A1|A2:1-4 A1:P1|A2:P1" 400 - " C1-4:P1:S+ P1 . . T C1-4 . . 0 A1:1-4|A2:1-4 A1:P1|A2:P-1" 401 + " C1-4:P1 P1 . . . . . . 0 A1:1-4|A2:1-4 A1:P1|A2:P-1" 402 + " C1-4:P1 P1 . . . C1-4 . . 0 A1|A2:1-4 A1:P1|A2:P1" 403 + " C1-4:P1 P1 . . T C1-4 . . 0 A1:1-4|A2:1-4 A1:P1|A2:P-1" 401 404 402 405 # Clearing of cpuset.cpus with a preset cpuset.cpus.exclusive shouldn't 403 406 # affect cpuset.cpus.exclusive.effective. 404 - " C1-4:X3:S+ C1:X3 . . . C . . 0 A2:1-4|XA2:3" 407 + " C1-4:X3 C1:X3 . . . C . . 0 A2:1-4|XA2:3" 405 408 406 409 # cpuset.cpus can contain CPUs that overlap a sibling cpuset with cpus.exclusive 407 410 # but creating a local partition out of it is not allowed. Similarly and change 408 411 # in cpuset.cpus of a local partition that overlaps sibling exclusive CPUs will 409 412 # invalidate it. 410 - " CX1-4:S+ CX2-4:P2 . C5-6 . . . P1 0 A1:1|A2:2-4|B1:5-6|XB1:5-6 \ 413 + " CX1-4 CX2-4:P2 . C5-6 . . . P1 0 A1:1|A2:2-4|B1:5-6|XB1:5-6 \ 411 414 A1:P0|A2:P2:B1:P1 2-4" 412 - " CX1-4:S+ CX2-4:P2 . C3-6 . . . P1 0 A1:1|A2:2-4|B1:5-6 \ 415 + " CX1-4 CX2-4:P2 . C3-6 . . . P1 0 A1:1|A2:2-4|B1:5-6 \ 413 416 A1:P0|A2:P2:B1:P-1 2-4" 414 - " CX1-4:S+ CX2-4:P2 . C5-6 . . . P1:C3-6 0 A1:1|A2:2-4|B1:5-6 \ 417 + " CX1-4 CX2-4:P2 . C5-6 . . . P1:C3-6 0 A1:1|A2:2-4|B1:5-6 \ 415 418 A1:P0|A2:P2:B1:P-1 2-4" 416 419 417 420 # When multiple partitions with conflicting cpuset.cpus are created, the ··· 423 426 " C1-3:X1-3 . . C4-5 . . . C1-2 0 A1:1-3|B1:1-2" 424 427 425 428 # cpuset.cpus can become empty with task in it as it inherits parent's effective CPUs 426 - " C1-3:S+ C2 . . . T:C . . 0 A1:1-3|A2:1-3" 429 + " C1-3 C2 . . . T:C . . 0 A1:1-3|A2:1-3" 427 430 428 431 # old-A1 old-A2 old-A3 old-B1 new-A1 new-A2 new-A3 new-B1 fail ECPUs Pstate ISOLCPUS 429 432 # ------ ------ ------ ------ ------ ------ ------ ------ ---- ----- ------ -------- 430 433 # Failure cases: 431 434 432 435 # A task cannot be added to a partition with no cpu 433 - "C2-3:P1:S+ C3:P1 . . O2=0:T . . . 1 A1:|A2:3 A1:P1|A2:P1" 436 + " C2-3:P1 C3:P1 . . O2=0:T . . . 1 A1:|A2:3 A1:P1|A2:P1" 434 437 435 438 # Changes to cpuset.cpus.exclusive that violate exclusivity rule is rejected 436 439 " C0-3 . . C4-5 X0-3 . . X3-5 1 A1:0-3|B1:4-5" ··· 462 465 # old-p1 old-p2 old-c11 old-c12 old-c21 old-c22 463 466 # new-p1 new-p2 new-c11 new-c12 new-c21 new-c22 ECPUs Pstate ISOLCPUS 464 467 # ------ ------ ------- ------- ------- ------- ----- ------ -------- 465 - " X1-3:S+ X4-6:S+ X1-2 X3 X4-5 X6 \ 468 + " X1-3 X4-6 X1-2 X3 X4-5 X6 \ 466 469 . . P2 P2 P2 P2 c11:1-2|c12:3|c21:4-5|c22:6 \ 467 470 c11:P2|c12:P2|c21:P2|c22:P2 1-6" 468 - " CX1-4:S+ . X1-2:P2 C3 . . \ 471 + " CX1-4 . X1-2:P2 C3 . . \ 469 472 . . . C3-4 . . p1:3-4|c11:1-2|c12:3-4 \ 470 473 p1:P0|c11:P2|c12:P0 1-2" 471 - " CX1-4:S+ . X1-2:P2 . . . \ 474 + " CX1-4 . X1-2:P2 . . . \ 472 475 X2-4 . . . . . p1:1,3-4|c11:2 \ 473 476 p1:P0|c11:P2 2" 474 - " CX1-5:S+ . X1-2:P2 X3-5:P1 . . \ 477 + " CX1-5 . X1-2:P2 X3-5:P1 . . \ 475 478 X2-4 . . . . . p1:1,5|c11:2|c12:3-4 \ 476 479 p1:P0|c11:P2|c12:P1 2" 477 - " CX1-4:S+ . X1-2:P2 X3-4:P1 . . \ 480 + " CX1-4 . X1-2:P2 X3-4:P1 . . \ 478 481 . . X2 . . . p1:1|c11:2|c12:3-4 \ 479 482 p1:P0|c11:P2|c12:P1 2" 480 483 # p1 as member, will get its effective CPUs from its parent rtest 481 - " CX1-4:S+ . X1-2:P2 X3-4:P1 . . \ 484 + " CX1-4 . X1-2:P2 X3-4:P1 . . \ 482 485 . . X1 CX2-4 . . p1:5-7|c11:1|c12:2-4 \ 483 486 p1:P0|c11:P2|c12:P1 1" 484 - " CX1-4:S+ X5-6:P1:S+ . . . . \ 485 - . . X1-2:P2 X4-5:P1 . X1-7:P2 p1:3|c11:1-2|c12:4:c22:5-6 \ 487 + " CX1-4 X5-6:P1 . . . . \ 488 + . . X1-2:P2 X4-5:P1 . X1-7:P2 p1:3|c11:1-2|c12:4:c22:5-6 \ 486 489 p1:P0|p2:P1|c11:P2|c12:P1|c22:P2 \ 487 490 1-2,4-6|1-2,5-6" 488 491 # c12 whose cpuset.cpus CPUs are all granted to c11 will become invalid partition 489 - " C1-5:P1:S+ . C1-4:P1 C2-3 . . \ 492 + " C1-5:P1 . C1-4:P1 C2-3 . . \ 490 493 . . . P1 . . p1:5|c11:1-4|c12:5 \ 491 494 p1:P1|c11:P1|c12:P-1" 492 495 ) ··· 527 530 CGRP=$1 528 531 STATE=$2 529 532 SHOWERR=${3} 530 - CTRL=${CTRL:=$CONTROLLER} 531 533 HASERR=0 532 534 REDIRECT="2> $TMPMSG" 533 535 [[ -z "$STATE" || "$STATE" = '.' ]] && return 0 ··· 536 540 for CMD in $(echo $STATE | sed -e "s/:/ /g") 537 541 do 538 542 TFILE=$CGRP/cgroup.procs 539 - SFILE=$CGRP/cgroup.subtree_control 540 543 PFILE=$CGRP/cpuset.cpus.partition 541 544 CFILE=$CGRP/cpuset.cpus 542 545 XFILE=$CGRP/cpuset.cpus.exclusive 543 - case $CMD in 544 - S*) PREFIX=${CMD#?} 545 - COMM="echo ${PREFIX}${CTRL} > $SFILE" 546 + 547 + # Enable cpuset controller if not enabled yet 548 + [[ -f $CFILE ]] || { 549 + COMM="echo +cpuset > $CGRP/../cgroup.subtree_control" 546 550 eval $COMM $REDIRECT 547 - ;; 551 + } 552 + case $CMD in 548 553 X*) 549 554 CPUS=${CMD#?} 550 555 COMM="echo $CPUS > $XFILE" ··· 944 947 run_state_test() 945 948 { 946 949 TEST=$1 947 - CONTROLLER=cpuset 948 950 CGROUP_LIST=". A1 A1/A2 A1/A2/A3 B1" 949 951 RESET_LIST="A1/A2/A3 A1/A2 A1 B1" 950 952 I=0 ··· 999 1003 run_remote_state_test() 1000 1004 { 1001 1005 TEST=$1 1002 - CONTROLLER=cpuset 1003 1006 [[ -d rtest ]] || mkdir rtest 1004 1007 cd rtest 1005 1008 echo +cpuset > cgroup.subtree_control