File indexing completed on 2025-05-11 08:24:52
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051 #ifdef HAVE_CONFIG_H
0052 #include "config.h"
0053 #endif
0054
0055 #include <rtems.h>
0056 #include <rtems/score/percpu.h>
0057 #include <rtems/score/threaddispatch.h>
0058 #include <rtems/score/threadimpl.h>
0059
0060 #include "tx-support.h"
0061 #include "tx-thread-queue.h"
0062
0063 #include <rtems/test.h>
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074 typedef enum {
0075 ScoreSchedSmpEdfReqSetAffinity_Pre_Before_All,
0076 ScoreSchedSmpEdfReqSetAffinity_Pre_Before_X,
0077 ScoreSchedSmpEdfReqSetAffinity_Pre_Before_NA
0078 } ScoreSchedSmpEdfReqSetAffinity_Pre_Before;
0079
0080 typedef enum {
0081 ScoreSchedSmpEdfReqSetAffinity_Pre_After_All,
0082 ScoreSchedSmpEdfReqSetAffinity_Pre_After_X,
0083 ScoreSchedSmpEdfReqSetAffinity_Pre_After_Y,
0084 ScoreSchedSmpEdfReqSetAffinity_Pre_After_NA
0085 } ScoreSchedSmpEdfReqSetAffinity_Pre_After;
0086
0087 typedef enum {
0088 ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_High,
0089 ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_Low,
0090 ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_NA
0091 } ScoreSchedSmpEdfReqSetAffinity_Pre_Priority;
0092
0093 typedef enum {
0094 ScoreSchedSmpEdfReqSetAffinity_Pre_State_Ready,
0095 ScoreSchedSmpEdfReqSetAffinity_Pre_State_Blocked,
0096 ScoreSchedSmpEdfReqSetAffinity_Pre_State_NA
0097 } ScoreSchedSmpEdfReqSetAffinity_Pre_State;
0098
0099 typedef enum {
0100 ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_Yes,
0101 ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_No,
0102 ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_NA
0103 } ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky;
0104
0105 typedef enum {
0106 ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_Yes,
0107 ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_No,
0108 ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_NA
0109 } ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned;
0110
0111 typedef enum {
0112 ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_High,
0113 ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_Low,
0114 ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_NA
0115 } ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority;
0116
0117 typedef enum {
0118 ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_All,
0119 ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_X,
0120 ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_NA
0121 } ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity;
0122
0123 typedef enum {
0124 ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_Yes,
0125 ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_No,
0126 ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_NA
0127 } ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle;
0128
0129 typedef enum {
0130 ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_High,
0131 ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_Low,
0132 ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_NA
0133 } ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority;
0134
0135 typedef enum {
0136 ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_All,
0137 ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_Y,
0138 ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_NA
0139 } ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity;
0140
0141 typedef enum {
0142 ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_Yes,
0143 ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_No,
0144 ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_NA
0145 } ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle;
0146
0147 typedef enum {
0148 ScoreSchedSmpEdfReqSetAffinity_Post_X_Task,
0149 ScoreSchedSmpEdfReqSetAffinity_Post_X_TaskIdle,
0150 ScoreSchedSmpEdfReqSetAffinity_Post_X_Alpha,
0151 ScoreSchedSmpEdfReqSetAffinity_Post_X_AlphaIdle,
0152 ScoreSchedSmpEdfReqSetAffinity_Post_X_Beta,
0153 ScoreSchedSmpEdfReqSetAffinity_Post_X_BetaIdle,
0154 ScoreSchedSmpEdfReqSetAffinity_Post_X_NA
0155 } ScoreSchedSmpEdfReqSetAffinity_Post_X;
0156
0157 typedef enum {
0158 ScoreSchedSmpEdfReqSetAffinity_Post_Y_Task,
0159 ScoreSchedSmpEdfReqSetAffinity_Post_Y_TaskIdle,
0160 ScoreSchedSmpEdfReqSetAffinity_Post_Y_Alpha,
0161 ScoreSchedSmpEdfReqSetAffinity_Post_Y_AlphaIdle,
0162 ScoreSchedSmpEdfReqSetAffinity_Post_Y_Beta,
0163 ScoreSchedSmpEdfReqSetAffinity_Post_Y_BetaIdle,
0164 ScoreSchedSmpEdfReqSetAffinity_Post_Y_NA
0165 } ScoreSchedSmpEdfReqSetAffinity_Post_Y;
0166
0167 typedef struct {
0168 uint32_t Skip : 1;
0169 uint32_t Pre_Before_NA : 1;
0170 uint32_t Pre_After_NA : 1;
0171 uint32_t Pre_Priority_NA : 1;
0172 uint32_t Pre_State_NA : 1;
0173 uint32_t Pre_Sticky_NA : 1;
0174 uint32_t Pre_Pinned_NA : 1;
0175 uint32_t Pre_AlphaPriority_NA : 1;
0176 uint32_t Pre_AlphaAffinity_NA : 1;
0177 uint32_t Pre_AlphaIdle_NA : 1;
0178 uint32_t Pre_BetaPriority_NA : 1;
0179 uint32_t Pre_BetaAffinity_NA : 1;
0180 uint32_t Pre_BetaIdle_NA : 1;
0181 uint32_t Post_X : 3;
0182 uint32_t Post_Y : 3;
0183 } ScoreSchedSmpEdfReqSetAffinity_Entry;
0184
0185
0186
0187
0188
0189 typedef struct {
0190
0191
0192
0193 TQContext tq_ctx;
0194
0195
0196
0197
0198
0199 cpu_set_t task_affinity_before;
0200
0201
0202
0203
0204
0205 cpu_set_t task_affinity_after;
0206
0207
0208
0209
0210 rtems_task_priority task_priority;
0211
0212
0213
0214
0215 bool task_ready;
0216
0217
0218
0219
0220
0221 bool task_sticky;
0222
0223
0224
0225
0226 bool task_pinned;
0227
0228
0229
0230
0231 rtems_task_priority alpha_priority;
0232
0233
0234
0235
0236 cpu_set_t alpha_affinity;
0237
0238
0239
0240
0241
0242 bool alpha_idle;
0243
0244
0245
0246
0247 rtems_task_priority beta_priority;
0248
0249
0250
0251
0252 cpu_set_t beta_affinity;
0253
0254
0255
0256
0257
0258 bool beta_idle;
0259
0260 struct {
0261
0262
0263
0264 size_t pcs[ 12 ];
0265
0266
0267
0268
0269 bool in_action_loop;
0270
0271
0272
0273
0274 size_t index;
0275
0276
0277
0278
0279 ScoreSchedSmpEdfReqSetAffinity_Entry entry;
0280
0281
0282
0283
0284
0285 bool skip;
0286 } Map;
0287 } ScoreSchedSmpEdfReqSetAffinity_Context;
0288
0289 static ScoreSchedSmpEdfReqSetAffinity_Context
0290 ScoreSchedSmpEdfReqSetAffinity_Instance;
0291
0292 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_Before[] = {
0293 "All",
0294 "X",
0295 "NA"
0296 };
0297
0298 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_After[] = {
0299 "All",
0300 "X",
0301 "Y",
0302 "NA"
0303 };
0304
0305 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_Priority[] = {
0306 "High",
0307 "Low",
0308 "NA"
0309 };
0310
0311 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_State[] = {
0312 "Ready",
0313 "Blocked",
0314 "NA"
0315 };
0316
0317 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_Sticky[] = {
0318 "Yes",
0319 "No",
0320 "NA"
0321 };
0322
0323 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_Pinned[] = {
0324 "Yes",
0325 "No",
0326 "NA"
0327 };
0328
0329 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_AlphaPriority[] = {
0330 "High",
0331 "Low",
0332 "NA"
0333 };
0334
0335 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_AlphaAffinity[] = {
0336 "All",
0337 "X",
0338 "NA"
0339 };
0340
0341 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_AlphaIdle[] = {
0342 "Yes",
0343 "No",
0344 "NA"
0345 };
0346
0347 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_BetaPriority[] = {
0348 "High",
0349 "Low",
0350 "NA"
0351 };
0352
0353 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_BetaAffinity[] = {
0354 "All",
0355 "Y",
0356 "NA"
0357 };
0358
0359 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_BetaIdle[] = {
0360 "Yes",
0361 "No",
0362 "NA"
0363 };
0364
0365 static const char * const * const ScoreSchedSmpEdfReqSetAffinity_PreDesc[] = {
0366 ScoreSchedSmpEdfReqSetAffinity_PreDesc_Before,
0367 ScoreSchedSmpEdfReqSetAffinity_PreDesc_After,
0368 ScoreSchedSmpEdfReqSetAffinity_PreDesc_Priority,
0369 ScoreSchedSmpEdfReqSetAffinity_PreDesc_State,
0370 ScoreSchedSmpEdfReqSetAffinity_PreDesc_Sticky,
0371 ScoreSchedSmpEdfReqSetAffinity_PreDesc_Pinned,
0372 ScoreSchedSmpEdfReqSetAffinity_PreDesc_AlphaPriority,
0373 ScoreSchedSmpEdfReqSetAffinity_PreDesc_AlphaAffinity,
0374 ScoreSchedSmpEdfReqSetAffinity_PreDesc_AlphaIdle,
0375 ScoreSchedSmpEdfReqSetAffinity_PreDesc_BetaPriority,
0376 ScoreSchedSmpEdfReqSetAffinity_PreDesc_BetaAffinity,
0377 ScoreSchedSmpEdfReqSetAffinity_PreDesc_BetaIdle,
0378 NULL
0379 };
0380
0381 #define TASK TQ_BLOCKER_C
0382
0383 #define ALPHA TQ_BLOCKER_A
0384
0385 #define BETA TQ_BLOCKER_B
0386
0387 static void ScoreSchedSmpEdfReqSetAffinity_Pre_Before_Prepare(
0388 ScoreSchedSmpEdfReqSetAffinity_Context *ctx,
0389 ScoreSchedSmpEdfReqSetAffinity_Pre_Before state
0390 )
0391 {
0392 switch ( state ) {
0393 case ScoreSchedSmpEdfReqSetAffinity_Pre_Before_All: {
0394
0395
0396
0397
0398 CPU_FILL( &ctx->task_affinity_before );
0399 break;
0400 }
0401
0402 case ScoreSchedSmpEdfReqSetAffinity_Pre_Before_X: {
0403
0404
0405
0406
0407 CPU_ZERO( &ctx->task_affinity_before );
0408 CPU_SET( 0, &ctx->task_affinity_before );
0409 break;
0410 }
0411
0412 case ScoreSchedSmpEdfReqSetAffinity_Pre_Before_NA:
0413 break;
0414 }
0415 }
0416
0417 static void ScoreSchedSmpEdfReqSetAffinity_Pre_After_Prepare(
0418 ScoreSchedSmpEdfReqSetAffinity_Context *ctx,
0419 ScoreSchedSmpEdfReqSetAffinity_Pre_After state
0420 )
0421 {
0422 switch ( state ) {
0423 case ScoreSchedSmpEdfReqSetAffinity_Pre_After_All: {
0424
0425
0426
0427
0428 CPU_FILL( &ctx->task_affinity_after );
0429 break;
0430 }
0431
0432 case ScoreSchedSmpEdfReqSetAffinity_Pre_After_X: {
0433
0434
0435
0436 CPU_ZERO( &ctx->task_affinity_after );
0437 CPU_SET( 0, &ctx->task_affinity_after );
0438 break;
0439 }
0440
0441 case ScoreSchedSmpEdfReqSetAffinity_Pre_After_Y: {
0442
0443
0444
0445 CPU_ZERO( &ctx->task_affinity_after );
0446 CPU_SET( 1, &ctx->task_affinity_after );
0447 break;
0448 }
0449
0450 case ScoreSchedSmpEdfReqSetAffinity_Pre_After_NA:
0451 break;
0452 }
0453 }
0454
0455 static void ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_Prepare(
0456 ScoreSchedSmpEdfReqSetAffinity_Context *ctx,
0457 ScoreSchedSmpEdfReqSetAffinity_Pre_Priority state
0458 )
0459 {
0460 switch ( state ) {
0461 case ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_High: {
0462
0463
0464
0465 ctx->task_priority = PRIO_HIGH;
0466 break;
0467 }
0468
0469 case ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_Low: {
0470
0471
0472
0473 ctx->task_priority = PRIO_NORMAL;
0474 break;
0475 }
0476
0477 case ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_NA:
0478 break;
0479 }
0480 }
0481
0482 static void ScoreSchedSmpEdfReqSetAffinity_Pre_State_Prepare(
0483 ScoreSchedSmpEdfReqSetAffinity_Context *ctx,
0484 ScoreSchedSmpEdfReqSetAffinity_Pre_State state
0485 )
0486 {
0487 switch ( state ) {
0488 case ScoreSchedSmpEdfReqSetAffinity_Pre_State_Ready: {
0489
0490
0491
0492 ctx->task_ready = true;
0493 break;
0494 }
0495
0496 case ScoreSchedSmpEdfReqSetAffinity_Pre_State_Blocked: {
0497
0498
0499
0500 ctx->task_ready = false;
0501 break;
0502 }
0503
0504 case ScoreSchedSmpEdfReqSetAffinity_Pre_State_NA:
0505 break;
0506 }
0507 }
0508
0509 static void ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_Prepare(
0510 ScoreSchedSmpEdfReqSetAffinity_Context *ctx,
0511 ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky state
0512 )
0513 {
0514 switch ( state ) {
0515 case ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_Yes: {
0516
0517
0518
0519 ctx->task_sticky = true;
0520 break;
0521 }
0522
0523 case ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_No: {
0524
0525
0526
0527 ctx->task_sticky = false;
0528 break;
0529 }
0530
0531 case ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_NA:
0532 break;
0533 }
0534 }
0535
0536 static void ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_Prepare(
0537 ScoreSchedSmpEdfReqSetAffinity_Context *ctx,
0538 ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned state
0539 )
0540 {
0541 switch ( state ) {
0542 case ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_Yes: {
0543
0544
0545
0546 ctx->task_pinned = true;
0547 break;
0548 }
0549
0550 case ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_No: {
0551
0552
0553
0554 ctx->task_pinned = false;
0555 break;
0556 }
0557
0558 case ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_NA:
0559 break;
0560 }
0561 }
0562
0563 static void ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_Prepare(
0564 ScoreSchedSmpEdfReqSetAffinity_Context *ctx,
0565 ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority state
0566 )
0567 {
0568 switch ( state ) {
0569 case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_High: {
0570
0571
0572
0573 ctx->alpha_priority = PRIO_HIGH;
0574 break;
0575 }
0576
0577 case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_Low: {
0578
0579
0580
0581 ctx->alpha_priority = PRIO_NORMAL;
0582 break;
0583 }
0584
0585 case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_NA:
0586 break;
0587 }
0588 }
0589
0590 static void ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_Prepare(
0591 ScoreSchedSmpEdfReqSetAffinity_Context *ctx,
0592 ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity state
0593 )
0594 {
0595 switch ( state ) {
0596 case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_All: {
0597
0598
0599
0600 CPU_FILL( &ctx->alpha_affinity );
0601 break;
0602 }
0603
0604 case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_X: {
0605
0606
0607
0608 CPU_ZERO( &ctx->alpha_affinity );
0609 CPU_SET( 0, &ctx->alpha_affinity );
0610 break;
0611 }
0612
0613 case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_NA:
0614 break;
0615 }
0616 }
0617
0618 static void ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_Prepare(
0619 ScoreSchedSmpEdfReqSetAffinity_Context *ctx,
0620 ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle state
0621 )
0622 {
0623 switch ( state ) {
0624 case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_Yes: {
0625
0626
0627
0628 ctx->alpha_idle = true;
0629 break;
0630 }
0631
0632 case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_No: {
0633
0634
0635
0636 ctx->alpha_idle = false;
0637 break;
0638 }
0639
0640 case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_NA:
0641 break;
0642 }
0643 }
0644
0645 static void ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_Prepare(
0646 ScoreSchedSmpEdfReqSetAffinity_Context *ctx,
0647 ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority state
0648 )
0649 {
0650 switch ( state ) {
0651 case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_High: {
0652
0653
0654
0655 ctx->beta_priority = PRIO_HIGH;
0656 break;
0657 }
0658
0659 case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_Low: {
0660
0661
0662
0663 ctx->beta_priority = PRIO_NORMAL;
0664 break;
0665 }
0666
0667 case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_NA:
0668 break;
0669 }
0670 }
0671
0672 static void ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_Prepare(
0673 ScoreSchedSmpEdfReqSetAffinity_Context *ctx,
0674 ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity state
0675 )
0676 {
0677 switch ( state ) {
0678 case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_All: {
0679
0680
0681
0682 CPU_FILL( &ctx->beta_affinity );
0683 break;
0684 }
0685
0686 case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_Y: {
0687
0688
0689
0690 CPU_ZERO( &ctx->beta_affinity );
0691 CPU_SET( 1, &ctx->beta_affinity );
0692 break;
0693 }
0694
0695 case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_NA:
0696 break;
0697 }
0698 }
0699
0700 static void ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_Prepare(
0701 ScoreSchedSmpEdfReqSetAffinity_Context *ctx,
0702 ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle state
0703 )
0704 {
0705 switch ( state ) {
0706 case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_Yes: {
0707
0708
0709
0710 ctx->beta_idle = true;
0711 break;
0712 }
0713
0714 case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_No: {
0715
0716
0717
0718 ctx->beta_idle = false;
0719 break;
0720 }
0721
0722 case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_NA:
0723 break;
0724 }
0725 }
0726
0727 static void ScoreSchedSmpEdfReqSetAffinity_Post_X_Check(
0728 ScoreSchedSmpEdfReqSetAffinity_Context *ctx,
0729 ScoreSchedSmpEdfReqSetAffinity_Post_X state
0730 )
0731 {
0732 const Per_CPU_Control *cpu;
0733 const Thread_Control *scheduled;
0734 const Scheduler_Node *scheduler_node;
0735
0736 cpu = _Per_CPU_Get_by_index( 0 );
0737 scheduled = cpu->heir;
0738
0739 switch ( state ) {
0740 case ScoreSchedSmpEdfReqSetAffinity_Post_X_Task: {
0741
0742
0743
0744 T_eq_ptr( scheduled, ctx->tq_ctx.worker_tcb[ TASK ] );
0745 break;
0746 }
0747
0748 case ScoreSchedSmpEdfReqSetAffinity_Post_X_TaskIdle: {
0749
0750
0751
0752
0753 T_true( scheduled->is_idle );
0754 scheduler_node = _Thread_Scheduler_get_home_node(
0755 ctx->tq_ctx.worker_tcb[ TASK ]
0756 );
0757 T_eq_ptr( scheduler_node->user, scheduled );
0758 break;
0759 }
0760
0761 case ScoreSchedSmpEdfReqSetAffinity_Post_X_Alpha: {
0762
0763
0764
0765 T_eq_ptr( scheduled, ctx->tq_ctx.worker_tcb[ ALPHA ] );
0766 break;
0767 }
0768
0769 case ScoreSchedSmpEdfReqSetAffinity_Post_X_AlphaIdle: {
0770
0771
0772
0773
0774 T_true( scheduled->is_idle );
0775 scheduler_node = _Thread_Scheduler_get_home_node(
0776 ctx->tq_ctx.worker_tcb[ ALPHA ]
0777 );
0778 T_eq_ptr( scheduler_node->user, scheduled );
0779 break;
0780 }
0781
0782 case ScoreSchedSmpEdfReqSetAffinity_Post_X_Beta: {
0783
0784
0785
0786 T_eq_ptr( scheduled, ctx->tq_ctx.worker_tcb[ BETA ] );
0787 break;
0788 }
0789
0790 case ScoreSchedSmpEdfReqSetAffinity_Post_X_BetaIdle: {
0791
0792
0793
0794
0795 T_true( scheduled->is_idle );
0796 scheduler_node = _Thread_Scheduler_get_home_node(
0797 ctx->tq_ctx.worker_tcb[ BETA ]
0798 );
0799 T_eq_ptr( scheduler_node->user, scheduled );
0800 break;
0801 }
0802
0803 case ScoreSchedSmpEdfReqSetAffinity_Post_X_NA:
0804 break;
0805 }
0806 }
0807
0808 static void ScoreSchedSmpEdfReqSetAffinity_Post_Y_Check(
0809 ScoreSchedSmpEdfReqSetAffinity_Context *ctx,
0810 ScoreSchedSmpEdfReqSetAffinity_Post_Y state
0811 )
0812 {
0813 const Per_CPU_Control *cpu;
0814 const Thread_Control *scheduled;
0815 const Scheduler_Node *scheduler_node;
0816
0817 cpu = _Per_CPU_Get_by_index( 1 );
0818 scheduled = cpu->heir;
0819
0820 switch ( state ) {
0821 case ScoreSchedSmpEdfReqSetAffinity_Post_Y_Task: {
0822
0823
0824
0825 T_eq_ptr( scheduled, ctx->tq_ctx.worker_tcb[ TASK ] );
0826 break;
0827 }
0828
0829 case ScoreSchedSmpEdfReqSetAffinity_Post_Y_TaskIdle: {
0830
0831
0832
0833
0834 T_true( scheduled->is_idle );
0835 scheduler_node = _Thread_Scheduler_get_home_node(
0836 ctx->tq_ctx.worker_tcb[ TASK ]
0837 );
0838 T_eq_ptr( scheduler_node->user, scheduled );
0839 break;
0840 }
0841
0842 case ScoreSchedSmpEdfReqSetAffinity_Post_Y_Alpha: {
0843
0844
0845
0846 T_eq_ptr( scheduled, ctx->tq_ctx.worker_tcb[ ALPHA ] );
0847 break;
0848 }
0849
0850 case ScoreSchedSmpEdfReqSetAffinity_Post_Y_AlphaIdle: {
0851
0852
0853
0854
0855 T_true( scheduled->is_idle );
0856 scheduler_node = _Thread_Scheduler_get_home_node(
0857 ctx->tq_ctx.worker_tcb[ ALPHA ]
0858 );
0859 T_eq_ptr( scheduler_node->user, scheduled );
0860 break;
0861 }
0862
0863 case ScoreSchedSmpEdfReqSetAffinity_Post_Y_Beta: {
0864
0865
0866
0867 T_eq_ptr( scheduled, ctx->tq_ctx.worker_tcb[ BETA ] );
0868 break;
0869 }
0870
0871 case ScoreSchedSmpEdfReqSetAffinity_Post_Y_BetaIdle: {
0872
0873
0874
0875
0876 T_true( scheduled->is_idle );
0877 scheduler_node = _Thread_Scheduler_get_home_node(
0878 ctx->tq_ctx.worker_tcb[ BETA ]
0879 );
0880 T_eq_ptr( scheduler_node->user, scheduled );
0881 break;
0882 }
0883
0884 case ScoreSchedSmpEdfReqSetAffinity_Post_Y_NA:
0885 break;
0886 }
0887 }
0888
0889 static void ScoreSchedSmpEdfReqSetAffinity_Setup(
0890 ScoreSchedSmpEdfReqSetAffinity_Context *ctx
0891 )
0892 {
0893 rtems_status_code sc;
0894 rtems_id mutex_a;
0895 rtems_id mutex_b;
0896 rtems_id mutex_c;
0897
0898 memset( ctx, 0, sizeof( *ctx ) );
0899 ctx->tq_ctx.deadlock = TQ_DEADLOCK_STATUS;
0900 ctx->tq_ctx.enqueue_prepare = TQEnqueuePrepareDefault;
0901 ctx->tq_ctx.enqueue_done = TQEnqueueDoneDefault;
0902 ctx->tq_ctx.enqueue = TQEnqueueClassicSem;
0903 ctx->tq_ctx.surrender = TQSurrenderClassicSem;
0904 ctx->tq_ctx.get_owner = TQGetOwnerClassicSem;
0905 ctx->tq_ctx.convert_status = TQConvertStatusClassic;
0906 TQInitialize( &ctx->tq_ctx );
0907
0908 DeleteMutex( ctx->tq_ctx.mutex_id[ TQ_MUTEX_A ] );
0909 DeleteMutex( ctx->tq_ctx.mutex_id[ TQ_MUTEX_B ] );
0910 DeleteMutex( ctx->tq_ctx.mutex_id[ TQ_MUTEX_C ] );
0911
0912 mutex_a = 0;
0913 sc = rtems_semaphore_create(
0914 rtems_build_name( 'M', 'T', 'X', 'A' ),
0915 1,
0916 RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
0917 RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
0918 PRIO_LOW,
0919 &mutex_a
0920 );
0921 T_rsc_success( sc );
0922
0923 mutex_b = 0;
0924 sc = rtems_semaphore_create(
0925 rtems_build_name( 'M', 'T', 'X', 'B' ),
0926 1,
0927 RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
0928 RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
0929 PRIO_VERY_LOW,
0930 &mutex_b
0931 );
0932 T_rsc_success( sc );
0933
0934 mutex_c = 0;
0935 sc = rtems_semaphore_create(
0936 rtems_build_name( 'M', 'T', 'X', 'C' ),
0937 1,
0938 RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
0939 RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
0940 PRIO_NORMAL,
0941 &mutex_c
0942 );
0943 T_rsc_success( sc );
0944
0945 ctx->tq_ctx.mutex_id[ TQ_MUTEX_A ] = mutex_a;
0946 ctx->tq_ctx.mutex_id[ TQ_MUTEX_B ] = mutex_b;
0947 ctx->tq_ctx.mutex_id[ TQ_MUTEX_C ] = mutex_c;
0948
0949 RemoveProcessor( SCHEDULER_B_ID, 1 );
0950 AddProcessor( SCHEDULER_A_ID, 1 );
0951
0952 TQSetPriority( &ctx->tq_ctx, TASK, PRIO_NORMAL );
0953 TQSetPriority( &ctx->tq_ctx, ALPHA, PRIO_LOW );
0954 TQSetPriority( &ctx->tq_ctx, BETA, PRIO_VERY_LOW );
0955 }
0956
0957 static void ScoreSchedSmpEdfReqSetAffinity_Setup_Wrap( void *arg )
0958 {
0959 ScoreSchedSmpEdfReqSetAffinity_Context *ctx;
0960
0961 ctx = arg;
0962 ctx->Map.in_action_loop = false;
0963 ScoreSchedSmpEdfReqSetAffinity_Setup( ctx );
0964 }
0965
0966 static void ScoreSchedSmpEdfReqSetAffinity_Teardown(
0967 ScoreSchedSmpEdfReqSetAffinity_Context *ctx
0968 )
0969 {
0970 SetSelfAffinityAll();
0971 TQDestroy( &ctx->tq_ctx );
0972 RemoveProcessor( SCHEDULER_A_ID, 1 );
0973 AddProcessor( SCHEDULER_B_ID, 1 );
0974 }
0975
0976 static void ScoreSchedSmpEdfReqSetAffinity_Teardown_Wrap( void *arg )
0977 {
0978 ScoreSchedSmpEdfReqSetAffinity_Context *ctx;
0979
0980 ctx = arg;
0981 ctx->Map.in_action_loop = false;
0982 ScoreSchedSmpEdfReqSetAffinity_Teardown( ctx );
0983 }
0984
0985 static void ScoreSchedSmpEdfReqSetAffinity_Action(
0986 ScoreSchedSmpEdfReqSetAffinity_Context *ctx
0987 )
0988 {
0989 rtems_event_set events;
0990
0991 SetSelfPriority( PRIO_ULTRA_HIGH );
0992 SetSelfAffinityAll();
0993
0994 if ( ctx->beta_idle ) {
0995 events = TQ_EVENT_MUTEX_B_OBTAIN;
0996 TQSendAndWaitForExecutionStop( &ctx->tq_ctx, BETA, events );
0997 } else {
0998 ctx->tq_ctx.busy_wait[ BETA ] = true;
0999 events = TQ_EVENT_BUSY_WAIT;
1000 TQSendAndSynchronizeRunner( &ctx->tq_ctx, BETA, events );
1001 }
1002
1003 if ( ctx->alpha_idle ) {
1004 events = TQ_EVENT_MUTEX_A_OBTAIN;
1005 TQSendAndWaitForExecutionStop( &ctx->tq_ctx, ALPHA, events );
1006 } else {
1007 ctx->tq_ctx.busy_wait[ ALPHA ] = true;
1008 events = TQ_EVENT_BUSY_WAIT;
1009 TQSendAndSynchronizeRunner( &ctx->tq_ctx, ALPHA, events );
1010 }
1011
1012 if ( ctx->task_pinned ) {
1013 SetSelfAffinityOne( 1 );
1014 TQSendAndSynchronizeRunner( &ctx->tq_ctx, TASK, TQ_EVENT_PIN );
1015 SetSelfAffinityAll();
1016 }
1017
1018 if ( ctx->task_ready ) {
1019 ctx->tq_ctx.busy_wait[ TASK ] = true;
1020 events = TQ_EVENT_BUSY_WAIT;
1021 } else {
1022 events = 0;
1023 }
1024
1025 if ( ctx->task_sticky ) {
1026 events |= TQ_EVENT_MUTEX_C_OBTAIN;
1027 }
1028
1029 TQSendAndSynchronizeRunner( &ctx->tq_ctx, TASK, events );
1030
1031 if ( !ctx->task_ready ) {
1032 TQWaitForExecutionStop( &ctx->tq_ctx, TASK );
1033 }
1034
1035 (void) _Thread_Dispatch_disable();
1036
1037 SetAffinity( ctx->tq_ctx.worker_id[ TASK ], &ctx->task_affinity_before );
1038 SetAffinity( ctx->tq_ctx.worker_id[ ALPHA ], &ctx->alpha_affinity );
1039 SetAffinity( ctx->tq_ctx.worker_id[ BETA ], &ctx->beta_affinity );
1040 SetSelfAffinityOne( 1 );
1041 TQSetPriority( &ctx->tq_ctx, TASK, ctx->task_priority );
1042 SetSelfPriority( PRIO_ULTRA_LOW );
1043 TQSetPriority( &ctx->tq_ctx, ALPHA, ctx->alpha_priority );
1044 TQSetPriority( &ctx->tq_ctx, BETA, ctx->beta_priority );
1045
1046 SetAffinity( ctx->tq_ctx.worker_id[ TASK ], &ctx->task_affinity_after );
1047 }
1048
1049 static void ScoreSchedSmpEdfReqSetAffinity_Cleanup(
1050 ScoreSchedSmpEdfReqSetAffinity_Context *ctx
1051 )
1052 {
1053 rtems_event_set events;
1054
1055 SetSelfPriority( PRIO_ULTRA_HIGH );
1056 _Thread_Dispatch_enable( _Per_CPU_Get() );
1057
1058 SetSelfAffinityAll();
1059
1060 ctx->tq_ctx.busy_wait[ TASK ] = false;
1061 ctx->tq_ctx.busy_wait[ ALPHA ] = false;
1062 ctx->tq_ctx.busy_wait[ BETA ] = false;
1063
1064 TQSetPriority( &ctx->tq_ctx, TASK, PRIO_NORMAL );
1065 TQSetPriority( &ctx->tq_ctx, ALPHA, PRIO_LOW );
1066 TQSetPriority( &ctx->tq_ctx, BETA, PRIO_VERY_LOW );
1067
1068 if ( ctx->task_sticky ) {
1069 events = TQ_EVENT_MUTEX_C_RELEASE;
1070 } else {
1071 events = 0;
1072 }
1073
1074 if ( ctx->task_pinned ) {
1075 events |= TQ_EVENT_UNPIN;
1076 }
1077
1078 if ( events != 0 ) {
1079 TQSendAndWaitForExecutionStop( &ctx->tq_ctx, TASK, events );
1080 } else {
1081 TQWaitForExecutionStop( &ctx->tq_ctx, TASK );
1082 }
1083
1084 SetAffinityAll( ctx->tq_ctx.worker_id[ TASK ] );
1085 SetAffinityAll( ctx->tq_ctx.worker_id[ ALPHA ] );
1086
1087 if ( ctx->alpha_idle ) {
1088 events = TQ_EVENT_MUTEX_A_RELEASE;
1089 } else {
1090 events = 0;
1091 }
1092
1093 if ( events != 0 ) {
1094 TQSendAndWaitForExecutionStop( &ctx->tq_ctx, ALPHA, events );
1095 } else {
1096 TQWaitForExecutionStop( &ctx->tq_ctx, ALPHA );
1097 }
1098
1099 SetAffinityAll( ctx->tq_ctx.worker_id[ BETA ] );
1100
1101 if ( ctx->beta_idle ) {
1102 events = TQ_EVENT_MUTEX_B_RELEASE;
1103 } else {
1104 events = 0;
1105 }
1106
1107 if ( events != 0 ) {
1108 TQSendAndWaitForExecutionStop( &ctx->tq_ctx, BETA, events );
1109 } else {
1110 TQWaitForExecutionStop( &ctx->tq_ctx, BETA );
1111 }
1112 }
1113
1114 static const ScoreSchedSmpEdfReqSetAffinity_Entry
1115 ScoreSchedSmpEdfReqSetAffinity_Entries[] = {
1116 { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1117 ScoreSchedSmpEdfReqSetAffinity_Post_X_NA,
1118 ScoreSchedSmpEdfReqSetAffinity_Post_Y_NA },
1119 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1120 ScoreSchedSmpEdfReqSetAffinity_Post_X_AlphaIdle,
1121 ScoreSchedSmpEdfReqSetAffinity_Post_Y_BetaIdle },
1122 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1123 ScoreSchedSmpEdfReqSetAffinity_Post_X_AlphaIdle,
1124 ScoreSchedSmpEdfReqSetAffinity_Post_Y_Beta },
1125 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1126 ScoreSchedSmpEdfReqSetAffinity_Post_X_Alpha,
1127 ScoreSchedSmpEdfReqSetAffinity_Post_Y_BetaIdle },
1128 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1129 ScoreSchedSmpEdfReqSetAffinity_Post_X_Alpha,
1130 ScoreSchedSmpEdfReqSetAffinity_Post_Y_Beta },
1131 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1132 ScoreSchedSmpEdfReqSetAffinity_Post_X_Task,
1133 ScoreSchedSmpEdfReqSetAffinity_Post_Y_BetaIdle },
1134 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1135 ScoreSchedSmpEdfReqSetAffinity_Post_X_Task,
1136 ScoreSchedSmpEdfReqSetAffinity_Post_Y_Beta },
1137 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1138 ScoreSchedSmpEdfReqSetAffinity_Post_X_Task,
1139 ScoreSchedSmpEdfReqSetAffinity_Post_Y_AlphaIdle },
1140 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1141 ScoreSchedSmpEdfReqSetAffinity_Post_X_Task,
1142 ScoreSchedSmpEdfReqSetAffinity_Post_Y_Alpha },
1143 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1144 ScoreSchedSmpEdfReqSetAffinity_Post_X_AlphaIdle,
1145 ScoreSchedSmpEdfReqSetAffinity_Post_Y_Task },
1146 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1147 ScoreSchedSmpEdfReqSetAffinity_Post_X_Alpha,
1148 ScoreSchedSmpEdfReqSetAffinity_Post_Y_Task },
1149 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1150 ScoreSchedSmpEdfReqSetAffinity_Post_X_BetaIdle,
1151 ScoreSchedSmpEdfReqSetAffinity_Post_Y_AlphaIdle },
1152 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1153 ScoreSchedSmpEdfReqSetAffinity_Post_X_Beta,
1154 ScoreSchedSmpEdfReqSetAffinity_Post_Y_AlphaIdle },
1155 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1156 ScoreSchedSmpEdfReqSetAffinity_Post_X_BetaIdle,
1157 ScoreSchedSmpEdfReqSetAffinity_Post_Y_Alpha },
1158 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1159 ScoreSchedSmpEdfReqSetAffinity_Post_X_Beta,
1160 ScoreSchedSmpEdfReqSetAffinity_Post_Y_Alpha },
1161 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1162 ScoreSchedSmpEdfReqSetAffinity_Post_X_AlphaIdle,
1163 ScoreSchedSmpEdfReqSetAffinity_Post_Y_TaskIdle },
1164 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1165 ScoreSchedSmpEdfReqSetAffinity_Post_X_Alpha,
1166 ScoreSchedSmpEdfReqSetAffinity_Post_Y_TaskIdle },
1167 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1168 ScoreSchedSmpEdfReqSetAffinity_Post_X_TaskIdle,
1169 ScoreSchedSmpEdfReqSetAffinity_Post_Y_BetaIdle },
1170 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1171 ScoreSchedSmpEdfReqSetAffinity_Post_X_TaskIdle,
1172 ScoreSchedSmpEdfReqSetAffinity_Post_Y_Beta },
1173 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1174 ScoreSchedSmpEdfReqSetAffinity_Post_X_TaskIdle,
1175 ScoreSchedSmpEdfReqSetAffinity_Post_Y_AlphaIdle },
1176 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1177 ScoreSchedSmpEdfReqSetAffinity_Post_X_TaskIdle,
1178 ScoreSchedSmpEdfReqSetAffinity_Post_Y_Alpha },
1179 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1180 ScoreSchedSmpEdfReqSetAffinity_Post_X_BetaIdle,
1181 ScoreSchedSmpEdfReqSetAffinity_Post_Y_Task },
1182 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1183 ScoreSchedSmpEdfReqSetAffinity_Post_X_Beta,
1184 ScoreSchedSmpEdfReqSetAffinity_Post_Y_Task },
1185 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1186 ScoreSchedSmpEdfReqSetAffinity_Post_X_BetaIdle,
1187 ScoreSchedSmpEdfReqSetAffinity_Post_Y_TaskIdle },
1188 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1189 ScoreSchedSmpEdfReqSetAffinity_Post_X_Beta,
1190 ScoreSchedSmpEdfReqSetAffinity_Post_Y_TaskIdle }
1191 };
1192
1193 static const uint8_t
1194 ScoreSchedSmpEdfReqSetAffinity_Map[] = {
1195 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1196 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1197 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 7, 7, 9, 9, 13, 14, 3, 4,
1198 8, 8, 10, 10, 1, 2, 1, 2, 9, 9, 9, 9, 3, 4, 3, 4, 10, 10, 10, 10, 5, 6, 5, 6,
1199 7, 7, 9, 9, 5, 6, 5, 6, 8, 8, 10, 10, 5, 6, 5, 6, 9, 9, 9, 9, 5, 6, 5, 6, 10,
1200 10, 10, 10, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6,
1201 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8,
1202 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 7, 7, 9, 9, 13,
1203 14, 3, 4, 8, 8, 10, 10, 1, 2, 1, 2, 9, 9, 9, 9, 3, 4, 3, 4, 10, 10, 10, 10,
1204 5, 6, 5, 6, 7, 7, 9, 9, 5, 6, 5, 6, 8, 8, 10, 10, 5, 6, 5, 6, 9, 9, 9, 9, 5,
1205 6, 5, 6, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1206 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1207 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2,
1208 19, 19, 15, 15, 13, 14, 3, 4, 20, 20, 16, 16, 1, 2, 1, 2, 15, 15, 15, 15, 3,
1209 4, 3, 4, 16, 16, 16, 16, 17, 18, 17, 18, 19, 19, 15, 15, 17, 18, 17, 18, 20,
1210 20, 16, 16, 17, 18, 17, 18, 15, 15, 15, 15, 17, 18, 17, 18, 16, 16, 16, 16,
1211 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4,
1212 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2,
1213 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1214 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2,
1215 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0,
1216 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1217 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1218 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13,
1219 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12,
1220 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3,
1221 4, 11, 12, 1, 2, 7, 7, 7, 7, 13, 14, 3, 4, 8, 8, 8, 8, 1, 2, 1, 2, 1, 2, 1,
1222 2, 3, 4, 3, 4, 3, 4, 3, 4, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8, 5,
1223 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 11, 12, 1, 2, 13,
1224 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2,
1225 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4,
1226 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1227 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1228 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11, 12,
1229 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1230 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2,
1231 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4,
1232 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4,
1233 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2,
1234 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1235 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2,
1236 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1237 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1238 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 7,
1239 7, 7, 7, 13, 14, 3, 4, 8, 8, 8, 8, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1240 3, 4, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6,
1241 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 6,
1242 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6,
1243 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 7,
1244 7, 7, 7, 13, 14, 3, 4, 8, 8, 8, 8, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1245 3, 4, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6,
1246 5, 6, 5, 6, 5, 6, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1247 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1248 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 19,
1249 19, 19, 19, 13, 14, 3, 4, 20, 20, 20, 20, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4,
1250 3, 4, 3, 4, 17, 18, 17, 18, 19, 19, 19, 19, 17, 18, 17, 18, 20, 20, 20, 20,
1251 17, 18, 17, 18, 17, 18, 17, 18, 17, 18, 17, 18, 17, 18, 17, 18, 1, 2, 1, 2,
1252 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1253 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2,
1254 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2,
1255 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4,
1256 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0,
1257 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1258 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1259 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1,
1260 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4,
1261 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 11, 12,
1262 1, 2, 7, 7, 7, 7, 13, 14, 3, 4, 8, 8, 8, 8, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3,
1263 4, 3, 4, 3, 4, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5,
1264 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4,
1265 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11,
1266 12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1267 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1268 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1269 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14,
1270 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1,
1271 2, 11, 12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3,
1272 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1,
1273 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3,
1274 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3,
1275 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1,
1276 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3,
1277 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1278 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1279 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 9, 9, 9, 9, 13,
1280 14, 3, 4, 10, 10, 10, 10, 1, 2, 1, 2, 9, 9, 9, 9, 3, 4, 3, 4, 10, 10, 10, 10,
1281 21, 22, 1, 2, 9, 9, 9, 9, 21, 22, 3, 4, 10, 10, 10, 10, 21, 22, 1, 2, 9, 9,
1282 9, 9, 21, 22, 3, 4, 10, 10, 10, 10, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8,
1283 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7,
1284 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 11,
1285 12, 1, 2, 9, 9, 9, 9, 13, 14, 3, 4, 10, 10, 10, 10, 1, 2, 1, 2, 9, 9, 9, 9,
1286 3, 4, 3, 4, 10, 10, 10, 10, 21, 22, 1, 2, 9, 9, 9, 9, 21, 22, 3, 4, 10, 10,
1287 10, 10, 21, 22, 1, 2, 9, 9, 9, 9, 21, 22, 3, 4, 10, 10, 10, 10, 0, 0, 0, 0,
1288 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1289 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1290 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 15, 15, 15, 15, 13, 14, 3, 4, 16, 16,
1291 16, 16, 1, 2, 1, 2, 15, 15, 15, 15, 3, 4, 3, 4, 16, 16, 16, 16, 23, 24, 1, 2,
1292 15, 15, 15, 15, 23, 24, 3, 4, 16, 16, 16, 16, 23, 24, 1, 2, 15, 15, 15, 15,
1293 23, 24, 3, 4, 16, 16, 16, 16, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4,
1294 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4,
1295 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2,
1296 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1297 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2,
1298 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1299 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1300 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11,
1301 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3,
1302 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1,
1303 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 11, 12, 1, 2, 7, 7, 7, 7, 13, 14, 3, 4, 8,
1304 8, 8, 8, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 5, 6, 5, 6, 7, 7, 7,
1305 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6,
1306 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1,
1307 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13, 14, 3,
1308 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1309 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1310 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1311 0, 0, 0, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2,
1312 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13,
1313 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2,
1314 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4,
1315 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4,
1316 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2,
1317 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1318 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0,
1319 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1320 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1321 0, 0, 0, 0, 11, 12, 1, 2, 7, 7, 9, 9, 13, 14, 3, 4, 8, 8, 10, 10, 1, 2, 1, 2,
1322 9, 9, 9, 9, 3, 4, 3, 4, 10, 10, 10, 10, 5, 6, 5, 6, 7, 7, 9, 9, 5, 6, 5, 6,
1323 8, 8, 10, 10, 5, 6, 5, 6, 9, 9, 9, 9, 5, 6, 5, 6, 10, 10, 10, 10, 7, 7, 7, 7,
1324 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6,
1325 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6,
1326 5, 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 7, 7, 9, 9, 13, 14, 3, 4, 8, 8, 10, 10,
1327 1, 2, 1, 2, 9, 9, 9, 9, 3, 4, 3, 4, 10, 10, 10, 10, 5, 6, 5, 6, 7, 7, 9, 9,
1328 5, 6, 5, 6, 8, 8, 10, 10, 5, 6, 5, 6, 9, 9, 9, 9, 5, 6, 5, 6, 10, 10, 10, 10,
1329 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1330 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1331 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 19, 19, 15, 15, 13, 14, 3,
1332 4, 20, 20, 16, 16, 1, 2, 1, 2, 15, 15, 15, 15, 3, 4, 3, 4, 16, 16, 16, 16,
1333 17, 18, 17, 18, 19, 19, 15, 15, 17, 18, 17, 18, 20, 20, 16, 16, 17, 18, 17,
1334 18, 15, 15, 15, 15, 17, 18, 17, 18, 16, 16, 16, 16, 1, 2, 1, 2, 1, 2, 1, 2,
1335 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2,
1336 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4,
1337 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2,
1338 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4,
1339 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1340 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1341 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1342 0, 0, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1,
1343 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13,
1344 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 11, 12, 1, 2, 7, 7,
1345 7, 7, 13, 14, 3, 4, 8, 8, 8, 8, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3,
1346 4, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5,
1347 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4,
1348 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3,
1349 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0,
1350 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1351 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1352 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13,
1353 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12,
1354 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3,
1355 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3,
1356 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1,
1357 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3,
1358 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1,
1359 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0,
1360 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1361 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1362 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 7, 7, 7, 7, 13, 14, 3, 4, 8,
1363 8, 8, 8, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 5, 6, 5, 6, 7, 7, 7,
1364 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 7,
1365 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
1366 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5,
1367 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 7, 7, 7, 7, 13, 14, 3, 4, 8,
1368 8, 8, 8, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 5, 6, 5, 6, 7, 7, 7,
1369 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 0,
1370 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1371 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1372 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 19, 19, 19, 19, 13, 14, 3, 4,
1373 20, 20, 20, 20, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 17, 18, 17,
1374 18, 19, 19, 19, 19, 17, 18, 17, 18, 20, 20, 20, 20, 17, 18, 17, 18, 17, 18,
1375 17, 18, 17, 18, 17, 18, 17, 18, 17, 18, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4,
1376 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2,
1377 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4,
1378 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4,
1379 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2,
1380 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1381 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1382 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,
1383 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2,
1384 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4,
1385 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 11, 12, 1, 2, 7, 7, 7, 7, 13,
1386 14, 3, 4, 8, 8, 8, 8, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 5, 6,
1387 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6,
1388 5, 6, 5, 6, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1,
1389 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4,
1390 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0,
1391 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1392 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1393 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4,
1394 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3,
1395 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2,
1396 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4,
1397 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2,
1398 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4,
1399 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4,
1400 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0,
1401 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1402 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1403 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 9, 9, 9, 9, 13, 14, 3, 4, 10, 10, 10,
1404 10, 1, 2, 1, 2, 9, 9, 9, 9, 3, 4, 3, 4, 10, 10, 10, 10, 21, 22, 1, 2, 9, 9,
1405 9, 9, 21, 22, 3, 4, 10, 10, 10, 10, 21, 22, 1, 2, 9, 9, 9, 9, 21, 22, 3, 4,
1406 10, 10, 10, 10, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 6, 5, 6,
1407 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8,
1408 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 9, 9, 9,
1409 9, 13, 14, 3, 4, 10, 10, 10, 10, 1, 2, 1, 2, 9, 9, 9, 9, 3, 4, 3, 4, 10, 10,
1410 10, 10, 21, 22, 1, 2, 9, 9, 9, 9, 21, 22, 3, 4, 10, 10, 10, 10, 21, 22, 1, 2,
1411 9, 9, 9, 9, 21, 22, 3, 4, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1412 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1413 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1414 11, 12, 1, 2, 15, 15, 15, 15, 13, 14, 3, 4, 16, 16, 16, 16, 1, 2, 1, 2, 15,
1415 15, 15, 15, 3, 4, 3, 4, 16, 16, 16, 16, 23, 24, 1, 2, 15, 15, 15, 15, 23, 24,
1416 3, 4, 16, 16, 16, 16, 23, 24, 1, 2, 15, 15, 15, 15, 23, 24, 3, 4, 16, 16, 16,
1417 16, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2,
1418 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2,
1419 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4,
1420 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2,
1421 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4,
1422 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1423 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1424 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4,
1425 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11,
1426 12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1427 3, 4, 11, 12, 1, 2, 7, 7, 7, 7, 13, 14, 3, 4, 8, 8, 8, 8, 1, 2, 1, 2, 1, 2,
1428 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8,
1429 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 11, 12, 1, 2,
1430 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4,
1431 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2,
1432 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1433 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1434 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11,
1435 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3,
1436 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1,
1437 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3,
1438 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3,
1439 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1,
1440 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3,
1441 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1,
1442 2, 3, 4, 3, 4, 3, 4, 3, 4
1443 };
1444
1445 static size_t ScoreSchedSmpEdfReqSetAffinity_Scope(
1446 void *arg,
1447 char *buf,
1448 size_t n
1449 )
1450 {
1451 ScoreSchedSmpEdfReqSetAffinity_Context *ctx;
1452
1453 ctx = arg;
1454
1455 if ( ctx->Map.in_action_loop ) {
1456 return T_get_scope(
1457 ScoreSchedSmpEdfReqSetAffinity_PreDesc,
1458 buf,
1459 n,
1460 ctx->Map.pcs
1461 );
1462 }
1463
1464 return 0;
1465 }
1466
1467 static T_fixture ScoreSchedSmpEdfReqSetAffinity_Fixture = {
1468 .setup = ScoreSchedSmpEdfReqSetAffinity_Setup_Wrap,
1469 .stop = NULL,
1470 .teardown = ScoreSchedSmpEdfReqSetAffinity_Teardown_Wrap,
1471 .scope = ScoreSchedSmpEdfReqSetAffinity_Scope,
1472 .initial_context = &ScoreSchedSmpEdfReqSetAffinity_Instance
1473 };
1474
1475 static inline ScoreSchedSmpEdfReqSetAffinity_Entry
1476 ScoreSchedSmpEdfReqSetAffinity_PopEntry(
1477 ScoreSchedSmpEdfReqSetAffinity_Context *ctx
1478 )
1479 {
1480 size_t index;
1481
1482 index = ctx->Map.index;
1483 ctx->Map.index = index + 1;
1484 return ScoreSchedSmpEdfReqSetAffinity_Entries[
1485 ScoreSchedSmpEdfReqSetAffinity_Map[ index ]
1486 ];
1487 }
1488
1489 static void ScoreSchedSmpEdfReqSetAffinity_TestVariant(
1490 ScoreSchedSmpEdfReqSetAffinity_Context *ctx
1491 )
1492 {
1493 ScoreSchedSmpEdfReqSetAffinity_Pre_Before_Prepare( ctx, ctx->Map.pcs[ 0 ] );
1494 ScoreSchedSmpEdfReqSetAffinity_Pre_After_Prepare( ctx, ctx->Map.pcs[ 1 ] );
1495 ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_Prepare(
1496 ctx,
1497 ctx->Map.pcs[ 2 ]
1498 );
1499 ScoreSchedSmpEdfReqSetAffinity_Pre_State_Prepare( ctx, ctx->Map.pcs[ 3 ] );
1500 ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_Prepare( ctx, ctx->Map.pcs[ 4 ] );
1501 ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_Prepare( ctx, ctx->Map.pcs[ 5 ] );
1502 ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_Prepare(
1503 ctx,
1504 ctx->Map.pcs[ 6 ]
1505 );
1506 ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_Prepare(
1507 ctx,
1508 ctx->Map.pcs[ 7 ]
1509 );
1510 ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_Prepare(
1511 ctx,
1512 ctx->Map.pcs[ 8 ]
1513 );
1514 ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_Prepare(
1515 ctx,
1516 ctx->Map.pcs[ 9 ]
1517 );
1518 ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_Prepare(
1519 ctx,
1520 ctx->Map.pcs[ 10 ]
1521 );
1522 ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_Prepare(
1523 ctx,
1524 ctx->Map.pcs[ 11 ]
1525 );
1526 ScoreSchedSmpEdfReqSetAffinity_Action( ctx );
1527 ScoreSchedSmpEdfReqSetAffinity_Post_X_Check( ctx, ctx->Map.entry.Post_X );
1528 ScoreSchedSmpEdfReqSetAffinity_Post_Y_Check( ctx, ctx->Map.entry.Post_Y );
1529 }
1530
1531
1532
1533
1534 T_TEST_CASE_FIXTURE(
1535 ScoreSchedSmpEdfReqSetAffinity,
1536 &ScoreSchedSmpEdfReqSetAffinity_Fixture
1537 )
1538 {
1539 ScoreSchedSmpEdfReqSetAffinity_Context *ctx;
1540
1541 ctx = T_fixture_context();
1542 ctx->Map.in_action_loop = true;
1543 ctx->Map.index = 0;
1544
1545 for (
1546 ctx->Map.pcs[ 0 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_Before_All;
1547 ctx->Map.pcs[ 0 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_Before_NA;
1548 ++ctx->Map.pcs[ 0 ]
1549 ) {
1550 for (
1551 ctx->Map.pcs[ 1 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_After_All;
1552 ctx->Map.pcs[ 1 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_After_NA;
1553 ++ctx->Map.pcs[ 1 ]
1554 ) {
1555 for (
1556 ctx->Map.pcs[ 2 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_High;
1557 ctx->Map.pcs[ 2 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_NA;
1558 ++ctx->Map.pcs[ 2 ]
1559 ) {
1560 for (
1561 ctx->Map.pcs[ 3 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_State_Ready;
1562 ctx->Map.pcs[ 3 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_State_NA;
1563 ++ctx->Map.pcs[ 3 ]
1564 ) {
1565 for (
1566 ctx->Map.pcs[ 4 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_Yes;
1567 ctx->Map.pcs[ 4 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_NA;
1568 ++ctx->Map.pcs[ 4 ]
1569 ) {
1570 for (
1571 ctx->Map.pcs[ 5 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_Yes;
1572 ctx->Map.pcs[ 5 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_NA;
1573 ++ctx->Map.pcs[ 5 ]
1574 ) {
1575 for (
1576 ctx->Map.pcs[ 6 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_High;
1577 ctx->Map.pcs[ 6 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_NA;
1578 ++ctx->Map.pcs[ 6 ]
1579 ) {
1580 for (
1581 ctx->Map.pcs[ 7 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_All;
1582 ctx->Map.pcs[ 7 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_NA;
1583 ++ctx->Map.pcs[ 7 ]
1584 ) {
1585 for (
1586 ctx->Map.pcs[ 8 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_Yes;
1587 ctx->Map.pcs[ 8 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_NA;
1588 ++ctx->Map.pcs[ 8 ]
1589 ) {
1590 for (
1591 ctx->Map.pcs[ 9 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_High;
1592 ctx->Map.pcs[ 9 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_NA;
1593 ++ctx->Map.pcs[ 9 ]
1594 ) {
1595 for (
1596 ctx->Map.pcs[ 10 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_All;
1597 ctx->Map.pcs[ 10 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_NA;
1598 ++ctx->Map.pcs[ 10 ]
1599 ) {
1600 for (
1601 ctx->Map.pcs[ 11 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_Yes;
1602 ctx->Map.pcs[ 11 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_NA;
1603 ++ctx->Map.pcs[ 11 ]
1604 ) {
1605 ctx->Map.entry =
1606 ScoreSchedSmpEdfReqSetAffinity_PopEntry( ctx );
1607
1608 if ( ctx->Map.entry.Skip ) {
1609 continue;
1610 }
1611
1612 ScoreSchedSmpEdfReqSetAffinity_TestVariant( ctx );
1613 ScoreSchedSmpEdfReqSetAffinity_Cleanup( ctx );
1614 }
1615 }
1616 }
1617 }
1618 }
1619 }
1620 }
1621 }
1622 }
1623 }
1624 }
1625 }
1626 }
1627
1628