From e8b23476a93271b548144cbe358759cf5f948802 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 6 Oct 2021 09:48:07 +0200 Subject: validation: Priority inherit enqueue runner --- spec/build/testsuites/validation/validation-0.yml | 1 + .../validation/validation-no-clock-0.yml | 1 + testsuites/validation/tr-mtx-seize-wait.c | 3 +- .../validation/tr-tq-enqueue-priority-inherit.c | 1737 ++++++++++++++++++++ .../validation/tr-tq-enqueue-priority-inherit.h | 159 ++ 5 files changed, 1900 insertions(+), 1 deletion(-) create mode 100644 testsuites/validation/tr-tq-enqueue-priority-inherit.c create mode 100644 testsuites/validation/tr-tq-enqueue-priority-inherit.h diff --git a/spec/build/testsuites/validation/validation-0.yml b/spec/build/testsuites/validation/validation-0.yml index 9f4e32efe9..42a23a02b2 100644 --- a/spec/build/testsuites/validation/validation-0.yml +++ b/spec/build/testsuites/validation/validation-0.yml @@ -123,6 +123,7 @@ source: - testsuites/validation/tr-tq-enqueue-fifo.c - testsuites/validation/tr-tq-enqueue-mrsp.c - testsuites/validation/tr-tq-enqueue-priority.c +- testsuites/validation/tr-tq-enqueue-priority-inherit.c - testsuites/validation/tr-tq-flush-fifo.c - testsuites/validation/tr-tq-flush-priority.c - testsuites/validation/tr-tq-flush-priority-inherit.c diff --git a/spec/build/testsuites/validation/validation-no-clock-0.yml b/spec/build/testsuites/validation/validation-no-clock-0.yml index 5a94582bba..96e1b4a586 100644 --- a/spec/build/testsuites/validation/validation-no-clock-0.yml +++ b/spec/build/testsuites/validation/validation-no-clock-0.yml @@ -46,6 +46,7 @@ source: - testsuites/validation/tr-tq-enqueue-fifo.c - testsuites/validation/tr-tq-enqueue-mrsp.c - testsuites/validation/tr-tq-enqueue-priority.c +- testsuites/validation/tr-tq-enqueue-priority-inherit.c - testsuites/validation/tr-tq-surrender.c - testsuites/validation/tr-tq-surrender-priority-inherit.c - testsuites/validation/tr-tq-timeout.c diff --git a/testsuites/validation/tr-mtx-seize-wait.c b/testsuites/validation/tr-mtx-seize-wait.c index 769956d2c7..d40e3150b8 100644 --- a/testsuites/validation/tr-mtx-seize-wait.c +++ b/testsuites/validation/tr-mtx-seize-wait.c @@ -57,6 +57,7 @@ #include "tr-tq-enqueue-deadlock.h" #include "tr-tq-enqueue-fifo.h" #include "tr-tq-enqueue-mrsp.h" +#include "tr-tq-enqueue-priority-inherit.h" #include "tr-tq-enqueue-priority.h" #include @@ -710,7 +711,7 @@ static void ScoreMtxReqSeizeWait_Post_Enqueued_Check( * The calling thread shall be enqueued in priority order with priorit * inheritance. */ - ScoreTqReqEnqueuePriority_Run( &ctx->tq_ctx->base ); + ScoreTqReqEnqueuePriorityInherit_Run( &ctx->tq_ctx->base ); break; } diff --git a/testsuites/validation/tr-tq-enqueue-priority-inherit.c b/testsuites/validation/tr-tq-enqueue-priority-inherit.c new file mode 100644 index 0000000000..fdbe3611e1 --- /dev/null +++ b/testsuites/validation/tr-tq-enqueue-priority-inherit.c @@ -0,0 +1,1737 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup RTEMSTestCaseScoreTqReqEnqueuePriorityInherit + */ + +/* + * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "tr-tq-enqueue-priority-inherit.h" + +#include + +/** + * @defgroup RTEMSTestCaseScoreTqReqEnqueuePriorityInherit \ + * spec:/score/tq/req/enqueue-priority-inherit + * + * @ingroup RTEMSTestSuiteTestsuitesValidation0 + * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * + * @{ + */ + +typedef struct { + uint32_t Skip : 1; + uint32_t Pre_Scheduler_NA : 1; + uint32_t Pre_QueueEligible_NA : 1; + uint32_t Pre_QueueIneligible_NA : 1; + uint32_t Pre_PriorityForOwner_NA : 1; + uint32_t Pre_SchedulerForOwner_NA : 1; + uint32_t Pre_OwnerState_NA : 1; + uint32_t Post_Position : 4; + uint32_t Post_OwnerPriority : 2; + uint32_t Post_OwnerScheduler : 2; + uint32_t Post_OwnerOwnerPriority : 2; + uint32_t Post_OwnerOwnerScheduler : 2; +} ScoreTqReqEnqueuePriorityInherit_Entry; + +/** + * @brief Test context for spec:/score/tq/req/enqueue-priority-inherit test + * case. + */ +typedef struct { + /** + * @brief This member specifies the priority of a thread on the thread queue + * with an eligible scheduler equal to an eligible scheduler of the + * enqueueing thread. + */ + rtems_task_priority queue_priority; + + /** + * @brief If this member is true, then a thread those eligible schedulers are + * ineligible scheduler to the enqueueing task should be enqueued before a + * thread with an eligible scheduler equal to an eligible scheduler of the + * enqueueing thread. + */ + size_t other_before; + + /** + * @brief If this member is true, then a thread those eligible schedulers are + * ineligible scheduler to the enqueueing task should be enqueued after a + * thread with an eligible scheduler equal to an eligible scheduler of the + * enqueueing thread. + */ + size_t other_after; + + /** + * @brief This this member is true, then the priorities of the enqueueing + * thread shall be dispensable for the owner of the thread queue. + */ + bool vital_priority; + + /** + * @brief This this member is true, then the eligible scheduler of the + * enqueueing thread shall be dispensable for the owner of the thread + * queue. + */ + bool vital_scheduler; + + /** + * @brief This member contains the priorities of the thread queue owner after + * the enqueue. + */ + rtems_task_priority owner_priority[ 4 ]; + + /** + * @brief This member contains the priorities of the owner of the thread + * queue on which the thread queue owner is blocked after the enqueue. + */ + rtems_task_priority owner_owner_priority[ 4 ]; + + /** + * @brief This member specifies which mutex obtain event shall be used to + * block the thread queue owner. + */ + rtems_event_set owner_obtain; + + /** + * @brief This member specifies which mutex release event shall be used to + * unblock the thread queue owner. + */ + rtems_event_set owner_release; + + /** + * @brief This member contains a copy of the corresponding + * ScoreTqReqEnqueuePriorityInherit_Run() parameter. + */ + TQContext *tq_ctx; + + struct { + /** + * @brief This member defines the pre-condition states for the next action. + */ + size_t pcs[ 6 ]; + + /** + * @brief If this member is true, then the test action loop is executed. + */ + bool in_action_loop; + + /** + * @brief This member contains the next transition map index. + */ + size_t index; + + /** + * @brief This member contains the current transition map entry. + */ + ScoreTqReqEnqueuePriorityInherit_Entry entry; + + /** + * @brief If this member is true, then the current transition variant + * should be skipped. + */ + bool skip; + } Map; +} ScoreTqReqEnqueuePriorityInherit_Context; + +static ScoreTqReqEnqueuePriorityInherit_Context + ScoreTqReqEnqueuePriorityInherit_Instance; + +static const char * const ScoreTqReqEnqueuePriorityInherit_PreDesc_Scheduler[] = { + "One", + "Two", + "Three", + "More", + "NA" +}; + +static const char * const ScoreTqReqEnqueuePriorityInherit_PreDesc_QueueEligible[] = { + "None", + "High", + "Equal", + "Low", + "NA" +}; + +static const char * const ScoreTqReqEnqueuePriorityInherit_PreDesc_QueueIneligible[] = { + "None", + "Only", + "Before", + "After", + "NA" +}; + +static const char * const ScoreTqReqEnqueuePriorityInherit_PreDesc_PriorityForOwner[] = { + "Vital", + "Dispensable", + "NA" +}; + +static const char * const ScoreTqReqEnqueuePriorityInherit_PreDesc_SchedulerForOwner[] = { + "Vital", + "Dispensable", + "NA" +}; + +static const char * const ScoreTqReqEnqueuePriorityInherit_PreDesc_OwnerState[] = { + "NotEnqueued", + "FIFO", + "Priority", + "PriorityInherit", + "NA" +}; + +static const char * const * const ScoreTqReqEnqueuePriorityInherit_PreDesc[] = { + ScoreTqReqEnqueuePriorityInherit_PreDesc_Scheduler, + ScoreTqReqEnqueuePriorityInherit_PreDesc_QueueEligible, + ScoreTqReqEnqueuePriorityInherit_PreDesc_QueueIneligible, + ScoreTqReqEnqueuePriorityInherit_PreDesc_PriorityForOwner, + ScoreTqReqEnqueuePriorityInherit_PreDesc_SchedulerForOwner, + ScoreTqReqEnqueuePriorityInherit_PreDesc_OwnerState, + NULL +}; + +typedef ScoreTqReqEnqueuePriorityInherit_Context Context; + +static const rtems_tcb *GetUnblock( Context *ctx, size_t *index ) +{ + const rtems_tcb *thread; + + do { + thread = TQGetNextUnblock( ctx->tq_ctx, index )->thread; + } while ( thread == ctx->tq_ctx->runner_tcb ); + + return thread; +} + +static const rtems_tcb *GetTCB( Context *ctx, TQWorkerKind worker ) +{ + return ctx->tq_ctx->worker_tcb[ worker ]; +} + +static void CheckPriorityRaise( + const Context *ctx, + const rtems_task_priority *priority +) +{ + if ( ctx->queue_priority == PRIO_ULTRA_HIGH ) { + T_eq_u32( priority[ 0 ], PRIO_ULTRA_HIGH ); + } else { + T_eq_u32( priority[ 0 ], PRIO_VERY_HIGH ); + } + + if ( + ctx->queue_priority == PRIO_VERY_HIGH || + ctx->queue_priority == PRIO_ULTRA_HIGH + ) { + if ( ctx->other_before || ctx->other_after ) { + T_eq_u32( priority[ 1 ], PRIO_ULTRA_LOW ); + T_eq_u32( priority[ 2 ], PRIO_NORMAL ); + } else { + T_eq_u32( priority[ 1 ], PRIO_NORMAL ); + } + } +} + +static void CheckPriorityNop( + const Context *ctx, + const rtems_task_priority *priority +) +{ + if ( ctx->queue_priority == PRIO_ULTRA_HIGH ) { + T_eq_u32( priority[ 0 ], PRIO_ULTRA_HIGH ); + } else { + T_eq_u32( priority[ 0 ], PRIO_VERY_HIGH ); + } +} + +static void CheckSchedulerNewHelper( + const Context *ctx, + const rtems_task_priority *priority +) +{ + if ( + ctx->vital_priority && + ( ctx->queue_priority == PRIO_VERY_HIGH || + ctx->queue_priority == PRIO_ULTRA_HIGH ) + ) { + if ( ctx->other_before || ctx->other_after ) { + T_eq_u32( priority[ 3 ], PRIO_VERY_LOW ); + } else { + T_eq_u32( priority[ 2 ], PRIO_VERY_LOW ); + T_eq_u32( priority[ 3 ], PRIO_INVALID ); + } + } else { + if ( ctx->other_before || ctx->other_after ) { + T_eq_u32( priority[ 1 ], PRIO_ULTRA_LOW ); + T_eq_u32( priority[ 2 ], PRIO_VERY_LOW ); + } else { + T_eq_u32( priority[ 1 ], PRIO_VERY_LOW ); + T_eq_u32( priority[ 2 ], PRIO_INVALID ); + } + + T_eq_u32( priority[ 3 ], PRIO_INVALID ); + } +} + +static void CheckSchedulerNop( + const Context *ctx, + const rtems_task_priority *priority +) +{ + if ( + ctx->vital_priority && + ( ctx->queue_priority == PRIO_VERY_HIGH || + ctx->queue_priority == PRIO_ULTRA_HIGH ) + ) { + if ( !ctx->other_before && !ctx->other_after ) { + T_eq_u32( priority[ 2 ], PRIO_INVALID ); + } + + T_eq_u32( priority[ 3 ], PRIO_INVALID ); + } else { + if ( ctx->other_before || ctx->other_after ) { + T_eq_u32( priority[ 1 ], PRIO_ULTRA_LOW ); + } else { + T_eq_u32( priority[ 1 ], PRIO_INVALID ); + } + + T_eq_u32( priority[ 2 ], PRIO_INVALID ); + T_eq_u32( priority[ 3 ], PRIO_INVALID ); + } +} + +static void GetPriorities( + const Context *ctx, + TQWorkerKind worker, + rtems_task_priority *priority +) +{ + priority[ 0 ] = GetPriorityByScheduler( + ctx->tq_ctx->worker_id[ worker ], + SCHEDULER_A_ID + ); + priority[ 1 ] = GetPriorityByScheduler( + ctx->tq_ctx->worker_id[ worker ], + SCHEDULER_B_ID + ); + priority[ 2 ] = GetPriorityByScheduler( + ctx->tq_ctx->worker_id[ worker ], + SCHEDULER_C_ID + ); + priority[ 3 ] = GetPriorityByScheduler( + ctx->tq_ctx->worker_id[ worker ], + SCHEDULER_D_ID + ); +} + +static void AddVitalPriority( Context *ctx, rtems_id scheduler_id ) +{ + TQSetScheduler( ctx->tq_ctx, TQ_BLOCKER_D, scheduler_id, PRIO_NORMAL ); + TQSendAndWaitForExecutionStop( + ctx->tq_ctx, + TQ_BLOCKER_D, + TQ_EVENT_MUTEX_A_OBTAIN | TQ_EVENT_MUTEX_A_RELEASE + ); +} + +static void AddVitalPriorityHelper( Context *ctx, rtems_id scheduler_id ) +{ + TQSetScheduler( ctx->tq_ctx, TQ_HELPER_B, scheduler_id, PRIO_LOW ); + TQSendAndWaitForExecutionStop( + ctx->tq_ctx, + TQ_HELPER_B, + TQ_EVENT_MUTEX_B_OBTAIN | TQ_EVENT_MUTEX_B_RELEASE + ); +} + +static void AddVitalScheduler( Context *ctx, rtems_id scheduler_id ) +{ + TQSetScheduler( ctx->tq_ctx, TQ_BLOCKER_E, scheduler_id, PRIO_VERY_LOW ); + TQSendAndWaitForExecutionStop( + ctx->tq_ctx, + TQ_BLOCKER_E, + TQ_EVENT_MUTEX_A_OBTAIN | TQ_EVENT_MUTEX_A_RELEASE + ); +} + +static void ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_Prepare( + ScoreTqReqEnqueuePriorityInherit_Context *ctx, + ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler state +) +{ + switch ( state ) { + case ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_One: { + /* + * Where the system has exactly one schedulers. + */ + if ( rtems_scheduler_get_processor_maximum() != 1 ) { + ctx->Map.skip = true; + } + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_Two: { + /* + * Where the system has exactly two schedulers. + */ + if ( rtems_scheduler_get_processor_maximum() != 2 ) { + ctx->Map.skip = true; + } + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_Three: { + /* + * Where the system has exactly three schedulers. + */ + if ( rtems_scheduler_get_processor_maximum() != 3 ) { + ctx->Map.skip = true; + } + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_More: { + /* + * Where the system has at least three schedulers. + */ + if ( rtems_scheduler_get_processor_maximum() < 4 ) { + ctx->Map.skip = true; + } + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_NA: + break; + } +} + +static void ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_Prepare( + ScoreTqReqEnqueuePriorityInherit_Context *ctx, + ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible state +) +{ + switch ( state ) { + case ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_None: { + /* + * While all priority queues of the thread queue associated with eligible + * schedulers of the enqueueing thread are empty. + */ + ctx->queue_priority = PRIO_INVALID; + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_High: { + /* + * While a priority queue of the thread queue associated with an eligible + * scheduler of the enqueueing thread is non-empty, while the highest + * priority of the priority queue is higher than the priority of the + * enqueueing thread with respect to the eligible scheduler. + */ + ++ctx->tq_ctx->how_many; + ctx->queue_priority = PRIO_ULTRA_HIGH; + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_Equal: { + /* + * While a priority queue of the thread queue associated with an eligible + * scheduler of the enqueueing thread is non-empty, while the highest + * priority of the priority queue is equal to the priority of the + * enqueueing thread with respect to the eligible scheduler. + */ + ++ctx->tq_ctx->how_many; + ctx->queue_priority = PRIO_VERY_HIGH; + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_Low: { + /* + * While a priority queue of the thread queue associated with an eligible + * scheduler of the enqueueing thread is non-empty, while the highest + * priority of the priority queue is lower than the priority of the + * enqueueing thread with respect to the eligible scheduler. + */ + ++ctx->tq_ctx->how_many; + ctx->queue_priority = PRIO_HIGH; + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_NA: + break; + } +} + +static void ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_Prepare( + ScoreTqReqEnqueuePriorityInherit_Context *ctx, + ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible state +) +{ + switch ( state ) { + case ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_None: { + /* + * While each priority queue of the thread queue is associated with an + * eligible scheduler of the enqueueing thread. + */ + ctx->other_before = false; + ctx->other_after = false; + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_Only: { + /* + * While exactly one priority queue of the thread queue exists which is + * not associated with an eligible scheduler of the enqueueing thread. + */ + ++ctx->tq_ctx->how_many; + ctx->other_before = true; + ctx->other_after = false; + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_Before: { + /* + * While a priority queue of the thread queue exists which is not + * associated with an eligible scheduler of the enqueueing thread, while + * the priority queue is positioned before all priority queues which are + * associated with eligible schedulers of the enqueueing thread. + */ + ++ctx->tq_ctx->how_many; + ctx->other_before = true; + ctx->other_after = false; + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_After: { + /* + * While a priority queue of the thread queue exists which is not + * associated with an eligible scheduler of the enqueueing thread, while + * the priority queue is positioned after all priority queues which are + * associated with eligible schedulers of the enqueueing thread. + */ + ++ctx->tq_ctx->how_many; + ctx->other_before = false; + ctx->other_after = true; + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_NA: + break; + } +} + +static void ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_Prepare( + ScoreTqReqEnqueuePriorityInherit_Context *ctx, + ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner state +) +{ + switch ( state ) { + case ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_Vital: { + /* + * While at least one priority of the enqueueing thread is higher than + * the highest priority of the owner of the thread queue. + */ + ctx->vital_priority = true; + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_Dispensable: { + /* + * While all priorities of the enqueueing thread are lower than or equal + * to the highest priority of the owner of the thread queue. + */ + ctx->vital_priority = false; + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_NA: + break; + } +} + +static void ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_Prepare( + ScoreTqReqEnqueuePriorityInherit_Context *ctx, + ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner state +) +{ + switch ( state ) { + case ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_Vital: { + /* + * While at least one eligible scheduler of the enqueueing thread is not + * an eligible scheduler of the owner of the thread queue. + */ + ctx->vital_scheduler = true; + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_Dispensable: { + /* + * While all eligible schedulers of the enqueueing thread are an eligible + * scheduler of the owner of the thread queue. + */ + ctx->vital_scheduler = false; + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_NA: + break; + } +} + +static void ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_Prepare( + ScoreTqReqEnqueuePriorityInherit_Context *ctx, + ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState state +) +{ + switch ( state ) { + case ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_NotEnqueued: { + /* + * While the owner of the thread queue is not enqueued on a thread queue. + */ + ctx->owner_obtain = 0; + ctx->owner_release = 0; + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_FIFO: { + /* + * While the owner of the thread queue is enqueued on a thread queue in + * FIFO order. + */ + ctx->owner_obtain = TQ_EVENT_MUTEX_FIFO_OBTAIN; + ctx->owner_release = TQ_EVENT_MUTEX_FIFO_RELEASE; + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_Priority: { + /* + * While the owner of the thread queue is enqueued on a thread queue in + * priority order. + */ + ctx->owner_obtain = TQ_EVENT_MUTEX_NO_PROTOCOL_OBTAIN; + ctx->owner_release = TQ_EVENT_MUTEX_NO_PROTOCOL_RELEASE; + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_PriorityInherit: { + /* + * While the owner of the thread queue is enqueued on a thread queue in + * priority order with priority inheritance. + */ + ctx->owner_obtain = TQ_EVENT_MUTEX_C_OBTAIN; + ctx->owner_release = TQ_EVENT_MUTEX_C_RELEASE; + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_NA: + break; + } +} + +static void ScoreTqReqEnqueuePriorityInherit_Post_Position_Check( + ScoreTqReqEnqueuePriorityInherit_Context *ctx, + ScoreTqReqEnqueuePriorityInherit_Post_Position state +) +{ + size_t i; + + i = 0; + + /* Event receive */ + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_HELPER_A ) ); + + switch ( state ) { + case ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst: { + /* + * A priority queue associated with the scheduler which contains exactly + * the enqueueing thread shall be created as the first priority queue of + * the thread queue. + */ + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_A ) ); + T_eq_ptr( GetUnblock( ctx, &i ), NULL ); + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast: { + /* + * A priority queue associated with the scheduler which contains exactly + * the enqueueing thread shall be created as the last priority queue of + * the thread queue. + */ + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_C ) ); + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_A ) ); + T_eq_ptr( GetUnblock( ctx, &i ), NULL ); + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Post_Position_First: { + /* + * The enqueueing thread shall be enqueued in the priority queue + * associated with the scheduler. + */ + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_A ) ); + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_B ) ); + T_eq_ptr( GetUnblock( ctx, &i ), NULL ); + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Post_Position_Second: { + /* + * The enqueueing thread shall be enqueued in the priority queue + * associated with the scheduler. + */ + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_B ) ); + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_A ) ); + T_eq_ptr( GetUnblock( ctx, &i ), NULL ); + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst: { + /* + * The enqueueing thread shall be enqueued in the priority queue + * associated with the scheduler. + * + * The position of the priority queue in the thread queue shall not + * change. + */ + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_A ) ); + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_C ) ); + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_B ) ); + T_eq_ptr( GetUnblock( ctx, &i ), NULL ); + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst: { + /* + * The enqueueing thread shall be enqueued in the priority queue + * associated with the scheduler. + * + * The position of the priority queue in the thread queue shall not + * change. + */ + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_B ) ); + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_C ) ); + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_A ) ); + T_eq_ptr( GetUnblock( ctx, &i ), NULL ); + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast: { + /* + * The enqueueing thread shall be enqueued in the priority queue + * associated with the scheduler. + * + * The position of the priority queue in the thread queue shall not + * change. + */ + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_C ) ); + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_A ) ); + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_B ) ); + T_eq_ptr( GetUnblock( ctx, &i ), NULL ); + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast: { + /* + * The enqueueing thread shall be enqueued in the priority queue + * associated with the scheduler. + * + * The position of the priority queue in the thread queue shall not + * change. + */ + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_C ) ); + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_B ) ); + T_eq_ptr( GetUnblock( ctx, &i ), GetTCB( ctx, TQ_BLOCKER_A ) ); + T_eq_ptr( GetUnblock( ctx, &i ), NULL ); + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Post_Position_NA: + break; + } +} + +static void ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Check( + ScoreTqReqEnqueuePriorityInherit_Context *ctx, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority state +) +{ + switch ( state ) { + case ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise: { + /* + * Each priority of the enqueueing thread which is higher than the + * highest priority of the owner of the thread queue shall be made the + * highest priority of the owner. + */ + CheckPriorityRaise( ctx, ctx->owner_priority ); + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop: { + /* + * The priorities of the owner of the thread queue shall not change. + */ + CheckPriorityNop( ctx, ctx->owner_priority ); + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_NA: + break; + } +} + +static void ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Check( + ScoreTqReqEnqueuePriorityInherit_Context *ctx, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler state +) +{ + switch ( state ) { + case ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper: { + /* + * Each eligible scheduler of the enqueueing thread which is not an + * eligible scheduler of the owner of the thread queue shall be made a + * helping scheduler of the owner with the priority of the enqueueing + * thread. + */ + CheckSchedulerNewHelper( ctx, ctx->owner_priority ); + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop: { + /* + * The set of eligible schedulers of the owner of the thread queue shall + * not change. + */ + CheckSchedulerNop( ctx, ctx->owner_priority ); + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NA: + break; + } +} + +static void ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Check( + ScoreTqReqEnqueuePriorityInherit_Context *ctx, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority state +) +{ + switch ( state ) { + case ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise: { + /* + * Each priority of the enqueueing thread which is higher than the + * highest priority of the owner of the thread queue on which the owner + * of the thread queue is enqueued shall be made the highest priority of + * the owner. + */ + CheckPriorityRaise( ctx, ctx->owner_owner_priority ); + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop: { + /* + * The priorities of the owner of the thread queue on which the owner of + * the thread queue is enqueued shall not change. + */ + if ( ctx->owner_obtain == TQ_EVENT_MUTEX_C_OBTAIN ) { + CheckPriorityNop( ctx, ctx->owner_owner_priority ); + } else { + if ( ctx->vital_priority ) { + T_eq_u32( ctx->owner_owner_priority[ 0 ], PRIO_HIGH ); + } else { + T_eq_u32( ctx->owner_owner_priority[ 0 ], PRIO_VERY_HIGH ); + } + } + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_NA: + break; + } +} + +static void ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Check( + ScoreTqReqEnqueuePriorityInherit_Context *ctx, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler state +) +{ + switch ( state ) { + case ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper: { + /* + * Each eligible scheduler of the enqueueing thread which is not an + * eligible scheduler of the owner of the thread queue on which the owner + * of the thread queue is enqueued shall be made a helping scheduler of + * the owner with the priority of the enqueueing thread. + */ + CheckSchedulerNewHelper( ctx, ctx->owner_owner_priority ); + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop: { + /* + * The set of eligible schedulers of the owner of the thread queue on + * which the owner of the thread queue is enqueued shall not change. + */ + if ( ctx->owner_obtain == TQ_EVENT_MUTEX_C_OBTAIN ) { + CheckSchedulerNop( ctx, ctx->owner_owner_priority ); + } else { + T_eq_u32( ctx->owner_owner_priority[ 1 ], PRIO_INVALID ); + T_eq_u32( ctx->owner_owner_priority[ 2 ], PRIO_INVALID ); + T_eq_u32( ctx->owner_owner_priority[ 3 ], PRIO_INVALID ); + } + break; + } + + case ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NA: + break; + } +} + +static void ScoreTqReqEnqueuePriorityInherit_Setup( + ScoreTqReqEnqueuePriorityInherit_Context *ctx +) +{ + TQReset( ctx->tq_ctx ); + TQSetPriority( ctx->tq_ctx, TQ_BLOCKER_A, PRIO_VERY_HIGH ); + TQSetPriority( ctx->tq_ctx, TQ_HELPER_C, PRIO_HIGH ); + + #if defined( RTEMS_SMP ) + TQSetScheduler( + ctx->tq_ctx, + TQ_BLOCKER_C, + SCHEDULER_B_ID, + PRIO_ULTRA_LOW + ); + + if ( rtems_scheduler_get_processor_maximum() > 3 ) { + RemoveProcessor( SCHEDULER_C_ID, 3 ); + AddProcessor( SCHEDULER_D_ID, 3 ); + } + #endif +} + +static void ScoreTqReqEnqueuePriorityInherit_Setup_Wrap( void *arg ) +{ + ScoreTqReqEnqueuePriorityInherit_Context *ctx; + + ctx = arg; + ctx->Map.in_action_loop = false; + ScoreTqReqEnqueuePriorityInherit_Setup( ctx ); +} + +static void ScoreTqReqEnqueuePriorityInherit_Teardown( + ScoreTqReqEnqueuePriorityInherit_Context *ctx +) +{ + TQReset( ctx->tq_ctx ); + + #if defined( RTEMS_SMP ) + if ( rtems_scheduler_get_processor_maximum() > 3 ) { + RemoveProcessor( SCHEDULER_D_ID, 3 ); + AddProcessor( SCHEDULER_C_ID, 3 ); + } + #endif +} + +static void ScoreTqReqEnqueuePriorityInherit_Teardown_Wrap( void *arg ) +{ + ScoreTqReqEnqueuePriorityInherit_Context *ctx; + + ctx = arg; + ctx->Map.in_action_loop = false; + ScoreTqReqEnqueuePriorityInherit_Teardown( ctx ); +} + +static void ScoreTqReqEnqueuePriorityInherit_Prepare( + ScoreTqReqEnqueuePriorityInherit_Context *ctx +) +{ + ctx->tq_ctx->how_many = 1; +} + +static void ScoreTqReqEnqueuePriorityInherit_Action( + ScoreTqReqEnqueuePriorityInherit_Context *ctx +) +{ + TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_MUTEX_A_OBTAIN ); + TQSend( + ctx->tq_ctx, + TQ_HELPER_A, + TQ_EVENT_MUTEX_B_OBTAIN | TQ_EVENT_ENQUEUE_PREPARE + ); + + if ( ctx->owner_obtain != 0 ) { + TQSend( ctx->tq_ctx, TQ_HELPER_C, ctx->owner_obtain ); + } + + if ( ctx->other_before ) { + TQSendAndWaitForExecutionStop( + ctx->tq_ctx, + TQ_BLOCKER_C, + TQ_EVENT_ENQUEUE | TQ_EVENT_SURRENDER | TQ_EVENT_RUNNER_SYNC_2 + ); + } + + if ( ctx->queue_priority != PRIO_INVALID ) { + TQSetPriority( ctx->tq_ctx, TQ_BLOCKER_B , ctx->queue_priority ); + TQSend( + ctx->tq_ctx, + TQ_BLOCKER_B, + TQ_EVENT_ENQUEUE | TQ_EVENT_SURRENDER + ); + } + + if ( ctx->other_after ) { + TQSendAndWaitForExecutionStop( + ctx->tq_ctx, + TQ_BLOCKER_C, + TQ_EVENT_ENQUEUE | TQ_EVENT_SURRENDER | TQ_EVENT_RUNNER_SYNC_2 + ); + } + + if ( ctx->vital_priority ) { + TQSetPriority( ctx->tq_ctx, TQ_HELPER_A, PRIO_HIGH ); + TQSetPriority( ctx->tq_ctx, TQ_HELPER_C, PRIO_HIGH ); + + if ( + ctx->queue_priority == PRIO_VERY_HIGH || + ctx->queue_priority == PRIO_ULTRA_HIGH + ) { + if ( ctx->other_before || ctx->other_after ) { + AddVitalPriority( ctx, SCHEDULER_C_ID ); + AddVitalPriorityHelper( ctx, SCHEDULER_C_ID ); + + if ( ctx->vital_scheduler ) { + AddVitalScheduler( ctx, SCHEDULER_D_ID ); + } + } else { + AddVitalPriority( ctx, SCHEDULER_B_ID ); + AddVitalPriorityHelper( ctx, SCHEDULER_B_ID ); + + if ( ctx->vital_scheduler ) { + AddVitalScheduler( ctx, SCHEDULER_C_ID ); + } + } + } else { + if ( ctx->vital_scheduler ) { + if ( ctx->other_before || ctx->other_after ) { + AddVitalScheduler( ctx, SCHEDULER_C_ID ); + } else { + AddVitalScheduler( ctx, SCHEDULER_B_ID ); + } + } + } + } else { + TQSetPriority( ctx->tq_ctx, TQ_HELPER_A, PRIO_VERY_HIGH ); + TQSetPriority( ctx->tq_ctx, TQ_HELPER_C, PRIO_VERY_HIGH ); + + if ( ctx->vital_scheduler ) { + if ( ctx->other_before || ctx->other_after ) { + AddVitalScheduler( ctx, SCHEDULER_C_ID ); + } else { + AddVitalScheduler( ctx, SCHEDULER_B_ID ); + } + } + } + + if ( ctx->owner_obtain != 0 ) { + TQClearDone( ctx->tq_ctx, TQ_HELPER_A ); + TQSendAndWaitForExecutionStop( + ctx->tq_ctx, + TQ_HELPER_A, + ctx->owner_obtain | ctx->owner_release + ); + } + + TQSend( + ctx->tq_ctx, + TQ_BLOCKER_A, + TQ_EVENT_ENQUEUE | TQ_EVENT_SURRENDER | TQ_EVENT_RUNNER_SYNC + ); + + GetPriorities( ctx, TQ_HELPER_A, ctx->owner_priority ); + GetPriorities( ctx, TQ_HELPER_C, ctx->owner_owner_priority ); + + if ( ctx->owner_obtain != 0 ) { + TQSend( ctx->tq_ctx, TQ_HELPER_C, ctx->owner_release ); + TQWaitForDone( ctx->tq_ctx, TQ_HELPER_A ); + TQWaitForExecutionStop( ctx->tq_ctx, TQ_HELPER_A ); + } + + TQSchedulerRecordStart( ctx->tq_ctx ); + TQSend( ctx->tq_ctx, TQ_HELPER_A, TQ_EVENT_ENQUEUE_DONE ); + + if ( ctx->other_before || ctx->other_after ) { + TQSynchronizeRunner2(); + } else { + TQSynchronizeRunner(); + } + + TQSchedulerRecordStop( ctx->tq_ctx ); + + TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_MUTEX_A_RELEASE ); + TQMutexObtain( ctx->tq_ctx, TQ_MUTEX_A ); + TQMutexRelease( ctx->tq_ctx, TQ_MUTEX_A ); + + TQSend( ctx->tq_ctx, TQ_HELPER_A, TQ_EVENT_MUTEX_B_RELEASE ); + TQMutexObtain( ctx->tq_ctx, TQ_MUTEX_B ); + TQMutexRelease( ctx->tq_ctx, TQ_MUTEX_B ); +} + +static const ScoreTqReqEnqueuePriorityInherit_Entry +ScoreTqReqEnqueuePriorityInherit_Entries[] = { + { 1, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NA }, + { 1, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NA }, + { 1, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NA }, + { 1, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NA }, + { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_Second, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 1, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_NA, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NA }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_Second, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_Second, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_First, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_First, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_Second, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_First, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_First, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_Second, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_Second, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_First, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_Second, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_First, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper }, + { 0, 0, 0, 0, 0, 0, 0, ScoreTqReqEnqueuePriorityInherit_Post_Position_First, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper }, + { 0, 0, 0, 0, 0, 0, 0, + ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper } +}; + +static const uint8_t +ScoreTqReqEnqueuePriorityInherit_Map[] = { + 0, 0, 0, 0, 12, 12, 12, 39, 0, 0, 0, 0, 10, 10, 10, 10, 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, 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, 5, 5, 5, 5, 0, 0, 0, + 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, + 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, + 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, + 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 40, 0, 0, 0, + 0, 11, 11, 11, 11, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 22, 22, 22, 46, 12, 12, 12, 39, 23, 23, 23, 47, 10, 10, 10, 10, 3, + 3, 3, 3, 24, 24, 24, 48, 3, 3, 3, 3, 14, 14, 14, 14, 2, 2, 2, 2, 2, 2, 2, 2, + 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, + 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, + 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, + 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, + 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, + 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, + 25, 25, 49, 13, 13, 13, 40, 26, 26, 26, 50, 11, 11, 11, 11, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 27, 27, 27, 51, 3, 3, 3, 3, 15, 15, + 15, 15, 3, 3, 3, 3, 28, 28, 28, 52, 3, 3, 3, 3, 16, 16, 16, 16, 22, 22, 22, + 46, 12, 12, 12, 39, 23, 23, 23, 47, 10, 10, 10, 10, 31, 31, 31, 53, 24, 24, + 24, 48, 32, 32, 32, 54, 14, 14, 14, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, 17, 41, + 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, + 1, 1, 1, 3, 3, 3, 3, 18, 18, 18, 42, 19, 19, 19, 43, 6, 6, 6, 6, 3, 3, 3, 3, + 20, 20, 20, 44, 21, 21, 21, 45, 7, 7, 7, 7, 17, 17, 17, 41, 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, 1, 1, 1, 3, 3, + 3, 3, 18, 18, 18, 42, 19, 19, 19, 43, 6, 6, 6, 6, 3, 3, 3, 3, 20, 20, 20, 44, + 21, 21, 21, 45, 7, 7, 7, 7, 25, 25, 25, 49, 13, 13, 13, 40, 26, 26, 26, 50, + 11, 11, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 33, 33, 33, + 55, 27, 27, 27, 51, 34, 34, 34, 56, 15, 15, 15, 15, 35, 35, 35, 57, 28, 28, + 28, 52, 36, 36, 36, 58, 16, 16, 16, 16, 22, 22, 22, 46, 12, 12, 12, 39, 23, + 23, 23, 47, 10, 10, 10, 10, 31, 31, 31, 53, 24, 24, 24, 48, 32, 32, 32, 54, + 14, 14, 14, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, 17, 41, 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, 1, 1, 1, 37, 37, 37, 59, + 18, 18, 18, 42, 19, 19, 19, 43, 6, 6, 6, 6, 38, 38, 38, 60, 20, 20, 20, 44, + 21, 21, 21, 45, 7, 7, 7, 7, 17, 17, 17, 41, 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, 1, 1, 1, 37, 37, 37, 59, 18, 18, + 18, 42, 19, 19, 19, 43, 6, 6, 6, 6, 38, 38, 38, 60, 20, 20, 20, 44, 21, 21, + 21, 45, 7, 7, 7, 7, 25, 25, 25, 49, 13, 13, 13, 40, 26, 26, 26, 50, 11, 11, + 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 33, 33, 33, 55, 27, + 27, 27, 51, 34, 34, 34, 56, 15, 15, 15, 15, 35, 35, 35, 57, 28, 28, 28, 52, + 36, 36, 36, 58, 16, 16, 16, 16 +}; + +static size_t ScoreTqReqEnqueuePriorityInherit_Scope( + void *arg, + char *buf, + size_t n +) +{ + ScoreTqReqEnqueuePriorityInherit_Context *ctx; + + ctx = arg; + + if ( ctx->Map.in_action_loop ) { + return T_get_scope( + ScoreTqReqEnqueuePriorityInherit_PreDesc, + buf, + n, + ctx->Map.pcs + ); + } + + return 0; +} + +static T_fixture ScoreTqReqEnqueuePriorityInherit_Fixture = { + .setup = ScoreTqReqEnqueuePriorityInherit_Setup_Wrap, + .stop = NULL, + .teardown = ScoreTqReqEnqueuePriorityInherit_Teardown_Wrap, + .scope = ScoreTqReqEnqueuePriorityInherit_Scope, + .initial_context = &ScoreTqReqEnqueuePriorityInherit_Instance +}; + +static const uint16_t ScoreTqReqEnqueuePriorityInherit_Weights[] = { + 256, 64, 16, 8, 4, 1 +}; + +static void ScoreTqReqEnqueuePriorityInherit_Skip( + ScoreTqReqEnqueuePriorityInherit_Context *ctx, + size_t index +) +{ + switch ( index + 1 ) { + case 1: + ctx->Map.pcs[ 1 ] = ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_NA - 1; + /* Fall through */ + case 2: + ctx->Map.pcs[ 2 ] = ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_NA - 1; + /* Fall through */ + case 3: + ctx->Map.pcs[ 3 ] = ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_NA - 1; + /* Fall through */ + case 4: + ctx->Map.pcs[ 4 ] = ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_NA - 1; + /* Fall through */ + case 5: + ctx->Map.pcs[ 5 ] = ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_NA - 1; + break; + } +} + +static inline ScoreTqReqEnqueuePriorityInherit_Entry +ScoreTqReqEnqueuePriorityInherit_PopEntry( + ScoreTqReqEnqueuePriorityInherit_Context *ctx +) +{ + size_t index; + + if ( ctx->Map.skip ) { + size_t i; + + ctx->Map.skip = false; + index = 0; + + for ( i = 0; i < 6; ++i ) { + index += ScoreTqReqEnqueuePriorityInherit_Weights[ i ] * ctx->Map.pcs[ i ]; + } + } else { + index = ctx->Map.index; + } + + ctx->Map.index = index + 1; + + return ScoreTqReqEnqueuePriorityInherit_Entries[ + ScoreTqReqEnqueuePriorityInherit_Map[ index ] + ]; +} + +static void ScoreTqReqEnqueuePriorityInherit_TestVariant( + ScoreTqReqEnqueuePriorityInherit_Context *ctx +) +{ + ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_Prepare( + ctx, + ctx->Map.pcs[ 0 ] + ); + + if ( ctx->Map.skip ) { + ScoreTqReqEnqueuePriorityInherit_Skip( ctx, 0 ); + return; + } + + ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_Prepare( + ctx, + ctx->Map.pcs[ 1 ] + ); + ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_Prepare( + ctx, + ctx->Map.pcs[ 2 ] + ); + ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_Prepare( + ctx, + ctx->Map.pcs[ 3 ] + ); + ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_Prepare( + ctx, + ctx->Map.pcs[ 4 ] + ); + ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_Prepare( + ctx, + ctx->Map.pcs[ 5 ] + ); + ScoreTqReqEnqueuePriorityInherit_Action( ctx ); + ScoreTqReqEnqueuePriorityInherit_Post_Position_Check( + ctx, + ctx->Map.entry.Post_Position + ); + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Check( + ctx, + ctx->Map.entry.Post_OwnerPriority + ); + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Check( + ctx, + ctx->Map.entry.Post_OwnerScheduler + ); + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Check( + ctx, + ctx->Map.entry.Post_OwnerOwnerPriority + ); + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Check( + ctx, + ctx->Map.entry.Post_OwnerOwnerScheduler + ); +} + +static T_fixture_node ScoreTqReqEnqueuePriorityInherit_Node; + +void ScoreTqReqEnqueuePriorityInherit_Run( TQContext *tq_ctx ) +{ + ScoreTqReqEnqueuePriorityInherit_Context *ctx; + + ctx = &ScoreTqReqEnqueuePriorityInherit_Instance; + ctx->tq_ctx = tq_ctx; + + ctx = T_push_fixture( + &ScoreTqReqEnqueuePriorityInherit_Node, + &ScoreTqReqEnqueuePriorityInherit_Fixture + ); + ctx->Map.in_action_loop = true; + ctx->Map.index = 0; + ctx->Map.skip = false; + + for ( + ctx->Map.pcs[ 0 ] = ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_One; + ctx->Map.pcs[ 0 ] < ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_NA; + ++ctx->Map.pcs[ 0 ] + ) { + for ( + ctx->Map.pcs[ 1 ] = ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_None; + ctx->Map.pcs[ 1 ] < ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_NA; + ++ctx->Map.pcs[ 1 ] + ) { + for ( + ctx->Map.pcs[ 2 ] = ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_None; + ctx->Map.pcs[ 2 ] < ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_NA; + ++ctx->Map.pcs[ 2 ] + ) { + for ( + ctx->Map.pcs[ 3 ] = ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_Vital; + ctx->Map.pcs[ 3 ] < ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_NA; + ++ctx->Map.pcs[ 3 ] + ) { + for ( + ctx->Map.pcs[ 4 ] = ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_Vital; + ctx->Map.pcs[ 4 ] < ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_NA; + ++ctx->Map.pcs[ 4 ] + ) { + for ( + ctx->Map.pcs[ 5 ] = ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_NotEnqueued; + ctx->Map.pcs[ 5 ] < ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_NA; + ++ctx->Map.pcs[ 5 ] + ) { + ctx->Map.entry = ScoreTqReqEnqueuePriorityInherit_PopEntry( + ctx + ); + + if ( ctx->Map.entry.Skip ) { + continue; + } + + ScoreTqReqEnqueuePriorityInherit_Prepare( ctx ); + ScoreTqReqEnqueuePriorityInherit_TestVariant( ctx ); + } + } + } + } + } + } + + T_pop_fixture(); +} + +/** @} */ diff --git a/testsuites/validation/tr-tq-enqueue-priority-inherit.h b/testsuites/validation/tr-tq-enqueue-priority-inherit.h new file mode 100644 index 0000000000..526766a981 --- /dev/null +++ b/testsuites/validation/tr-tq-enqueue-priority-inherit.h @@ -0,0 +1,159 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup RTEMSTestCaseScoreTqReqEnqueuePriorityInherit + */ + +/* + * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifndef _TR_TQ_ENQUEUE_PRIORITY_INHERIT_H +#define _TR_TQ_ENQUEUE_PRIORITY_INHERIT_H + +#include "tx-thread-queue.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @addtogroup RTEMSTestCaseScoreTqReqEnqueuePriorityInherit + * + * @{ + */ + +typedef enum { + ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_One, + ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_Two, + ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_Three, + ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_More, + ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler_NA +} ScoreTqReqEnqueuePriorityInherit_Pre_Scheduler; + +typedef enum { + ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_None, + ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_High, + ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_Equal, + ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_Low, + ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible_NA +} ScoreTqReqEnqueuePriorityInherit_Pre_QueueEligible; + +typedef enum { + ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_None, + ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_Only, + ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_Before, + ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_After, + ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible_NA +} ScoreTqReqEnqueuePriorityInherit_Pre_QueueIneligible; + +typedef enum { + ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_Vital, + ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_Dispensable, + ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner_NA +} ScoreTqReqEnqueuePriorityInherit_Pre_PriorityForOwner; + +typedef enum { + ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_Vital, + ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_Dispensable, + ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner_NA +} ScoreTqReqEnqueuePriorityInherit_Pre_SchedulerForOwner; + +typedef enum { + ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_NotEnqueued, + ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_FIFO, + ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_Priority, + ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_PriorityInherit, + ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState_NA +} ScoreTqReqEnqueuePriorityInherit_Pre_OwnerState; + +typedef enum { + ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialFirst, + ScoreTqReqEnqueuePriorityInherit_Post_Position_InitialLast, + ScoreTqReqEnqueuePriorityInherit_Post_Position_First, + ScoreTqReqEnqueuePriorityInherit_Post_Position_Second, + ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstFirst, + ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondFirst, + ScoreTqReqEnqueuePriorityInherit_Post_Position_FirstLast, + ScoreTqReqEnqueuePriorityInherit_Post_Position_SecondLast, + ScoreTqReqEnqueuePriorityInherit_Post_Position_NA +} ScoreTqReqEnqueuePriorityInherit_Post_Position; + +typedef enum { + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority_NA +} ScoreTqReqEnqueuePriorityInherit_Post_OwnerPriority; + +typedef enum { + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler_NA +} ScoreTqReqEnqueuePriorityInherit_Post_OwnerScheduler; + +typedef enum { + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Raise, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority_NA +} ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerPriority; + +typedef enum { + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NewHelper, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_Nop, + ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler_NA +} ScoreTqReqEnqueuePriorityInherit_Post_OwnerOwnerScheduler; + +/** + * @brief Runs the parameterized test case. + * + * @param[in,out] tq_ctx is the thread queue context. + */ +void ScoreTqReqEnqueuePriorityInherit_Run( TQContext *tq_ctx ); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* _TR_TQ_ENQUEUE_PRIORITY_INHERIT_H */ -- cgit v1.2.3