File indexing completed on 2025-05-11 08:24:53
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 "tr-tq-enqueue-priority-inherit.h"
0056
0057 #include <rtems/test.h>
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068 typedef struct {
0069 uint32_t Skip : 1;
0070 uint32_t Pre_Scheduler_NA : 1;
0071 uint32_t Pre_QueueEligible_NA : 1;
0072 uint32_t Pre_QueueIneligible_NA : 1;
0073 uint32_t Pre_PriorityForOwner_NA : 1;
0074 uint32_t Pre_SchedulerForOwner_NA : 1;
0075 uint32_t Pre_OwnerState_NA : 1;
0076 uint32_t Post_Position : 4;
0077 uint32_t Post_OwnerPriority : 2;
0078 uint32_t Post_OwnerScheduler : 2;
0079 uint32_t Post_OwnerOwnerPriority : 2;
0080 uint32_t Post_OwnerOwnerScheduler : 2;
0081 } ScoreTqReqEnqueuePriorityInherit_Entry;
0082
0083
0084
0085
0086
0087 typedef struct {
0088
0089
0090
0091
0092
0093 rtems_task_priority queue_priority;
0094
0095
0096
0097
0098
0099
0100
0101 size_t other_before;
0102
0103
0104
0105
0106
0107
0108
0109 size_t other_after;
0110
0111
0112
0113
0114
0115 bool vital_priority;
0116
0117
0118
0119
0120
0121
0122 bool vital_scheduler;
0123
0124
0125
0126
0127
0128 rtems_task_priority owner_priority[ 4 ];
0129
0130
0131
0132
0133
0134 rtems_task_priority owner_owner_priority[ 4 ];
0135
0136
0137
0138
0139
0140 rtems_event_set owner_obtain;
0141
0142
0143
0144
0145
0146 rtems_event_set owner_release;
0147
0148
0149
0150
0151
0152 TQContext *tq_ctx;
0153
0154 struct {
0155
0156
0157
0158 size_t pcs[ 6 ];
0159
0160
0161
0162
0163 bool in_action_loop;
0164
0165
0166
0167
0168 size_t index;
0169
0170
0171
0172
0173 ScoreTqReqEnqueuePriorityInherit_Entry entry;
0174
0175
0176
0177
0178
0179 bool skip;
0180 } Map;
0181 } ScoreTqReqEnqueuePriorityInherit_Context;
0182
0183 static ScoreTqReqEnqueuePriorityInherit_Context
0184 ScoreTqReqEnqueuePriorityInherit_Instance;
0185
0186 static const char * const ScoreTqReqEnqueuePriorityInherit_PreDesc_Scheduler[] = {
0187 "One",
0188 "Two",
0189 "Three",
0190 "More",
0191 "NA"
0192 };
0193
0194 static const char * const ScoreTqReqEnqueuePriorityInherit_PreDesc_QueueEligible[] = {
0195 "None",
0196 "High",
0197 "Equal",
0198 "Low",
0199 "NA"
0200 };
0201
0202 static const char * const ScoreTqReqEnqueuePriorityInherit_PreDesc_QueueIneligible[] = {
0203 "None",
0204 "Only",
0205 "Before",
0206 "After",
0207 "NA"
0208 };
0209
0210 static const char * const ScoreTqReqEnqueuePriorityInherit_PreDesc_PriorityForOwner[] = {
0211 "Vital",
0212 "Dispensable",
0213 "NA"
0214 };
0215
0216 static const char * const ScoreTqReqEnqueuePriorityInherit_PreDesc_SchedulerForOwner[] = {
0217 "Vital",
0218 "Dispensable",
0219 "NA"
0220 };
0221
0222 static const char * const ScoreTqReqEnqueuePriorityInherit_PreDesc_OwnerState[] = {
0223 "NotEnqueued",
0224 "FIFO",
0225 "Priority",
0226 "PriorityInherit",
0227 "NA"
0228 };
0229
0230 static const char * const * const ScoreTqReqEnqueuePriorityInherit_PreDesc[] = {
0231 ScoreTqReqEnqueuePriorityInherit_PreDesc_Scheduler,
0232 ScoreTqReqEnqueuePriorityInherit_PreDesc_QueueEligible,
0233 ScoreTqReqEnqueuePriorityInherit_PreDesc_QueueIneligible,
0234 ScoreTqReqEnqueuePriorityInherit_PreDesc_PriorityForOwner,
0235 ScoreTqReqEnqueuePriorityInherit_PreDesc_SchedulerForOwner,
0236 ScoreTqReqEnqueuePriorityInherit_PreDesc_OwnerState,
0237 NULL
0238 };
0239
0240 typedef ScoreTqReqEnqueuePriorityInherit_Context Context;
0241
0242 static const rtems_tcb *GetUnblock( Context *ctx, size_t *index )
0243 {
0244 const rtems_tcb *thread;
0245
0246 do {
0247 thread = TQGetNextUnblock( ctx->tq_ctx, index )->thread;
0248 } while ( thread == ctx->tq_ctx->runner_tcb );
0249
0250 return thread;
0251 }
0252
0253 static const rtems_tcb *GetTCB( Context *ctx, TQWorkerKind worker )
0254 {
0255 return ctx->tq_ctx->worker_tcb[ worker ];
0256 }
0257
0258 static void CheckPriorityRaise(
0259 const Context *ctx,
0260 const rtems_task_priority *priority
0261 )
0262 {
0263 if ( ctx->queue_priority == PRIO_ULTRA_HIGH ) {
0264 T_eq_u32( priority[ 0 ], PRIO_ULTRA_HIGH );
0265 } else {
0266 T_eq_u32( priority[ 0 ], PRIO_VERY_HIGH );
0267 }
0268
0269 if (
0270 ctx->queue_priority == PRIO_VERY_HIGH ||
0271 ctx->queue_priority == PRIO_ULTRA_HIGH
0272 ) {
0273 if ( ctx->other_before || ctx->other_after ) {
0274 T_eq_u32( priority[ 1 ], PRIO_ULTRA_LOW );
0275 T_eq_u32( priority[ 2 ], PRIO_NORMAL );
0276 } else {
0277 T_eq_u32( priority[ 1 ], PRIO_NORMAL );
0278 }
0279 }
0280 }
0281
0282 static void CheckPriorityNop(
0283 const Context *ctx,
0284 const rtems_task_priority *priority
0285 )
0286 {
0287 if ( ctx->queue_priority == PRIO_ULTRA_HIGH ) {
0288 T_eq_u32( priority[ 0 ], PRIO_ULTRA_HIGH );
0289 } else {
0290 T_eq_u32( priority[ 0 ], PRIO_VERY_HIGH );
0291 }
0292 }
0293
0294 static void CheckSchedulerNewHelper(
0295 const Context *ctx,
0296 const rtems_task_priority *priority
0297 )
0298 {
0299 if (
0300 ctx->vital_priority &&
0301 ( ctx->queue_priority == PRIO_VERY_HIGH ||
0302 ctx->queue_priority == PRIO_ULTRA_HIGH )
0303 ) {
0304 if ( ctx->other_before || ctx->other_after ) {
0305 T_eq_u32( priority[ 3 ], PRIO_VERY_LOW );
0306 } else {
0307 T_eq_u32( priority[ 2 ], PRIO_VERY_LOW );
0308 T_eq_u32( priority[ 3 ], PRIO_INVALID );
0309 }
0310 } else {
0311 if ( ctx->other_before || ctx->other_after ) {
0312 T_eq_u32( priority[ 1 ], PRIO_ULTRA_LOW );
0313 T_eq_u32( priority[ 2 ], PRIO_VERY_LOW );
0314 } else {
0315 T_eq_u32( priority[ 1 ], PRIO_VERY_LOW );
0316 T_eq_u32( priority[ 2 ], PRIO_INVALID );
0317 }
0318
0319 T_eq_u32( priority[ 3 ], PRIO_INVALID );
0320 }
0321 }
0322
0323 static void CheckSchedulerNop(
0324 const Context *ctx,
0325 const rtems_task_priority *priority
0326 )
0327 {
0328 if (
0329 ctx->vital_priority &&
0330 ( ctx->queue_priority == PRIO_VERY_HIGH ||
0331 ctx->queue_priority == PRIO_ULTRA_HIGH )
0332 ) {
0333 if ( !ctx->other_before && !ctx->other_after ) {
0334 T_eq_u32( priority[ 2 ], PRIO_INVALID );
0335 }
0336
0337 T_eq_u32( priority[ 3 ], PRIO_INVALID );
0338 } else {
0339 if ( ctx->other_before || ctx->other_after ) {
0340 T_eq_u32( priority[ 1 ], PRIO_ULTRA_LOW );
0341 } else {
0342 T_eq_u32( priority[ 1 ], PRIO_INVALID );
0343 }
0344
0345 T_eq_u32( priority[ 2 ], PRIO_INVALID );
0346 T_eq_u32( priority[ 3 ], PRIO_INVALID );
0347 }
0348 }
0349
0350 static void GetPriorities(
0351 const Context *ctx,
0352 TQWorkerKind worker,
0353 rtems_task_priority *priority
0354 )
0355 {
0356 priority[ 0 ] = GetPriorityByScheduler(
0357 ctx->tq_ctx->worker_id[ worker ],
0358 SCHEDULER_A_ID
0359 );
0360 priority[ 1 ] = GetPriorityByScheduler(
0361 ctx->tq_ctx->worker_id[ worker ],
0362 SCHEDULER_B_ID
0363 );
0364 priority[ 2 ] = GetPriorityByScheduler(
0365 ctx->tq_ctx->worker_id[ worker ],
0366 SCHEDULER_C_ID
0367 );
0368 priority[ 3 ] = GetPriorityByScheduler(
0369 ctx->tq_ctx->worker_id[ worker ],
0370 SCHEDULER_D_ID
0371 );
0372 }
0373
0374 static void AddVitalPriority( Context *ctx, rtems_id scheduler_id )
0375 {
0376 TQSetScheduler( ctx->tq_ctx, TQ_BLOCKER_D, scheduler_id, PRIO_NORMAL );
0377 TQSendAndWaitForExecutionStop(
0378 ctx->tq_ctx,
0379 TQ_BLOCKER_D,
0380 TQ_EVENT_MUTEX_A_OBTAIN | TQ_EVENT_MUTEX_A_RELEASE
0381 );
0382 }
0383
0384 static void AddVitalPriorityHelper( Context *ctx, rtems_id scheduler_id )
0385 {
0386 TQSetScheduler( ctx->tq_ctx, TQ_HELPER_B, scheduler_id, PRIO_LOW );
0387 TQSendAndWaitForExecutionStop(
0388 ctx->tq_ctx,
0389 TQ_HELPER_B,
0390 TQ_EVENT_MUTEX_B_OBTAIN | TQ_EVENT_MUTEX_B_RELEASE
0391 );
0392 }
0393
0394 static void AddVitalScheduler( Context *ctx, rtems_id scheduler_id )
0395 {
0396 TQSetScheduler( ctx->tq_ctx, TQ_BLOCKER_E, scheduler_id, PRIO_VERY_LOW );
0397 TQSendAndWaitForExecutionStop(
0398 ctx->tq_ctx,
0399 TQ_BLOCKER_E,
0400 TQ_EVENT_MUTEX_A_OBTAIN | TQ_EVENT_MUTEX_A_RELEASE
0401 );
0402 }
0403
0404 static void ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_Prepare(
0405 ScoreTqReqEnqueuePriorityInherit_Context *ctx,
0406 ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler state
0407 )
0408 {
0409 switch ( state ) {
0410 case ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_One: {
0411
0412
0413
0414 if ( rtems_scheduler_get_processor_maximum() != 1 ) {
0415 ctx->Map.skip = true;
0416 }
0417 break;
0418 }
0419
0420 case ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_Two: {
0421
0422
0423
0424 if ( rtems_scheduler_get_processor_maximum() != 2 ) {
0425 ctx->Map.skip = true;
0426 }
0427 break;
0428 }
0429
0430 case ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_Three: {
0431
0432
0433
0434 if ( rtems_scheduler_get_processor_maximum() != 3 ) {
0435 ctx->Map.skip = true;
0436 }
0437 break;
0438 }
0439
0440 case ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_More: {
0441
0442
0443
0444 if ( rtems_scheduler_get_processor_maximum() < 4 ) {
0445 ctx->Map.skip = true;
0446 }
0447 break;
0448 }
0449
0450 case ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_NA:
0451 break;
0452 }
0453 }
0454
0455 static void ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_Prepare(
0456 ScoreTqReqEnqueuePriorityInherit_Context *ctx,
0457 ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible state
0458 )
0459 {
0460 switch ( state ) {
0461 case ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_None: {
0462
0463
0464
0465
0466 ctx->queue_priority = PRIO_INVALID;
0467 break;
0468 }
0469
0470 case ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_High: {
0471
0472
0473
0474
0475
0476
0477 ++ctx->tq_ctx->how_many;
0478 ctx->queue_priority = PRIO_ULTRA_HIGH;
0479 break;
0480 }
0481
0482 case ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_Equal: {
0483
0484
0485
0486
0487
0488
0489 ++ctx->tq_ctx->how_many;
0490 ctx->queue_priority = PRIO_VERY_HIGH;
0491 break;
0492 }
0493
0494 case ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_Low: {
0495
0496
0497
0498
0499
0500
0501 ++ctx->tq_ctx->how_many;
0502 ctx->queue_priority = PRIO_HIGH;
0503 break;
0504 }
0505
0506 case ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_NA:
0507 break;
0508 }
0509 }
0510
0511 static void ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_Prepare(
0512 ScoreTqReqEnqueuePriorityInherit_Context *ctx,
0513 ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible state
0514 )
0515 {
0516 switch ( state ) {
0517 case ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_None: {
0518
0519
0520
0521
0522 ctx->other_before = false;
0523 ctx->other_after = false;
0524 break;
0525 }
0526
0527 case ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_Only: {
0528
0529
0530
0531
0532 ++ctx->tq_ctx->how_many;
0533 ctx->other_before = true;
0534 ctx->other_after = false;
0535 break;
0536 }
0537
0538 case ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_Before: {
0539
0540
0541
0542
0543
0544
0545 ++ctx->tq_ctx->how_many;
0546 ctx->other_before = true;
0547 ctx->other_after = false;
0548 break;
0549 }
0550
0551 case ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_After: {
0552
0553
0554
0555
0556
0557
0558 ++ctx->tq_ctx->how_many;
0559 ctx->other_before = false;
0560 ctx->other_after = true;
0561 break;
0562 }
0563
0564 case ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_NA:
0565 break;
0566 }
0567 }
0568
0569 static void ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_Prepare(
0570 ScoreTqReqEnqueuePriorityInherit_Context *ctx,
0571 ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner state
0572 )
0573 {
0574 switch ( state ) {
0575 case ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_Vital: {
0576
0577
0578
0579
0580 ctx->vital_priority = true;
0581 break;
0582 }
0583
0584 case ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_Dispensable: {
0585
0586
0587
0588
0589 ctx->vital_priority = false;
0590 break;
0591 }
0592
0593 case ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_NA:
0594 break;
0595 }
0596 }
0597
0598 static void ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_Prepare(
0599 ScoreTqReqEnqueuePriorityInherit_Context *ctx,
0600 ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner state
0601 )
0602 {
0603 switch ( state ) {
0604 case ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_Vital: {
0605
0606
0607
0608
0609 ctx->vital_scheduler = true;
0610 break;
0611 }
0612
0613 case ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_Dispensable: {
0614
0615
0616
0617
0618 ctx->vital_scheduler = false;
0619 break;
0620 }
0621
0622 case ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_NA:
0623 break;
0624 }
0625 }
0626
0627 static void ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_Prepare(
0628 ScoreTqReqEnqueuePriorityInherit_Context *ctx,
0629 ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState state
0630 )
0631 {
0632 switch ( state ) {
0633 case ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_NotEnqueued: {
0634
0635
0636
0637 ctx->owner_obtain = 0;
0638 ctx->owner_release = 0;
0639 break;
0640 }
0641
0642 case ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_FIFO: {
0643
0644
0645
0646
0647 ctx->owner_obtain = TQ_EVENT_MUTEX_FIFO_OBTAIN;
0648 ctx->owner_release = TQ_EVENT_MUTEX_FIFO_RELEASE;
0649 break;
0650 }
0651
0652 case ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_Priority: {
0653
0654
0655
0656
0657 ctx->owner_obtain = TQ_EVENT_MUTEX_NO_PROTOCOL_OBTAIN;
0658 ctx->owner_release = TQ_EVENT_MUTEX_NO_PROTOCOL_RELEASE;
0659 break;
0660 }
0661
0662 case ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_PriorityInherit: {
0663
0664
0665
0666
0667 ctx->owner_obtain = TQ_EVENT_MUTEX_C_OBTAIN;
0668 ctx->owner_release = TQ_EVENT_MUTEX_C_RELEASE;
0669 break;
0670 }
0671
0672 case ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_NA:
0673 break;
0674 }
0675 }
0676
0677 static void ScoreTqReqEnqueuePriorityInherit_Post_Position_Check(
0678 ScoreTqReqEnqueuePriorityInherit_Context *ctx,
0679 ScoreTqReqEnqueuePriorityInherit_Post_Position state
0680 )
0681 {
0682 size_t i;
0683
0684 i = 0;
0685
0686
0687 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_HELPER_A ) );
0688
0689 switch ( state ) {
0690 case ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst: {
0691
0692
0693
0694
0695
0696 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_A ) );
0697 T_eq_ptr( GetUnblock( ctx, &i ), NULL );
0698 break;
0699 }
0700
0701 case ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast: {
0702
0703
0704
0705
0706
0707 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_C ) );
0708 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_A ) );
0709 T_eq_ptr( GetUnblock( ctx, &i ), NULL );
0710 break;
0711 }
0712
0713 case ScoreTqReqEnqueuePriorityInherit_Post_Position_First: {
0714
0715
0716
0717
0718 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_A ) );
0719 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_B ) );
0720 T_eq_ptr( GetUnblock( ctx, &i ), NULL );
0721 break;
0722 }
0723
0724 case ScoreTqReqEnqueuePriorityInherit_Post_Position_Second: {
0725
0726
0727
0728
0729 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_B ) );
0730 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_A ) );
0731 T_eq_ptr( GetUnblock( ctx, &i ), NULL );
0732 break;
0733 }
0734
0735 case ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst: {
0736
0737
0738
0739
0740
0741
0742
0743 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_A ) );
0744 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_C ) );
0745 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_B ) );
0746 T_eq_ptr( GetUnblock( ctx, &i ), NULL );
0747 break;
0748 }
0749
0750 case ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst: {
0751
0752
0753
0754
0755
0756
0757
0758 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_B ) );
0759 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_C ) );
0760 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_A ) );
0761 T_eq_ptr( GetUnblock( ctx, &i ), NULL );
0762 break;
0763 }
0764
0765 case ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast: {
0766
0767
0768
0769
0770
0771
0772
0773 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_C ) );
0774 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_A ) );
0775 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_B ) );
0776 T_eq_ptr( GetUnblock( ctx, &i ), NULL );
0777 break;
0778 }
0779
0780 case ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast: {
0781
0782
0783
0784
0785
0786
0787
0788 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_C ) );
0789 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_B ) );
0790 T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_A ) );
0791 T_eq_ptr( GetUnblock( ctx, &i ), NULL );
0792 break;
0793 }
0794
0795 case ScoreTqReqEnqueuePriorityInherit_Post_Position_NA:
0796 break;
0797 }
0798 }
0799
0800 static void ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Check(
0801 ScoreTqReqEnqueuePriorityInherit_Context *ctx,
0802 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority state
0803 )
0804 {
0805 switch ( state ) {
0806 case ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise: {
0807
0808
0809
0810
0811
0812 CheckPriorityRaise( ctx, ctx->owner_priority );
0813 break;
0814 }
0815
0816 case ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop: {
0817
0818
0819
0820 CheckPriorityNop( ctx, ctx->owner_priority );
0821 break;
0822 }
0823
0824 case ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_NA:
0825 break;
0826 }
0827 }
0828
0829 static void ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Check(
0830 ScoreTqReqEnqueuePriorityInherit_Context *ctx,
0831 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler state
0832 )
0833 {
0834 switch ( state ) {
0835 case ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper: {
0836
0837
0838
0839
0840
0841
0842 CheckSchedulerNewHelper( ctx, ctx->owner_priority );
0843 break;
0844 }
0845
0846 case ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop: {
0847
0848
0849
0850
0851 CheckSchedulerNop( ctx, ctx->owner_priority );
0852 break;
0853 }
0854
0855 case ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NA:
0856 break;
0857 }
0858 }
0859
0860 static void ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Check(
0861 ScoreTqReqEnqueuePriorityInherit_Context *ctx,
0862 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority state
0863 )
0864 {
0865 switch ( state ) {
0866 case ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise: {
0867
0868
0869
0870
0871
0872
0873 CheckPriorityRaise( ctx, ctx->owner_owner_priority );
0874 break;
0875 }
0876
0877 case ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop: {
0878
0879
0880
0881
0882 if ( ctx->owner_obtain == TQ_EVENT_MUTEX_C_OBTAIN ) {
0883 CheckPriorityNop( ctx, ctx->owner_owner_priority );
0884 } else {
0885 if ( ctx->vital_priority ) {
0886 T_eq_u32( ctx->owner_owner_priority[ 0 ], PRIO_HIGH );
0887 } else {
0888 T_eq_u32( ctx->owner_owner_priority[ 0 ], PRIO_VERY_HIGH );
0889 }
0890 }
0891 break;
0892 }
0893
0894 case ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_NA:
0895 break;
0896 }
0897 }
0898
0899 static void ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Check(
0900 ScoreTqReqEnqueuePriorityInherit_Context *ctx,
0901 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler state
0902 )
0903 {
0904 switch ( state ) {
0905 case ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper: {
0906
0907
0908
0909
0910
0911
0912 CheckSchedulerNewHelper( ctx, ctx->owner_owner_priority );
0913 break;
0914 }
0915
0916 case ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop: {
0917
0918
0919
0920
0921 if ( ctx->owner_obtain == TQ_EVENT_MUTEX_C_OBTAIN ) {
0922 CheckSchedulerNop( ctx, ctx->owner_owner_priority );
0923 } else {
0924 T_eq_u32( ctx->owner_owner_priority[ 1 ], PRIO_INVALID );
0925 T_eq_u32( ctx->owner_owner_priority[ 2 ], PRIO_INVALID );
0926 T_eq_u32( ctx->owner_owner_priority[ 3 ], PRIO_INVALID );
0927 }
0928 break;
0929 }
0930
0931 case ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NA:
0932 break;
0933 }
0934 }
0935
0936 static void ScoreTqReqEnqueuePriorityInherit_Setup(
0937 ScoreTqReqEnqueuePriorityInherit_Context *ctx
0938 )
0939 {
0940 TQReset( ctx->tq_ctx );
0941 TQSetPriority( ctx->tq_ctx, TQ_BLOCKER_A, PRIO_VERY_HIGH );
0942 TQSetPriority( ctx->tq_ctx, TQ_HELPER_C, PRIO_HIGH );
0943
0944 #if defined( RTEMS_SMP )
0945 TQSetScheduler(
0946 ctx->tq_ctx,
0947 TQ_BLOCKER_C,
0948 SCHEDULER_B_ID,
0949 PRIO_ULTRA_LOW
0950 );
0951
0952 if ( rtems_scheduler_get_processor_maximum() > 3 ) {
0953 RemoveProcessor( SCHEDULER_C_ID, 3 );
0954 AddProcessor( SCHEDULER_D_ID, 3 );
0955 }
0956 #endif
0957 }
0958
0959 static void ScoreTqReqEnqueuePriorityInherit_Setup_Wrap( void *arg )
0960 {
0961 ScoreTqReqEnqueuePriorityInherit_Context *ctx;
0962
0963 ctx = arg;
0964 ctx->Map.in_action_loop = false;
0965 ScoreTqReqEnqueuePriorityInherit_Setup( ctx );
0966 }
0967
0968 static void ScoreTqReqEnqueuePriorityInherit_Teardown(
0969 ScoreTqReqEnqueuePriorityInherit_Context *ctx
0970 )
0971 {
0972 TQReset( ctx->tq_ctx );
0973
0974 #if defined( RTEMS_SMP )
0975 if ( rtems_scheduler_get_processor_maximum() > 3 ) {
0976 RemoveProcessor( SCHEDULER_D_ID, 3 );
0977 AddProcessor( SCHEDULER_C_ID, 3 );
0978 }
0979 #endif
0980 }
0981
0982 static void ScoreTqReqEnqueuePriorityInherit_Teardown_Wrap( void *arg )
0983 {
0984 ScoreTqReqEnqueuePriorityInherit_Context *ctx;
0985
0986 ctx = arg;
0987 ctx->Map.in_action_loop = false;
0988 ScoreTqReqEnqueuePriorityInherit_Teardown( ctx );
0989 }
0990
0991 static void ScoreTqReqEnqueuePriorityInherit_Prepare(
0992 ScoreTqReqEnqueuePriorityInherit_Context *ctx
0993 )
0994 {
0995 ctx->tq_ctx->how_many = 1;
0996 }
0997
0998 static void ScoreTqReqEnqueuePriorityInherit_Action(
0999 ScoreTqReqEnqueuePriorityInherit_Context *ctx
1000 )
1001 {
1002 TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_MUTEX_A_OBTAIN );
1003 TQSend(
1004 ctx->tq_ctx,
1005 TQ_HELPER_A,
1006 TQ_EVENT_MUTEX_B_OBTAIN | TQ_EVENT_ENQUEUE_PREPARE
1007 );
1008
1009 if ( ctx->owner_obtain != 0 ) {
1010 TQSend( ctx->tq_ctx, TQ_HELPER_C, ctx->owner_obtain );
1011 }
1012
1013 if ( ctx->other_before ) {
1014 TQSendAndWaitForExecutionStop(
1015 ctx->tq_ctx,
1016 TQ_BLOCKER_C,
1017 TQ_EVENT_ENQUEUE | TQ_EVENT_SURRENDER | TQ_EVENT_RUNNER_SYNC_2
1018 );
1019 }
1020
1021 if ( ctx->queue_priority != PRIO_INVALID ) {
1022 TQSetPriority( ctx->tq_ctx, TQ_BLOCKER_B , ctx->queue_priority );
1023 TQSend(
1024 ctx->tq_ctx,
1025 TQ_BLOCKER_B,
1026 TQ_EVENT_ENQUEUE | TQ_EVENT_SURRENDER
1027 );
1028 }
1029
1030 if ( ctx->other_after ) {
1031 TQSendAndWaitForExecutionStop(
1032 ctx->tq_ctx,
1033 TQ_BLOCKER_C,
1034 TQ_EVENT_ENQUEUE | TQ_EVENT_SURRENDER | TQ_EVENT_RUNNER_SYNC_2
1035 );
1036 }
1037
1038 if ( ctx->vital_priority ) {
1039 TQSetPriority( ctx->tq_ctx, TQ_HELPER_A, PRIO_HIGH );
1040 TQSetPriority( ctx->tq_ctx, TQ_HELPER_C, PRIO_HIGH );
1041
1042 if (
1043 ctx->queue_priority == PRIO_VERY_HIGH ||
1044 ctx->queue_priority == PRIO_ULTRA_HIGH
1045 ) {
1046 if ( ctx->other_before || ctx->other_after ) {
1047 AddVitalPriority( ctx, SCHEDULER_C_ID );
1048 AddVitalPriorityHelper( ctx, SCHEDULER_C_ID );
1049
1050 if ( ctx->vital_scheduler ) {
1051 AddVitalScheduler( ctx, SCHEDULER_D_ID );
1052 }
1053 } else {
1054 AddVitalPriority( ctx, SCHEDULER_B_ID );
1055 AddVitalPriorityHelper( ctx, SCHEDULER_B_ID );
1056
1057 if ( ctx->vital_scheduler ) {
1058 AddVitalScheduler( ctx, SCHEDULER_C_ID );
1059 }
1060 }
1061 } else {
1062 if ( ctx->vital_scheduler ) {
1063 if ( ctx->other_before || ctx->other_after ) {
1064 AddVitalScheduler( ctx, SCHEDULER_C_ID );
1065 } else {
1066 AddVitalScheduler( ctx, SCHEDULER_B_ID );
1067 }
1068 }
1069 }
1070 } else {
1071 TQSetPriority( ctx->tq_ctx, TQ_HELPER_A, PRIO_VERY_HIGH );
1072 TQSetPriority( ctx->tq_ctx, TQ_HELPER_C, PRIO_VERY_HIGH );
1073
1074 if ( ctx->vital_scheduler ) {
1075 if ( ctx->other_before || ctx->other_after ) {
1076 AddVitalScheduler( ctx, SCHEDULER_C_ID );
1077 } else {
1078 AddVitalScheduler( ctx, SCHEDULER_B_ID );
1079 }
1080 }
1081 }
1082
1083 if ( ctx->owner_obtain != 0 ) {
1084 TQClearDone( ctx->tq_ctx, TQ_HELPER_A );
1085 TQSendAndWaitForExecutionStop(
1086 ctx->tq_ctx,
1087 TQ_HELPER_A,
1088 ctx->owner_obtain | ctx->owner_release
1089 );
1090 }
1091
1092 TQSend(
1093 ctx->tq_ctx,
1094 TQ_BLOCKER_A,
1095 TQ_EVENT_ENQUEUE | TQ_EVENT_SURRENDER | TQ_EVENT_RUNNER_SYNC
1096 );
1097
1098 GetPriorities( ctx, TQ_HELPER_A, ctx->owner_priority );
1099 GetPriorities( ctx, TQ_HELPER_C, ctx->owner_owner_priority );
1100
1101 if ( ctx->owner_obtain != 0 ) {
1102 TQSend( ctx->tq_ctx, TQ_HELPER_C, ctx->owner_release );
1103 TQWaitForDone( ctx->tq_ctx, TQ_HELPER_A );
1104 TQWaitForExecutionStop( ctx->tq_ctx, TQ_HELPER_A );
1105 }
1106
1107 TQSchedulerRecordStart( ctx->tq_ctx );
1108 TQSend( ctx->tq_ctx, TQ_HELPER_A, TQ_EVENT_ENQUEUE_DONE );
1109
1110 if ( ctx->other_before || ctx->other_after ) {
1111 TQSynchronizeRunner2();
1112 } else {
1113 TQSynchronizeRunner();
1114 }
1115
1116 TQSchedulerRecordStop( ctx->tq_ctx );
1117
1118 TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_MUTEX_A_RELEASE );
1119 TQMutexObtain( ctx->tq_ctx, TQ_MUTEX_A );
1120 TQMutexRelease( ctx->tq_ctx, TQ_MUTEX_A );
1121
1122 TQSend( ctx->tq_ctx, TQ_HELPER_A, TQ_EVENT_MUTEX_B_RELEASE );
1123 TQMutexObtain( ctx->tq_ctx, TQ_MUTEX_B );
1124 TQMutexRelease( ctx->tq_ctx, TQ_MUTEX_B );
1125 }
1126
1127 static const ScoreTqReqEnqueuePriorityInherit_Entry
1128 ScoreTqReqEnqueuePriorityInherit_Entries[] = {
1129 { 1, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_NA,
1130 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_NA,
1131 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NA,
1132 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_NA,
1133 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NA },
1134 { 1, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_NA,
1135 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_NA,
1136 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NA,
1137 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_NA,
1138 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NA },
1139 { 1, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_NA,
1140 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_NA,
1141 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NA,
1142 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_NA,
1143 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NA },
1144 { 1, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_NA,
1145 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_NA,
1146 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NA,
1147 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_NA,
1148 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NA },
1149 { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_Second,
1150 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1151 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1152 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1153 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1154 { 1, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_NA,
1155 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_NA,
1156 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NA,
1157 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_NA,
1158 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NA },
1159 { 0, 0, 0, 0, 0, 0, 0,
1160 ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast,
1161 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1162 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1163 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1164 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1165 { 0, 0, 0, 0, 0, 0, 0,
1166 ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst,
1167 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1168 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1169 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1170 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1171 { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_Second,
1172 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1173 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1174 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1175 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1176 { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_Second,
1177 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1178 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1179 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1180 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1181 { 0, 0, 0, 0, 0, 0, 0,
1182 ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst,
1183 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1184 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1185 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1186 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1187 { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_First,
1188 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1189 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1190 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1191 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1192 { 0, 0, 0, 0, 0, 0, 0,
1193 ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst,
1194 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1195 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1196 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1197 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1198 { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_First,
1199 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1200 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1201 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1202 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1203 { 0, 0, 0, 0, 0, 0, 0,
1204 ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast,
1205 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1206 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1207 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1208 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1209 { 0, 0, 0, 0, 0, 0, 0,
1210 ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast,
1211 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1212 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1213 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1214 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1215 { 0, 0, 0, 0, 0, 0, 0,
1216 ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst,
1217 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1218 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1219 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1220 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1221 { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_Second,
1222 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1223 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1224 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1225 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1226 { 0, 0, 0, 0, 0, 0, 0,
1227 ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast,
1228 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1229 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1230 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1231 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1232 { 0, 0, 0, 0, 0, 0, 0,
1233 ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast,
1234 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1235 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1236 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1237 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1238 { 0, 0, 0, 0, 0, 0, 0,
1239 ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst,
1240 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1241 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1242 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1243 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1244 { 0, 0, 0, 0, 0, 0, 0,
1245 ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst,
1246 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1247 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1248 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1249 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1250 { 0, 0, 0, 0, 0, 0, 0,
1251 ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst,
1252 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1253 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1254 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1255 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1256 { 0, 0, 0, 0, 0, 0, 0,
1257 ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst,
1258 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1259 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1260 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1261 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1262 { 0, 0, 0, 0, 0, 0, 0,
1263 ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast,
1264 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1265 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1266 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1267 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1268 { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_First,
1269 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1270 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1271 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1272 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1273 { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_First,
1274 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1275 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1276 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1277 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1278 { 0, 0, 0, 0, 0, 0, 0,
1279 ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast,
1280 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1281 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1282 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1283 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1284 { 0, 0, 0, 0, 0, 0, 0,
1285 ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst,
1286 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1287 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1288 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1289 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1290 { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_Second,
1291 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1292 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1293 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise,
1294 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1295 { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_Second,
1296 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1297 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1298 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1299 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper },
1300 { 0, 0, 0, 0, 0, 0, 0,
1301 ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast,
1302 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1303 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1304 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1305 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1306 { 0, 0, 0, 0, 0, 0, 0,
1307 ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast,
1308 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1309 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1310 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1311 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1312 { 0, 0, 0, 0, 0, 0, 0,
1313 ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast,
1314 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1315 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1316 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1317 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1318 { 0, 0, 0, 0, 0, 0, 0,
1319 ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast,
1320 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1321 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1322 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1323 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1324 { 0, 0, 0, 0, 0, 0, 0,
1325 ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst,
1326 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1327 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1328 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1329 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1330 { 0, 0, 0, 0, 0, 0, 0,
1331 ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst,
1332 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1333 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1334 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1335 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1336 { 0, 0, 0, 0, 0, 0, 0,
1337 ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast,
1338 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1339 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1340 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1341 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1342 { 0, 0, 0, 0, 0, 0, 0,
1343 ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst,
1344 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1345 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1346 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1347 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1348 { 0, 0, 0, 0, 0, 0, 0,
1349 ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst,
1350 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1351 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1352 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise,
1353 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1354 { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_First,
1355 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1356 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1357 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise,
1358 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1359 { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_Second,
1360 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1361 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1362 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise,
1363 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper },
1364 { 0, 0, 0, 0, 0, 0, 0,
1365 ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast,
1366 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1367 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1368 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise,
1369 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1370 { 0, 0, 0, 0, 0, 0, 0,
1371 ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast,
1372 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1373 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1374 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1375 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper },
1376 { 0, 0, 0, 0, 0, 0, 0,
1377 ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst,
1378 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1379 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1380 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise,
1381 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1382 { 0, 0, 0, 0, 0, 0, 0,
1383 ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst,
1384 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1385 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1386 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1387 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper },
1388 { 0, 0, 0, 0, 0, 0, 0,
1389 ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst,
1390 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1391 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1392 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise,
1393 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper },
1394 { 0, 0, 0, 0, 0, 0, 0,
1395 ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst,
1396 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1397 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1398 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1399 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper },
1400 { 0, 0, 0, 0, 0, 0, 0,
1401 ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast,
1402 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1403 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1404 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise,
1405 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1406 { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_First,
1407 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1408 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1409 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise,
1410 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper },
1411 { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_First,
1412 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1413 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1414 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1415 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper },
1416 { 0, 0, 0, 0, 0, 0, 0,
1417 ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast,
1418 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1419 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1420 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise,
1421 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1422 { 0, 0, 0, 0, 0, 0, 0,
1423 ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst,
1424 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1425 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop,
1426 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise,
1427 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop },
1428 { 0, 0, 0, 0, 0, 0, 0,
1429 ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast,
1430 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1431 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1432 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise,
1433 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper },
1434 { 0, 0, 0, 0, 0, 0, 0,
1435 ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast,
1436 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1437 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1438 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1439 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper },
1440 { 0, 0, 0, 0, 0, 0, 0,
1441 ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast,
1442 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1443 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1444 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise,
1445 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper },
1446 { 0, 0, 0, 0, 0, 0, 0,
1447 ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast,
1448 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1449 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1450 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1451 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper },
1452 { 0, 0, 0, 0, 0, 0, 0,
1453 ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst,
1454 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1455 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1456 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise,
1457 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper },
1458 { 0, 0, 0, 0, 0, 0, 0,
1459 ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst,
1460 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop,
1461 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1462 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop,
1463 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper },
1464 { 0, 0, 0, 0, 0, 0, 0,
1465 ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast,
1466 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1467 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1468 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise,
1469 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper },
1470 { 0, 0, 0, 0, 0, 0, 0,
1471 ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst,
1472 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise,
1473 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper,
1474 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise,
1475 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper }
1476 };
1477
1478 static const uint8_t
1479 ScoreTqReqEnqueuePriorityInherit_Map[] = {
1480 0, 0, 0, 0, 12, 12, 12, 39, 0, 0, 0, 0, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0,
1481 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,
1482 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0,
1483 0, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1484 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,
1485 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1486 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,
1487 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 40, 0, 0, 0,
1488 0, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1489 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,
1490 0, 0, 0, 22, 22, 22, 46, 12, 12, 12, 39, 23, 23, 23, 47, 10, 10, 10, 10, 3,
1491 3, 3, 3, 24, 24, 24, 48, 3, 3, 3, 3, 14, 14, 14, 14, 2, 2, 2, 2, 2, 2, 2, 2,
1492 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,
1493 3, 3, 8, 8, 8, 29, 9, 9, 9, 30, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1494 1, 1, 1, 1, 1, 3, 3, 3, 3, 5, 5, 5, 5, 3, 3, 3, 3, 6, 6, 6, 6, 3, 3, 3, 3, 5,
1495 5, 5, 5, 3, 3, 3, 3, 7, 7, 7, 7, 3, 3, 3, 3, 8, 8, 8, 29, 9, 9, 9, 30, 4, 4,
1496 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 5, 5, 5, 5,
1497 3, 3, 3, 3, 6, 6, 6, 6, 3, 3, 3, 3, 5, 5, 5, 5, 3, 3, 3, 3, 7, 7, 7, 7, 25,
1498 25, 25, 49, 13, 13, 13, 40, 26, 26, 26, 50, 11, 11, 11, 11, 1, 1, 1, 1, 1, 1,
1499 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 27, 27, 27, 51, 3, 3, 3, 3, 15, 15,
1500 15, 15, 3, 3, 3, 3, 28, 28, 28, 52, 3, 3, 3, 3, 16, 16, 16, 16, 22, 22, 22,
1501 46, 12, 12, 12, 39, 23, 23, 23, 47, 10, 10, 10, 10, 31, 31, 31, 53, 24, 24,
1502 24, 48, 32, 32, 32, 54, 14, 14, 14, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1503 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, 17, 41,
1504 8, 8, 8, 29, 9, 9, 9, 30, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1505 1, 1, 1, 3, 3, 3, 3, 18, 18, 18, 42, 19, 19, 19, 43, 6, 6, 6, 6, 3, 3, 3, 3,
1506 20, 20, 20, 44, 21, 21, 21, 45, 7, 7, 7, 7, 17, 17, 17, 41, 8, 8, 8, 29, 9,
1507 9, 9, 30, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3,
1508 3, 3, 18, 18, 18, 42, 19, 19, 19, 43, 6, 6, 6, 6, 3, 3, 3, 3, 20, 20, 20, 44,
1509 21, 21, 21, 45, 7, 7, 7, 7, 25, 25, 25, 49, 13, 13, 13, 40, 26, 26, 26, 50,
1510 11, 11, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 33, 33, 33,
1511 55, 27, 27, 27, 51, 34, 34, 34, 56, 15, 15, 15, 15, 35, 35, 35, 57, 28, 28,
1512 28, 52, 36, 36, 36, 58, 16, 16, 16, 16, 22, 22, 22, 46, 12, 12, 12, 39, 23,
1513 23, 23, 47, 10, 10, 10, 10, 31, 31, 31, 53, 24, 24, 24, 48, 32, 32, 32, 54,
1514 14, 14, 14, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1515 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, 17, 41, 8, 8, 8, 29, 9, 9, 9, 30,
1516 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 37, 37, 59,
1517 18, 18, 18, 42, 19, 19, 19, 43, 6, 6, 6, 6, 38, 38, 38, 60, 20, 20, 20, 44,
1518 21, 21, 21, 45, 7, 7, 7, 7, 17, 17, 17, 41, 8, 8, 8, 29, 9, 9, 9, 30, 4, 4,
1519 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 37, 37, 59, 18, 18,
1520 18, 42, 19, 19, 19, 43, 6, 6, 6, 6, 38, 38, 38, 60, 20, 20, 20, 44, 21, 21,
1521 21, 45, 7, 7, 7, 7, 25, 25, 25, 49, 13, 13, 13, 40, 26, 26, 26, 50, 11, 11,
1522 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 33, 33, 33, 55, 27,
1523 27, 27, 51, 34, 34, 34, 56, 15, 15, 15, 15, 35, 35, 35, 57, 28, 28, 28, 52,
1524 36, 36, 36, 58, 16, 16, 16, 16
1525 };
1526
1527 static size_t ScoreTqReqEnqueuePriorityInherit_Scope(
1528 void *arg,
1529 char *buf,
1530 size_t n
1531 )
1532 {
1533 ScoreTqReqEnqueuePriorityInherit_Context *ctx;
1534
1535 ctx = arg;
1536
1537 if ( ctx->Map.in_action_loop ) {
1538 return T_get_scope(
1539 ScoreTqReqEnqueuePriorityInherit_PreDesc,
1540 buf,
1541 n,
1542 ctx->Map.pcs
1543 );
1544 }
1545
1546 return 0;
1547 }
1548
1549 static T_fixture ScoreTqReqEnqueuePriorityInherit_Fixture = {
1550 .setup = ScoreTqReqEnqueuePriorityInherit_Setup_Wrap,
1551 .stop = NULL,
1552 .teardown = ScoreTqReqEnqueuePriorityInherit_Teardown_Wrap,
1553 .scope = ScoreTqReqEnqueuePriorityInherit_Scope,
1554 .initial_context = &ScoreTqReqEnqueuePriorityInherit_Instance
1555 };
1556
1557 static const uint16_t ScoreTqReqEnqueuePriorityInherit_Weights[] = {
1558 256, 64, 16, 8, 4, 1
1559 };
1560
1561 static void ScoreTqReqEnqueuePriorityInherit_Skip(
1562 ScoreTqReqEnqueuePriorityInherit_Context *ctx,
1563 size_t index
1564 )
1565 {
1566 switch ( index + 1 ) {
1567 case 1:
1568 ctx->Map.pcs[ 1 ] = ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_NA - 1;
1569
1570 case 2:
1571 ctx->Map.pcs[ 2 ] = ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_NA - 1;
1572
1573 case 3:
1574 ctx->Map.pcs[ 3 ] = ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_NA - 1;
1575
1576 case 4:
1577 ctx->Map.pcs[ 4 ] = ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_NA - 1;
1578
1579 case 5:
1580 ctx->Map.pcs[ 5 ] = ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_NA - 1;
1581 break;
1582 }
1583 }
1584
1585 static inline ScoreTqReqEnqueuePriorityInherit_Entry
1586 ScoreTqReqEnqueuePriorityInherit_PopEntry(
1587 ScoreTqReqEnqueuePriorityInherit_Context *ctx
1588 )
1589 {
1590 size_t index;
1591
1592 if ( ctx->Map.skip ) {
1593 size_t i;
1594
1595 ctx->Map.skip = false;
1596 index = 0;
1597
1598 for ( i = 0; i < 6; ++i ) {
1599 index += ScoreTqReqEnqueuePriorityInherit_Weights[ i ] * ctx->Map.pcs[ i ];
1600 }
1601 } else {
1602 index = ctx->Map.index;
1603 }
1604
1605 ctx->Map.index = index + 1;
1606
1607 return ScoreTqReqEnqueuePriorityInherit_Entries[
1608 ScoreTqReqEnqueuePriorityInherit_Map[ index ]
1609 ];
1610 }
1611
1612 static void ScoreTqReqEnqueuePriorityInherit_TestVariant(
1613 ScoreTqReqEnqueuePriorityInherit_Context *ctx
1614 )
1615 {
1616 ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_Prepare(
1617 ctx,
1618 ctx->Map.pcs[ 0 ]
1619 );
1620
1621 if ( ctx->Map.skip ) {
1622 ScoreTqReqEnqueuePriorityInherit_Skip( ctx, 0 );
1623 return;
1624 }
1625
1626 ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_Prepare(
1627 ctx,
1628 ctx->Map.pcs[ 1 ]
1629 );
1630 ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_Prepare(
1631 ctx,
1632 ctx->Map.pcs[ 2 ]
1633 );
1634 ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_Prepare(
1635 ctx,
1636 ctx->Map.pcs[ 3 ]
1637 );
1638 ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_Prepare(
1639 ctx,
1640 ctx->Map.pcs[ 4 ]
1641 );
1642 ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_Prepare(
1643 ctx,
1644 ctx->Map.pcs[ 5 ]
1645 );
1646 ScoreTqReqEnqueuePriorityInherit_Action( ctx );
1647 ScoreTqReqEnqueuePriorityInherit_Post_Position_Check(
1648 ctx,
1649 ctx->Map.entry.Post_Position
1650 );
1651 ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Check(
1652 ctx,
1653 ctx->Map.entry.Post_OwnerPriority
1654 );
1655 ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Check(
1656 ctx,
1657 ctx->Map.entry.Post_OwnerScheduler
1658 );
1659 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Check(
1660 ctx,
1661 ctx->Map.entry.Post_OwnerOwnerPriority
1662 );
1663 ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Check(
1664 ctx,
1665 ctx->Map.entry.Post_OwnerOwnerScheduler
1666 );
1667 }
1668
1669 static T_fixture_node ScoreTqReqEnqueuePriorityInherit_Node;
1670
1671 static T_remark ScoreTqReqEnqueuePriorityInherit_Remark = {
1672 .next = NULL,
1673 .remark = "ScoreTqReqEnqueuePriorityInherit"
1674 };
1675
1676 void ScoreTqReqEnqueuePriorityInherit_Run( TQContext *tq_ctx )
1677 {
1678 ScoreTqReqEnqueuePriorityInherit_Context *ctx;
1679
1680 ctx = &ScoreTqReqEnqueuePriorityInherit_Instance;
1681 ctx->tq_ctx = tq_ctx;
1682
1683 ctx = T_push_fixture(
1684 &ScoreTqReqEnqueuePriorityInherit_Node,
1685 &ScoreTqReqEnqueuePriorityInherit_Fixture
1686 );
1687 ctx->Map.in_action_loop = true;
1688 ctx->Map.index = 0;
1689 ctx->Map.skip = false;
1690
1691 for (
1692 ctx->Map.pcs[ 0 ] = ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_One;
1693 ctx->Map.pcs[ 0 ] < ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_NA;
1694 ++ctx->Map.pcs[ 0 ]
1695 ) {
1696 for (
1697 ctx->Map.pcs[ 1 ] = ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_None;
1698 ctx->Map.pcs[ 1 ] < ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_NA;
1699 ++ctx->Map.pcs[ 1 ]
1700 ) {
1701 for (
1702 ctx->Map.pcs[ 2 ] = ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_None;
1703 ctx->Map.pcs[ 2 ] < ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_NA;
1704 ++ctx->Map.pcs[ 2 ]
1705 ) {
1706 for (
1707 ctx->Map.pcs[ 3 ] = ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_Vital;
1708 ctx->Map.pcs[ 3 ] < ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_NA;
1709 ++ctx->Map.pcs[ 3 ]
1710 ) {
1711 for (
1712 ctx->Map.pcs[ 4 ] = ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_Vital;
1713 ctx->Map.pcs[ 4 ] < ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_NA;
1714 ++ctx->Map.pcs[ 4 ]
1715 ) {
1716 for (
1717 ctx->Map.pcs[ 5 ] = ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_NotEnqueued;
1718 ctx->Map.pcs[ 5 ] < ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_NA;
1719 ++ctx->Map.pcs[ 5 ]
1720 ) {
1721 ctx->Map.entry = ScoreTqReqEnqueuePriorityInherit_PopEntry(
1722 ctx
1723 );
1724
1725 if ( ctx->Map.entry.Skip ) {
1726 continue;
1727 }
1728
1729 ScoreTqReqEnqueuePriorityInherit_Prepare( ctx );
1730 ScoreTqReqEnqueuePriorityInherit_TestVariant( ctx );
1731 }
1732 }
1733 }
1734 }
1735 }
1736 }
1737
1738 T_add_remark( &ScoreTqReqEnqueuePriorityInherit_Remark );
1739 T_pop_fixture();
1740 }
1741
1742