forked from Imagelibrary/rtems
The test source code is generated from specification items by the "./spec2modules.py" script contained in the git://git.rtems.org/rtems-central.git Git repository. Please read the "How-To" section in the "Software Requirements Engineering" chapter of the RTEMS Software Engineering manual to get more information about the process. Update #3716.
2155 lines
76 KiB
C
2155 lines
76 KiB
C
/* SPDX-License-Identifier: BSD-2-Clause */
|
|
|
|
/**
|
|
* @file
|
|
*
|
|
* @ingroup RTEMSTestCaseScoreTqReqTimeoutPriorityInherit
|
|
*/
|
|
|
|
/*
|
|
* 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 <rtems/score/smpimpl.h>
|
|
#include <rtems/score/threadimpl.h>
|
|
|
|
#include "tr-tq-timeout-priority-inherit.h"
|
|
#include "tx-support.h"
|
|
|
|
#include <rtems/test.h>
|
|
|
|
/**
|
|
* @defgroup RTEMSTestCaseScoreTqReqTimeoutPriorityInherit \
|
|
* spec:/score/tq/req/timeout-priority-inherit
|
|
*
|
|
* @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0
|
|
*
|
|
* @{
|
|
*/
|
|
|
|
typedef struct {
|
|
uint32_t Skip : 1;
|
|
uint32_t Pre_HomeScheduler_NA : 1;
|
|
uint32_t Pre_EligibleScheduler_NA : 1;
|
|
uint32_t Pre_Queue_NA : 1;
|
|
uint32_t Pre_OwnerPriority_NA : 1;
|
|
uint32_t Pre_OwnerState_NA : 1;
|
|
uint32_t Pre_OwnerQueue_NA : 1;
|
|
uint32_t Pre_OwnerOwnerPriority_NA : 1;
|
|
uint32_t Pre_WaitState_NA : 1;
|
|
uint32_t Post_Status : 2;
|
|
uint32_t Post_Unblock : 2;
|
|
uint32_t Post_OwnerPriority : 2;
|
|
uint32_t Post_OwnerOwnerPriority : 2;
|
|
} ScoreTqReqTimeoutPriorityInherit_Entry;
|
|
|
|
/**
|
|
* @brief Test context for spec:/score/tq/req/timeout-priority-inherit test
|
|
* case.
|
|
*/
|
|
typedef struct {
|
|
/**
|
|
* @brief This member contains the call within ISR request.
|
|
*/
|
|
CallWithinISRRequest request;;
|
|
|
|
/**
|
|
* @brief This member specifies the scheduler of the thread.
|
|
*/
|
|
rtems_id scheduler_id;
|
|
|
|
/**
|
|
* @brief If this member is true, then the thread shall have at least two
|
|
* eligible scheduler.
|
|
*/
|
|
bool other_scheduler;
|
|
|
|
/**
|
|
* @brief This member specifies the queue node kind.
|
|
*/
|
|
TQNodeKind queue_node;
|
|
|
|
/**
|
|
* @brief This member specifies the owner priority node kind.
|
|
*/
|
|
TQNodeKind owner_node;
|
|
|
|
/**
|
|
* @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 specifies the owner queue node kind.
|
|
*/
|
|
TQNodeKind owner_queue_node;
|
|
|
|
/**
|
|
* @brief This member specifies the kind of the priority node of the owner of
|
|
* the thread queue on which the owner of the thread queue is blocked.
|
|
*/
|
|
TQNodeKind owner_owner_node;
|
|
|
|
/**
|
|
* @brief This member specifies the wait state.
|
|
*/
|
|
TQWaitState wait_state;
|
|
|
|
/**
|
|
* @brief This member contains the thread queue priority.
|
|
*/
|
|
rtems_task_priority queue_priority;
|
|
|
|
/**
|
|
* @brief This member contains the owner priority.
|
|
*/
|
|
rtems_task_priority owner_priority;
|
|
|
|
/**
|
|
* @brief This member contains the owner priority after the timeout or
|
|
* surrender.
|
|
*/
|
|
rtems_task_priority owner_priority_after;
|
|
|
|
/**
|
|
* @brief This member contains the priority of the thread queue on which the
|
|
* owner is enqueued.
|
|
*/
|
|
rtems_task_priority owner_queue_priority;
|
|
|
|
/**
|
|
* @brief This member contains the priority of the owner of the thread queue
|
|
* on which the owner is enqueued.
|
|
*/
|
|
rtems_task_priority owner_owner_priority;
|
|
|
|
/**
|
|
* @brief This member contains the priority after the timeout or surrender of
|
|
* the owner of the thread queue on which the owner is enqueued.
|
|
*/
|
|
rtems_task_priority owner_owner_priority_after;
|
|
|
|
/**
|
|
* @brief If this member is true, then the queue helper shall surrender the
|
|
* thread queue.
|
|
*/
|
|
bool queue_helper_surrender;
|
|
|
|
/**
|
|
* @brief If this member is true, then the owner helper shall release mutex
|
|
* A.
|
|
*/
|
|
bool owner_helper_release;
|
|
|
|
/**
|
|
* @brief If this member is true, then the owner queue helper shall release
|
|
* the mutex on which the owner is blocked.
|
|
*/
|
|
bool owner_queue_helper_release;
|
|
|
|
/**
|
|
* @brief If this member is true, then helper of the owner of the mutex which
|
|
* the owner blocked shall release mutex B.
|
|
*/
|
|
bool owner_owner_helper_release;
|
|
|
|
/**
|
|
* @brief This member contains a copy of the corresponding
|
|
* ScoreTqReqTimeoutPriorityInherit_Run() parameter.
|
|
*/
|
|
TQContext *tq_ctx;
|
|
|
|
struct {
|
|
/**
|
|
* @brief This member defines the pre-condition indices for the next
|
|
* action.
|
|
*/
|
|
size_t pci[ 8 ];
|
|
|
|
/**
|
|
* @brief This member defines the pre-condition states for the next action.
|
|
*/
|
|
size_t pcs[ 8 ];
|
|
|
|
/**
|
|
* @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.
|
|
*/
|
|
ScoreTqReqTimeoutPriorityInherit_Entry entry;
|
|
|
|
/**
|
|
* @brief If this member is true, then the current transition variant
|
|
* should be skipped.
|
|
*/
|
|
bool skip;
|
|
} Map;
|
|
} ScoreTqReqTimeoutPriorityInherit_Context;
|
|
|
|
static ScoreTqReqTimeoutPriorityInherit_Context
|
|
ScoreTqReqTimeoutPriorityInherit_Instance;
|
|
|
|
static const char * const ScoreTqReqTimeoutPriorityInherit_PreDesc_HomeScheduler[] = {
|
|
"Home",
|
|
"Helping",
|
|
"NA"
|
|
};
|
|
|
|
static const char * const ScoreTqReqTimeoutPriorityInherit_PreDesc_EligibleScheduler[] = {
|
|
"One",
|
|
"More",
|
|
"NA"
|
|
};
|
|
|
|
static const char * const ScoreTqReqTimeoutPriorityInherit_PreDesc_Queue[] = {
|
|
"Only",
|
|
"Vital",
|
|
"Dispensable",
|
|
"NA"
|
|
};
|
|
|
|
static const char * const ScoreTqReqTimeoutPriorityInherit_PreDesc_OwnerPriority[] = {
|
|
"Only",
|
|
"Vital",
|
|
"Dispensable",
|
|
"NA"
|
|
};
|
|
|
|
static const char * const ScoreTqReqTimeoutPriorityInherit_PreDesc_OwnerState[] = {
|
|
"NotEnqueued",
|
|
"FIFO",
|
|
"Priority",
|
|
"PriorityInherit",
|
|
"NA"
|
|
};
|
|
|
|
static const char * const ScoreTqReqTimeoutPriorityInherit_PreDesc_OwnerQueue[] = {
|
|
"Only",
|
|
"Vital",
|
|
"Dispensable",
|
|
"NA"
|
|
};
|
|
|
|
static const char * const ScoreTqReqTimeoutPriorityInherit_PreDesc_OwnerOwnerPriority[] = {
|
|
"Only",
|
|
"Vital",
|
|
"Dispensable",
|
|
"NA"
|
|
};
|
|
|
|
static const char * const ScoreTqReqTimeoutPriorityInherit_PreDesc_WaitState[] = {
|
|
"Blocked",
|
|
"IntendToBlock",
|
|
"ReadyAgain",
|
|
"NA"
|
|
};
|
|
|
|
static const char * const * const ScoreTqReqTimeoutPriorityInherit_PreDesc[] = {
|
|
ScoreTqReqTimeoutPriorityInherit_PreDesc_HomeScheduler,
|
|
ScoreTqReqTimeoutPriorityInherit_PreDesc_EligibleScheduler,
|
|
ScoreTqReqTimeoutPriorityInherit_PreDesc_Queue,
|
|
ScoreTqReqTimeoutPriorityInherit_PreDesc_OwnerPriority,
|
|
ScoreTqReqTimeoutPriorityInherit_PreDesc_OwnerState,
|
|
ScoreTqReqTimeoutPriorityInherit_PreDesc_OwnerQueue,
|
|
ScoreTqReqTimeoutPriorityInherit_PreDesc_OwnerOwnerPriority,
|
|
ScoreTqReqTimeoutPriorityInherit_PreDesc_WaitState,
|
|
NULL
|
|
};
|
|
|
|
typedef ScoreTqReqTimeoutPriorityInherit_Context Context;
|
|
|
|
#define THREAD TQ_BLOCKER_A
|
|
|
|
#define THREAD_HELPER_A TQ_HELPER_B
|
|
|
|
#define THREAD_HELPER_B TQ_HELPER_C
|
|
|
|
#define QUEUE_HELPER TQ_BLOCKER_B
|
|
|
|
#define OWNER TQ_BLOCKER_C
|
|
|
|
#define OWNER_HELPER TQ_BLOCKER_D
|
|
|
|
#define OWNER_QUEUE_HELPER TQ_BLOCKER_E
|
|
|
|
#define OWNER_OWNER TQ_WORKER_F
|
|
|
|
#define OWNER_OWNER_HELPER TQ_HELPER_A
|
|
|
|
static bool GetUnblock( const Context *ctx, size_t *index )
|
|
{
|
|
while ( true ) {
|
|
const T_scheduler_event *event;
|
|
|
|
event = TQGetNextUnblock( ctx->tq_ctx, index );
|
|
|
|
if ( event == &T_scheduler_event_null ) {
|
|
return false;
|
|
}
|
|
|
|
if ( event->thread == ctx->tq_ctx->worker_tcb[ THREAD ] ) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
static void Tick( void *arg )
|
|
{
|
|
Context *ctx;
|
|
|
|
ctx = arg;
|
|
TQSchedulerRecordStart( ctx->tq_ctx );
|
|
FinalClockTick();
|
|
TQSchedulerRecordStop( ctx->tq_ctx );
|
|
}
|
|
|
|
static void SchedulerBlock(
|
|
void *arg,
|
|
const T_scheduler_event *event,
|
|
T_scheduler_when when
|
|
)
|
|
{
|
|
Context *ctx;
|
|
|
|
ctx = arg;
|
|
|
|
if (
|
|
when == T_SCHEDULER_BEFORE &&
|
|
event->operation == T_SCHEDULER_BLOCK &&
|
|
event->thread == ctx->tq_ctx->worker_tcb[ THREAD ]
|
|
) {
|
|
T_scheduler_set_event_handler( NULL, NULL );
|
|
ctx->request.handler = Tick;
|
|
CallWithinISRSubmit( &ctx->request );
|
|
}
|
|
}
|
|
|
|
static void ThreadTimeout( void *arg )
|
|
{
|
|
Context *ctx;
|
|
|
|
ctx = arg;
|
|
TQSchedulerRecordStart( ctx->tq_ctx );
|
|
_Thread_Timeout(
|
|
&ctx->tq_ctx->worker_tcb[ THREAD ]->Timer.Watchdog
|
|
);
|
|
TQSchedulerRecordStop( ctx->tq_ctx );
|
|
}
|
|
|
|
static void SchedulerUnblock(
|
|
void *arg,
|
|
const T_scheduler_event *event,
|
|
T_scheduler_when when
|
|
)
|
|
{
|
|
Context *ctx;
|
|
|
|
ctx = arg;
|
|
|
|
if (
|
|
when == T_SCHEDULER_BEFORE &&
|
|
event->operation == T_SCHEDULER_UNBLOCK &&
|
|
event->thread == ctx->tq_ctx->worker_tcb[ THREAD ]
|
|
) {
|
|
T_scheduler_set_event_handler( NULL, NULL );
|
|
|
|
if ( ctx->scheduler_id == SCHEDULER_B_ID ) {
|
|
#if defined(RTEMS_SMP)
|
|
_SMP_Unicast_action( 1, ThreadTimeout, ctx );
|
|
#else
|
|
T_unreachable();
|
|
#endif
|
|
} else {
|
|
ctx->request.handler = ThreadTimeout;
|
|
CallWithinISRSubmit( &ctx->request );
|
|
}
|
|
}
|
|
}
|
|
|
|
static void GetPriorities( Context *ctx )
|
|
{
|
|
ctx->owner_priority_after = GetPriorityByScheduler(
|
|
ctx->tq_ctx->worker_id[ OWNER ],
|
|
ctx->scheduler_id
|
|
);
|
|
ctx->owner_owner_priority_after = GetPriorityByScheduler(
|
|
ctx->tq_ctx->worker_id[ OWNER_OWNER ],
|
|
ctx->scheduler_id
|
|
);
|
|
}
|
|
|
|
static void PrepareThread( const Context *ctx )
|
|
{
|
|
if ( ctx->other_scheduler ) {
|
|
rtems_id other_scheduler_id;
|
|
|
|
if ( ctx->scheduler_id == SCHEDULER_A_ID ) {
|
|
other_scheduler_id = SCHEDULER_B_ID;
|
|
} else {
|
|
other_scheduler_id = SCHEDULER_B_ID;
|
|
}
|
|
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
THREAD,
|
|
TQ_EVENT_MUTEX_D_OBTAIN
|
|
);
|
|
|
|
TQSetScheduler(
|
|
ctx->tq_ctx,
|
|
THREAD_HELPER_A,
|
|
other_scheduler_id,
|
|
PRIO_NEARLY_IDLE - 1
|
|
);
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
THREAD_HELPER_A,
|
|
TQ_EVENT_MUTEX_D_OBTAIN
|
|
);
|
|
|
|
if ( rtems_scheduler_get_processor_maximum() >= 3 ) {
|
|
TQSetScheduler(
|
|
ctx->tq_ctx,
|
|
THREAD_HELPER_B,
|
|
SCHEDULER_C_ID,
|
|
PRIO_NORMAL
|
|
);
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
THREAD_HELPER_B,
|
|
TQ_EVENT_MUTEX_D_OBTAIN
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
static rtems_task_priority PrepareQueue(
|
|
Context *ctx,
|
|
rtems_task_priority priority
|
|
)
|
|
{
|
|
switch ( ctx->queue_node ) {
|
|
case TQ_NODE_ONLY:
|
|
ctx->queue_helper_surrender = false;
|
|
break;
|
|
case TQ_NODE_VITAL:
|
|
ctx->queue_helper_surrender = true;
|
|
TQSetScheduler(
|
|
ctx->tq_ctx,
|
|
QUEUE_HELPER,
|
|
ctx->scheduler_id,
|
|
priority + 1
|
|
);
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
QUEUE_HELPER,
|
|
TQ_EVENT_ENQUEUE
|
|
);
|
|
break;
|
|
case TQ_NODE_DISPENSABLE:
|
|
ctx->queue_helper_surrender = true;
|
|
--priority;
|
|
TQSetScheduler(
|
|
ctx->tq_ctx,
|
|
QUEUE_HELPER,
|
|
ctx->scheduler_id,
|
|
priority
|
|
);
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
QUEUE_HELPER,
|
|
TQ_EVENT_ENQUEUE
|
|
);
|
|
break;
|
|
}
|
|
|
|
ctx->queue_priority = priority;
|
|
|
|
return priority;
|
|
}
|
|
|
|
static rtems_task_priority PrepareOwner(
|
|
Context *ctx,
|
|
rtems_task_priority priority
|
|
)
|
|
{
|
|
switch ( ctx->owner_node ) {
|
|
case TQ_NODE_ONLY:
|
|
ctx->owner_helper_release = false;
|
|
TQSetPriority( ctx->tq_ctx, OWNER, PRIO_FLEXIBLE );
|
|
break;
|
|
case TQ_NODE_VITAL:
|
|
if ( ctx->scheduler_id == SCHEDULER_A_ID ) {
|
|
ctx->owner_helper_release = false;
|
|
TQSetPriority( ctx->tq_ctx, OWNER, priority + 1 );
|
|
} else {
|
|
ctx->owner_helper_release = true;
|
|
TQSetPriority( ctx->tq_ctx, OWNER, PRIO_FLEXIBLE );
|
|
TQSetScheduler(
|
|
ctx->tq_ctx,
|
|
OWNER_HELPER,
|
|
ctx->scheduler_id,
|
|
priority + 1
|
|
);
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
OWNER_HELPER,
|
|
TQ_EVENT_MUTEX_A_OBTAIN
|
|
);
|
|
}
|
|
break;
|
|
case TQ_NODE_DISPENSABLE:
|
|
--priority;
|
|
|
|
if ( ctx->scheduler_id == SCHEDULER_A_ID ) {
|
|
ctx->owner_helper_release = false;
|
|
TQSetPriority( ctx->tq_ctx, OWNER, priority );
|
|
} else {
|
|
ctx->owner_helper_release = true;
|
|
TQSetPriority( ctx->tq_ctx, OWNER, PRIO_FLEXIBLE );
|
|
TQSetScheduler(
|
|
ctx->tq_ctx,
|
|
OWNER_HELPER,
|
|
ctx->scheduler_id,
|
|
priority
|
|
);
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
OWNER_HELPER,
|
|
TQ_EVENT_MUTEX_A_OBTAIN
|
|
);
|
|
}
|
|
break;
|
|
}
|
|
|
|
ctx->owner_priority = priority;
|
|
|
|
return priority;
|
|
}
|
|
|
|
static rtems_task_priority PrepareOwnerQueue(
|
|
Context *ctx,
|
|
rtems_task_priority priority
|
|
)
|
|
{
|
|
if ( ctx->owner_obtain != 0 ) {
|
|
switch ( ctx->owner_queue_node ) {
|
|
case TQ_NODE_ONLY:
|
|
ctx->owner_queue_helper_release = false;
|
|
break;
|
|
case TQ_NODE_VITAL:
|
|
ctx->owner_queue_helper_release = true;
|
|
TQSetScheduler(
|
|
ctx->tq_ctx,
|
|
OWNER_QUEUE_HELPER,
|
|
ctx->scheduler_id,
|
|
priority + 1
|
|
);
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
OWNER_QUEUE_HELPER,
|
|
ctx->owner_obtain
|
|
);
|
|
break;
|
|
case TQ_NODE_DISPENSABLE:
|
|
ctx->owner_queue_helper_release = true;
|
|
--priority;
|
|
TQSetScheduler(
|
|
ctx->tq_ctx,
|
|
OWNER_QUEUE_HELPER,
|
|
ctx->scheduler_id,
|
|
priority
|
|
);
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
OWNER_QUEUE_HELPER,
|
|
ctx->owner_obtain
|
|
);
|
|
break;
|
|
}
|
|
|
|
ctx->owner_queue_priority = priority;
|
|
} else {
|
|
ctx->owner_queue_helper_release = false;
|
|
ctx->owner_queue_priority = PRIO_INVALID;
|
|
}
|
|
|
|
return priority;
|
|
}
|
|
|
|
static void PrepareOwnerOwner( Context *ctx, rtems_task_priority priority )
|
|
{
|
|
if ( ctx->owner_obtain != 0 ) {
|
|
switch ( ctx->owner_owner_node ) {
|
|
case TQ_NODE_ONLY:
|
|
ctx->owner_owner_helper_release = false;
|
|
TQSetPriority( ctx->tq_ctx, OWNER_OWNER, PRIO_FLEXIBLE );
|
|
break;
|
|
case TQ_NODE_VITAL:
|
|
if ( ctx->scheduler_id == SCHEDULER_A_ID ) {
|
|
ctx->owner_owner_helper_release = false;
|
|
TQSetPriority( ctx->tq_ctx, OWNER_OWNER, priority + 1 );
|
|
} else {
|
|
ctx->owner_owner_helper_release = true;
|
|
TQSetPriority( ctx->tq_ctx, OWNER_OWNER, PRIO_FLEXIBLE );
|
|
TQSetScheduler(
|
|
ctx->tq_ctx,
|
|
OWNER_OWNER_HELPER,
|
|
ctx->scheduler_id,
|
|
priority + 1
|
|
);
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
OWNER_OWNER_HELPER,
|
|
TQ_EVENT_MUTEX_B_OBTAIN
|
|
);
|
|
}
|
|
break;
|
|
case TQ_NODE_DISPENSABLE:
|
|
--priority;
|
|
|
|
if ( ctx->scheduler_id == SCHEDULER_A_ID ) {
|
|
ctx->owner_owner_helper_release = false;
|
|
TQSetPriority( ctx->tq_ctx, OWNER_OWNER, priority );
|
|
} else {
|
|
ctx->owner_owner_helper_release = true;
|
|
TQSetPriority( ctx->tq_ctx, OWNER_OWNER, PRIO_FLEXIBLE );
|
|
TQSetScheduler(
|
|
ctx->tq_ctx,
|
|
OWNER_OWNER_HELPER,
|
|
ctx->scheduler_id,
|
|
priority
|
|
);
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
OWNER_OWNER_HELPER,
|
|
TQ_EVENT_MUTEX_B_OBTAIN
|
|
);
|
|
}
|
|
break;
|
|
}
|
|
|
|
ctx->owner_owner_priority = priority;
|
|
} else {
|
|
ctx->owner_owner_helper_release = false;
|
|
ctx->owner_owner_priority = PRIO_INVALID;
|
|
}
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Pre_HomeScheduler_Prepare(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx,
|
|
ScoreTqReqTimeoutPriorityInherit_Pre_HomeScheduler state
|
|
)
|
|
{
|
|
switch ( state ) {
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_HomeScheduler_Home: {
|
|
/*
|
|
* While the home scheduler of the thread is the home scheduler of the
|
|
* thread queue owner.
|
|
*/
|
|
ctx->scheduler_id = SCHEDULER_A_ID;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_HomeScheduler_Helping: {
|
|
/*
|
|
* While the home scheduler of the thread is a helping scheduler of the
|
|
* thread queue owner.
|
|
*/
|
|
ctx->scheduler_id = SCHEDULER_B_ID;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_HomeScheduler_NA:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Pre_EligibleScheduler_Prepare(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx,
|
|
ScoreTqReqTimeoutPriorityInherit_Pre_EligibleScheduler state
|
|
)
|
|
{
|
|
switch ( state ) {
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_EligibleScheduler_One: {
|
|
/*
|
|
* While the thread has exactly one eligible scheduler.
|
|
*/
|
|
ctx->other_scheduler = false;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_EligibleScheduler_More: {
|
|
/*
|
|
* While the thread has at least two eligible scheduler.
|
|
*/
|
|
ctx->other_scheduler = true;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_EligibleScheduler_NA:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Pre_Queue_Prepare(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx,
|
|
ScoreTqReqTimeoutPriorityInherit_Pre_Queue state
|
|
)
|
|
{
|
|
switch ( state ) {
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_Queue_Only: {
|
|
/*
|
|
* While the priority node of the thread is the only priority node in the
|
|
* priority queue associated with the scheduler of the thread queue.
|
|
*/
|
|
ctx->queue_node = TQ_NODE_ONLY;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_Queue_Vital: {
|
|
/*
|
|
* While the priority node of the thread is not the only priority node in
|
|
* the priority queue associated with the scheduler of the thread queue,
|
|
* while the priority node of the thread is the highest priority node in
|
|
* the priority queue.
|
|
*/
|
|
ctx->queue_node = TQ_NODE_VITAL;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_Queue_Dispensable: {
|
|
/*
|
|
* While the priority node of the thread is not the only priority node in
|
|
* the priority queue associated with the scheduler of the thread queue,
|
|
* while the priority node of the thread is not the highest priority node
|
|
* in the priority queue.
|
|
*/
|
|
ctx->queue_node = TQ_NODE_DISPENSABLE;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_Queue_NA:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Pre_OwnerPriority_Prepare(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx,
|
|
ScoreTqReqTimeoutPriorityInherit_Pre_OwnerPriority state
|
|
)
|
|
{
|
|
switch ( state ) {
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_OwnerPriority_Only: {
|
|
/*
|
|
* While the priority node of the thread queue is the only priority node
|
|
* associated with the scheduler available to the owner.
|
|
*/
|
|
ctx->owner_node = TQ_NODE_ONLY;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_OwnerPriority_Vital: {
|
|
/*
|
|
* While the priority node of the thread queue is not the only priority
|
|
* node associated with the scheduler available to the owner, while the
|
|
* priority node of the thread queue is the highest priority node
|
|
* available to the owner.
|
|
*/
|
|
ctx->owner_node = TQ_NODE_VITAL;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_OwnerPriority_Dispensable: {
|
|
/*
|
|
* While the priority node of the thread queue is not the only priority
|
|
* node associated with the scheduler available to the owner, while the
|
|
* priority node of the thread queue is not the highest priority node
|
|
* available to the owner.
|
|
*/
|
|
ctx->owner_node = TQ_NODE_DISPENSABLE;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_OwnerPriority_NA:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Pre_OwnerState_Prepare(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx,
|
|
ScoreTqReqTimeoutPriorityInherit_Pre_OwnerState state
|
|
)
|
|
{
|
|
switch ( state ) {
|
|
case ScoreTqReqTimeoutPriorityInherit_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 ScoreTqReqTimeoutPriorityInherit_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 ScoreTqReqTimeoutPriorityInherit_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 ScoreTqReqTimeoutPriorityInherit_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 ScoreTqReqTimeoutPriorityInherit_Pre_OwnerState_NA:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Pre_OwnerQueue_Prepare(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx,
|
|
ScoreTqReqTimeoutPriorityInherit_Pre_OwnerQueue state
|
|
)
|
|
{
|
|
switch ( state ) {
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_OwnerQueue_Only: {
|
|
/*
|
|
* While the priority node of the owner is the only priority node in the
|
|
* priority queue associated with the scheduler of the thread queue on
|
|
* which the owner is enqueued.
|
|
*/
|
|
ctx->owner_queue_node = TQ_NODE_ONLY;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_OwnerQueue_Vital: {
|
|
/*
|
|
* While the priority node of the owner is not the only priority node in
|
|
* the priority queue associated with the scheduler of the thread queue
|
|
* on which the owner is enqueued, while the priority node of the owner
|
|
* is the highest priority node in the priority queue.
|
|
*/
|
|
ctx->owner_queue_node = TQ_NODE_VITAL;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_OwnerQueue_Dispensable: {
|
|
/*
|
|
* While the priority node of the owner is not the only priority node in
|
|
* the priority queue associated with the scheduler of the thread queue
|
|
* on which the owner is enqueued, while the priority node of the owner
|
|
* is not the highest priority node in the priority queue.
|
|
*/
|
|
ctx->owner_queue_node = TQ_NODE_DISPENSABLE;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_OwnerQueue_NA:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Pre_OwnerOwnerPriority_Prepare(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx,
|
|
ScoreTqReqTimeoutPriorityInherit_Pre_OwnerOwnerPriority state
|
|
)
|
|
{
|
|
switch ( state ) {
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_OwnerOwnerPriority_Only: {
|
|
/*
|
|
* While the priority node of the thread queue on which the owner is
|
|
* enqueued is the only priority node associated with the scheduler
|
|
* available to the owner of the thread queue on which the owner is
|
|
* enqueued.
|
|
*/
|
|
ctx->owner_owner_node = TQ_NODE_ONLY;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_OwnerOwnerPriority_Vital: {
|
|
/*
|
|
* While the priority node of the thread queue on which the owner is
|
|
* enqueued is not the only priority node associated with the scheduler
|
|
* available to the owner of the thread queue on which the owner is
|
|
* enqueued, while the priority node of the thread queue on which the
|
|
* owner is enqueued is the highest priority node available to the owner
|
|
* of the thread queue on which the owner is enqueued.
|
|
*/
|
|
ctx->owner_owner_node = TQ_NODE_VITAL;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_OwnerOwnerPriority_Dispensable: {
|
|
/*
|
|
* While the priority node of the thread queue on which the owner is
|
|
* enqueued is not the only priority node associated with the scheduler
|
|
* available to the owner of the thread queue on which the owner is
|
|
* enqueued, while the priority node of the thread queue is on which the
|
|
* owner is enqueued not the highest priority node available to the owner
|
|
* of the thread queue on which the owner is enqueued.
|
|
*/
|
|
ctx->owner_owner_node = TQ_NODE_DISPENSABLE;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_OwnerOwnerPriority_NA:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Pre_WaitState_Prepare(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx,
|
|
ScoreTqReqTimeoutPriorityInherit_Pre_WaitState state
|
|
)
|
|
{
|
|
switch ( state ) {
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_WaitState_Blocked: {
|
|
/*
|
|
* While the thread is in the blocked wait state.
|
|
*/
|
|
ctx->wait_state = TQ_WAIT_STATE_BLOCKED;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_WaitState_IntendToBlock: {
|
|
/*
|
|
* While the thread is in the intend to block wait state.
|
|
*/
|
|
ctx->wait_state = TQ_WAIT_STATE_INTEND_TO_BLOCK;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_WaitState_ReadyAgain: {
|
|
/*
|
|
* While the thread is in the ready again wait state.
|
|
*/
|
|
ctx->wait_state = TQ_WAIT_STATE_READY_AGAIN;
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Pre_WaitState_NA:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Post_Status_Check(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status state
|
|
)
|
|
{
|
|
switch ( state ) {
|
|
case ScoreTqReqTimeoutPriorityInherit_Post_Status_Ok: {
|
|
/*
|
|
* The return status of the directive call shall be derived from
|
|
* STATUS_SUCCESSFUL.
|
|
*/
|
|
T_eq_int(
|
|
ctx->tq_ctx->status[ THREAD ],
|
|
TQConvertStatus( ctx->tq_ctx, STATUS_SUCCESSFUL )
|
|
);
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout: {
|
|
/*
|
|
* The return status of the directive call shall be derived from
|
|
* STATUS_TIMEOUT.
|
|
*/
|
|
T_eq_int(
|
|
ctx->tq_ctx->status[ THREAD ],
|
|
TQConvertStatus( ctx->tq_ctx, STATUS_TIMEOUT )
|
|
);
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Post_Status_NA:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Check(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock state
|
|
)
|
|
{
|
|
size_t i;
|
|
|
|
i = 0;
|
|
|
|
switch ( state ) {
|
|
case ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes: {
|
|
/*
|
|
* The thread shall be unblocked by the timeout operation.
|
|
*/
|
|
T_true( GetUnblock( ctx, &i ) );
|
|
T_false( GetUnblock( ctx, &i ) );
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No: {
|
|
/*
|
|
* The thread shall not be unblocked by the timeout operation.
|
|
*/
|
|
T_false( GetUnblock( ctx, &i ) );
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Check(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority state
|
|
)
|
|
{
|
|
switch ( state ) {
|
|
case ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Nop: {
|
|
/*
|
|
* The priority of the owner with respect to the scheduler shall not
|
|
* change by the timeout operation.
|
|
*/
|
|
T_eq_u32( ctx->owner_priority_after, ctx->owner_priority );
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower: {
|
|
/*
|
|
* The priority of the owner with respect to the scheduler shall be
|
|
* lowered to the next highest priority.
|
|
*/
|
|
T_eq_u32( ctx->owner_priority_after, ctx->owner_priority + 1 );
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Drop: {
|
|
/*
|
|
* The owner shall not have a priority with respect to the scheduler.
|
|
*/
|
|
T_eq_u32( ctx->owner_priority_after, PRIO_INVALID );
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Check(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority state
|
|
)
|
|
{
|
|
switch ( state ) {
|
|
case ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Nop: {
|
|
/*
|
|
* The priority of the owner of the thread queue on which the owner is
|
|
* enqueued with respect to the scheduler shall not change by the timeout
|
|
* operation.
|
|
*/
|
|
T_eq_u32( ctx->owner_owner_priority_after, ctx->owner_owner_priority );
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Lower: {
|
|
/*
|
|
* The priority of the owner of the thread queue on which the owner is
|
|
* enqueued with respect to the scheduler shall be lowered to the next
|
|
* highest priority.
|
|
*/
|
|
T_eq_u32( ctx->owner_owner_priority_after, ctx->owner_owner_priority + 1 );
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Drop: {
|
|
/*
|
|
* The owner of the thread queue on which the owner is enqueued shall not
|
|
* have a priority with respect to the scheduler.
|
|
*/
|
|
T_eq_u32( ctx->owner_owner_priority_after, PRIO_INVALID );
|
|
break;
|
|
}
|
|
|
|
case ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Setup(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx
|
|
)
|
|
{
|
|
ctx->request.arg = ctx;
|
|
TQReset( ctx->tq_ctx );
|
|
SetSelfPriority( PRIO_NEARLY_IDLE );
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Setup_Wrap( void *arg )
|
|
{
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx;
|
|
|
|
ctx = arg;
|
|
ctx->Map.in_action_loop = false;
|
|
ScoreTqReqTimeoutPriorityInherit_Setup( ctx );
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Teardown(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx
|
|
)
|
|
{
|
|
TQReset( ctx->tq_ctx );
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Teardown_Wrap( void *arg )
|
|
{
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx;
|
|
|
|
ctx = arg;
|
|
ctx->Map.in_action_loop = false;
|
|
ScoreTqReqTimeoutPriorityInherit_Teardown( ctx );
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Prepare(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx
|
|
)
|
|
{
|
|
ctx->queue_helper_surrender = false;
|
|
ctx->owner_helper_release = false;
|
|
ctx->owner_queue_helper_release = false;
|
|
ctx->owner_owner_helper_release = false;
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Action(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx
|
|
)
|
|
{
|
|
rtems_task_priority priority;
|
|
|
|
priority = PRIO_FLEXIBLE;
|
|
TQSetScheduler( ctx->tq_ctx, THREAD, ctx->scheduler_id, priority );
|
|
|
|
TQSend(
|
|
ctx->tq_ctx,
|
|
OWNER,
|
|
TQ_EVENT_MUTEX_A_OBTAIN | TQ_EVENT_ENQUEUE
|
|
);
|
|
|
|
if ( ctx->owner_obtain != 0 ) {
|
|
TQSend(
|
|
ctx->tq_ctx,
|
|
OWNER_OWNER,
|
|
TQ_EVENT_MUTEX_B_OBTAIN | ctx->owner_obtain
|
|
);
|
|
TQSend( ctx->tq_ctx, OWNER, ctx->owner_obtain | ctx->owner_release );
|
|
}
|
|
|
|
PrepareThread( ctx );
|
|
priority = PrepareQueue( ctx, priority );
|
|
priority = PrepareOwner( ctx, priority );
|
|
priority = PrepareOwnerQueue( ctx, priority );
|
|
PrepareOwnerOwner( ctx, priority );
|
|
|
|
TQClearDone( ctx->tq_ctx, THREAD );
|
|
|
|
switch ( ctx->wait_state ) {
|
|
case TQ_WAIT_STATE_BLOCKED:
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
THREAD,
|
|
TQ_EVENT_ENQUEUE_TIMED
|
|
);
|
|
Tick( ctx );
|
|
GetPriorities( ctx );
|
|
TQSend( ctx->tq_ctx, OWNER, TQ_EVENT_SURRENDER );
|
|
break;
|
|
case TQ_WAIT_STATE_INTEND_TO_BLOCK:
|
|
T_scheduler_set_event_handler( SchedulerBlock, ctx );
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
THREAD,
|
|
TQ_EVENT_ENQUEUE_TIMED
|
|
);
|
|
GetPriorities( ctx );
|
|
TQSend( ctx->tq_ctx, OWNER, TQ_EVENT_SURRENDER );
|
|
break;
|
|
case TQ_WAIT_STATE_READY_AGAIN:
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
THREAD,
|
|
TQ_EVENT_ENQUEUE_TIMED
|
|
);
|
|
T_scheduler_set_event_handler( SchedulerUnblock, ctx );
|
|
TQSend( ctx->tq_ctx, OWNER, TQ_EVENT_SURRENDER );
|
|
GetPriorities( ctx );
|
|
TQSend( ctx->tq_ctx, THREAD, TQ_EVENT_SURRENDER );
|
|
break;
|
|
}
|
|
|
|
TQWaitForDone( ctx->tq_ctx, THREAD );
|
|
TQWaitForExecutionStop( ctx->tq_ctx, THREAD );
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_Cleanup(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx
|
|
)
|
|
{
|
|
if ( ctx->owner_obtain != 0 ) {
|
|
TQSend(
|
|
ctx->tq_ctx,
|
|
OWNER_OWNER,
|
|
TQ_EVENT_MUTEX_B_RELEASE | ctx->owner_release
|
|
);
|
|
|
|
if ( ctx->owner_queue_helper_release ) {
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
OWNER_QUEUE_HELPER,
|
|
ctx->owner_release
|
|
);
|
|
}
|
|
|
|
if ( ctx->owner_owner_helper_release ) {
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
OWNER_OWNER_HELPER,
|
|
TQ_EVENT_MUTEX_B_RELEASE
|
|
);
|
|
}
|
|
}
|
|
|
|
TQSend( ctx->tq_ctx, OWNER, TQ_EVENT_MUTEX_A_RELEASE );
|
|
|
|
if ( ctx->queue_helper_surrender ) {
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
QUEUE_HELPER,
|
|
TQ_EVENT_SURRENDER
|
|
);
|
|
}
|
|
|
|
if ( ctx->owner_helper_release ) {
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
OWNER_HELPER,
|
|
TQ_EVENT_MUTEX_A_RELEASE
|
|
);
|
|
}
|
|
|
|
if ( ctx->other_scheduler ) {
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
THREAD,
|
|
TQ_EVENT_MUTEX_D_RELEASE
|
|
);
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
THREAD_HELPER_A,
|
|
TQ_EVENT_MUTEX_D_RELEASE
|
|
);
|
|
|
|
if ( rtems_scheduler_get_processor_maximum() >= 3 ) {
|
|
TQSendAndWaitForExecutionStop(
|
|
ctx->tq_ctx,
|
|
THREAD_HELPER_B,
|
|
TQ_EVENT_MUTEX_D_RELEASE
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
static const ScoreTqReqTimeoutPriorityInherit_Entry
|
|
ScoreTqReqTimeoutPriorityInherit_Entries[] = {
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Nop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Nop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 1, 1, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_Ok,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Nop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Nop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Nop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Nop },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Nop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Nop },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Drop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Drop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 1, 1, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_Ok,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Drop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Nop },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Nop },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Lower },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Lower },
|
|
#endif
|
|
{ 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
{ 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 1, 1, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_Ok,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Nop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Drop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Drop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#endif
|
|
{ 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Nop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
{ 0, 0, 0, 0, 0, 0, 1, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Nop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
{ 0, 0, 0, 0, 0, 0, 1, 1, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_Ok,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
{ 0, 0, 0, 0, 0, 0, 0, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
{ 0, 0, 0, 0, 0, 0, 0, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Drop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Nop },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Drop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Nop },
|
|
#endif
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Nop },
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Nop },
|
|
{ 0, 0, 0, 0, 0, 0, 0, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Nop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
{ 0, 0, 0, 0, 0, 0, 0, 1, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Nop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Nop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Nop },
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Nop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Nop },
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Drop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Lower },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Drop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Lower },
|
|
#endif
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Lower },
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Lower,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Lower },
|
|
{ 0, 0, 0, 0, 0, 0, 1, 1, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_Ok,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Nop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA },
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Yes,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Drop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Drop },
|
|
#endif
|
|
#if !defined(RTEMS_SMP)
|
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, ScoreTqReqTimeoutPriorityInherit_Post_Status_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_NA,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_NA }
|
|
#else
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Timeout,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_No,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Drop,
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Drop }
|
|
#endif
|
|
};
|
|
|
|
static const uint8_t
|
|
ScoreTqReqTimeoutPriorityInherit_Map[] = {
|
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2,
|
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2,
|
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1,
|
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
|
|
1, 2, 2, 2, 2, 2, 2, 24, 25, 31, 24, 25, 31, 2, 2, 2, 24, 25, 31, 24, 25, 31,
|
|
2, 2, 2, 1, 1, 1, 24, 25, 31, 2, 2, 2, 24, 25, 11, 24, 25, 11, 2, 2, 2, 24,
|
|
25, 11, 24, 25, 11, 2, 2, 2, 1, 1, 1, 24, 25, 11, 2, 2, 2, 32, 33, 11, 32,
|
|
33, 11, 2, 2, 2, 32, 33, 11, 32, 33, 11, 2, 2, 2, 1, 1, 1, 32, 33, 11, 2, 2,
|
|
2, 44, 45, 11, 36, 37, 11, 2, 2, 2, 44, 45, 11, 36, 37, 11, 2, 2, 2, 1, 1, 1,
|
|
36, 37, 11, 2, 2, 2, 1, 1, 1, 29, 30, 46, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
|
|
1, 1, 1, 29, 30, 46, 2, 2, 2, 1, 1, 1, 29, 30, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
2, 2, 2, 1, 1, 1, 29, 30, 11, 2, 2, 2, 1, 1, 1, 38, 39, 11, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 2, 2, 2, 1, 1, 1, 38, 39, 11, 2, 2, 2, 1, 1, 1, 40, 41, 11, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 40, 41, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 24, 25,
|
|
31, 24, 25, 31, 2, 2, 2, 24, 25, 31, 24, 25, 31, 2, 2, 2, 1, 1, 1, 24, 25,
|
|
31, 2, 2, 2, 24, 25, 11, 24, 25, 11, 2, 2, 2, 24, 25, 11, 24, 25, 11, 2, 2,
|
|
2, 1, 1, 1, 24, 25, 11, 2, 2, 2, 32, 33, 11, 32, 33, 11, 2, 2, 2, 32, 33, 11,
|
|
32, 33, 11, 2, 2, 2, 1, 1, 1, 32, 33, 11, 2, 2, 2, 44, 45, 11, 36, 37, 11, 2,
|
|
2, 2, 44, 45, 11, 36, 37, 11, 2, 2, 2, 1, 1, 1, 36, 37, 11, 2, 2, 2, 1, 1, 1,
|
|
29, 30, 46, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 29, 30, 46, 2, 2, 2,
|
|
1, 1, 1, 29, 30, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 29, 30, 11,
|
|
2, 2, 2, 1, 1, 1, 38, 39, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1,
|
|
38, 39, 11, 2, 2, 2, 1, 1, 1, 40, 41, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
|
|
1, 1, 1, 40, 41, 11, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
|
|
2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 29, 30, 11, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 29, 30, 11, 2, 2, 2, 1, 1, 1, 29,
|
|
30, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 29, 30, 11, 2, 2, 2, 1,
|
|
1, 1, 38, 39, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 38, 39, 11, 2,
|
|
2, 2, 1, 1, 1, 40, 41, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 40,
|
|
41, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0,
|
|
0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
|
|
0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
|
0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
|
3, 0, 0, 0, 3, 3, 3, 3, 3, 3, 5, 6, 12, 5, 6, 12, 3, 3, 3, 5, 6, 12, 5, 6,
|
|
12, 3, 3, 3, 0, 0, 0, 5, 6, 12, 3, 3, 3, 5, 6, 4, 5, 6, 4, 3, 3, 3, 5, 6, 4,
|
|
5, 6, 4, 3, 3, 3, 0, 0, 0, 5, 6, 4, 3, 3, 3, 9, 10, 4, 9, 10, 4, 3, 3, 3, 9,
|
|
10, 4, 9, 10, 4, 3, 3, 3, 0, 0, 0, 9, 10, 4, 3, 3, 3, 22, 23, 4, 20, 21, 4,
|
|
3, 3, 3, 22, 23, 4, 20, 21, 4, 3, 3, 3, 0, 0, 0, 20, 21, 4, 3, 3, 3, 0, 0, 0,
|
|
7, 8, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 7, 8, 26, 3, 3, 3, 0,
|
|
0, 0, 7, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 7, 8, 4, 3, 3, 3,
|
|
0, 0, 0, 13, 14, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 13, 14, 4,
|
|
3, 3, 3, 0, 0, 0, 15, 16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 15,
|
|
16, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0,
|
|
0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0,
|
|
0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
|
0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
|
3, 0, 0, 0, 3, 3, 3, 3, 3, 3, 5, 6, 12, 5, 6, 12, 3, 3, 3, 5, 6, 12, 5, 6,
|
|
12, 3, 3, 3, 0, 0, 0, 5, 6, 12, 3, 3, 3, 5, 6, 4, 5, 6, 4, 3, 3, 3, 5, 6, 4,
|
|
5, 6, 4, 3, 3, 3, 0, 0, 0, 5, 6, 4, 3, 3, 3, 9, 10, 4, 9, 10, 4, 3, 3, 3, 9,
|
|
10, 4, 9, 10, 4, 3, 3, 3, 0, 0, 0, 9, 10, 4, 3, 3, 3, 22, 23, 4, 20, 21, 4,
|
|
3, 3, 3, 22, 23, 4, 20, 21, 4, 3, 3, 3, 0, 0, 0, 20, 21, 4, 3, 3, 3, 0, 0, 0,
|
|
7, 8, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 7, 8, 26, 3, 3, 3, 0,
|
|
0, 0, 7, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 7, 8, 4, 3, 3, 3,
|
|
0, 0, 0, 13, 14, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 13, 14, 4,
|
|
3, 3, 3, 0, 0, 0, 15, 16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 15,
|
|
16, 4, 3, 3, 3, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0,
|
|
0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0,
|
|
0, 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3,
|
|
0, 0, 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3,
|
|
3, 0, 0, 0, 3, 3, 3, 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, 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, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 7, 8, 4, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 3, 3, 3, 0, 0, 0, 7, 8, 4, 3, 3, 3, 0, 0, 0, 7, 8, 4, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 7, 8, 4, 3, 3, 3, 0, 0, 0, 13, 14, 4, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 13, 14, 4, 3, 3, 3, 0, 0, 0, 15, 16, 4,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 15, 16, 4, 17, 18, 19, 17, 18,
|
|
19, 17, 18, 19, 17, 18, 19, 17, 18, 19, 17, 18, 19, 17, 18, 19, 0, 0, 0, 17,
|
|
18, 19, 17, 18, 4, 17, 18, 4, 17, 18, 4, 17, 18, 4, 17, 18, 4, 17, 18, 4, 17,
|
|
18, 4, 0, 0, 0, 17, 18, 4, 27, 28, 4, 27, 28, 4, 27, 28, 4, 27, 28, 4, 27,
|
|
28, 4, 27, 28, 4, 27, 28, 4, 0, 0, 0, 27, 28, 4, 47, 48, 4, 42, 43, 4, 34,
|
|
35, 4, 42, 43, 4, 42, 43, 4, 34, 35, 4, 34, 35, 4, 0, 0, 0, 34, 35, 4, 5, 6,
|
|
12, 5, 6, 12, 5, 6, 12, 5, 6, 12, 5, 6, 12, 5, 6, 12, 5, 6, 12, 0, 0, 0, 5,
|
|
6, 12, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 0, 0,
|
|
0, 5, 6, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9,
|
|
10, 4, 0, 0, 0, 9, 10, 4, 22, 23, 4, 22, 23, 4, 20, 21, 4, 22, 23, 4, 22, 23,
|
|
4, 20, 21, 4, 20, 21, 4, 0, 0, 0, 20, 21, 4, 7, 8, 26, 0, 0, 0, 7, 8, 26, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 26, 0, 0, 0, 7, 8, 26, 7, 8, 4, 0, 0, 0, 7, 8,
|
|
4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 4, 0, 0, 0, 7, 8, 4, 13, 14, 4, 0, 0, 0,
|
|
13, 14, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 4, 0, 0, 0, 13, 14, 4, 15, 16,
|
|
4, 0, 0, 0, 15, 16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 4, 0, 0, 0, 15, 16,
|
|
4, 5, 6, 19, 5, 6, 19, 5, 6, 19, 5, 6, 19, 5, 6, 19, 5, 6, 19, 5, 6, 19, 0,
|
|
0, 0, 5, 6, 19, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6,
|
|
4, 0, 0, 0, 5, 6, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10,
|
|
4, 9, 10, 4, 0, 0, 0, 9, 10, 4, 22, 23, 4, 22, 23, 4, 20, 21, 4, 22, 23, 4,
|
|
22, 23, 4, 20, 21, 4, 20, 21, 4, 0, 0, 0, 20, 21, 4, 5, 6, 12, 5, 6, 12, 5,
|
|
6, 12, 5, 6, 12, 5, 6, 12, 5, 6, 12, 5, 6, 12, 0, 0, 0, 5, 6, 12, 5, 6, 4, 5,
|
|
6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 0, 0, 0, 5, 6, 4, 9, 10,
|
|
4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 0, 0, 0, 9,
|
|
10, 4, 22, 23, 4, 22, 23, 4, 20, 21, 4, 22, 23, 4, 22, 23, 4, 20, 21, 4, 20,
|
|
21, 4, 0, 0, 0, 20, 21, 4, 7, 8, 26, 0, 0, 0, 7, 8, 26, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 7, 8, 26, 0, 0, 0, 7, 8, 26, 7, 8, 4, 0, 0, 0, 7, 8, 4, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 7, 8, 4, 0, 0, 0, 7, 8, 4, 13, 14, 4, 0, 0, 0, 13, 14, 4, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 13, 14, 4, 0, 0, 0, 13, 14, 4, 15, 16, 4, 0, 0, 0, 15,
|
|
16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 4, 0, 0, 0, 15, 16, 4, 7, 8, 4, 0,
|
|
0, 0, 7, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 4, 0, 0, 0, 7, 8, 4, 7, 8, 4,
|
|
0, 0, 0, 7, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 4, 0, 0, 0, 7, 8, 4, 13,
|
|
14, 4, 0, 0, 0, 13, 14, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 4, 0, 0, 0, 13,
|
|
14, 4, 15, 16, 4, 0, 0, 0, 15, 16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 4,
|
|
0, 0, 0, 15, 16, 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, 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, 0, 0, 0, 0, 7, 8, 4, 0, 0, 0, 7, 8, 4, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 7, 8, 4, 0, 0, 0, 7, 8, 4, 7, 8, 4, 0, 0, 0, 7, 8, 4, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 7, 8, 4, 0, 0, 0, 7, 8, 4, 13, 14, 4, 0, 0, 0, 13, 14, 4, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 13, 14, 4, 0, 0, 0, 13, 14, 4, 15, 16, 4, 0, 0, 0, 15,
|
|
16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 4, 0, 0, 0, 15, 16, 4, 17, 18, 19,
|
|
17, 18, 19, 17, 18, 19, 17, 18, 19, 17, 18, 19, 17, 18, 19, 17, 18, 19, 0, 0,
|
|
0, 17, 18, 19, 17, 18, 4, 17, 18, 4, 17, 18, 4, 17, 18, 4, 17, 18, 4, 17, 18,
|
|
4, 17, 18, 4, 0, 0, 0, 17, 18, 4, 27, 28, 4, 27, 28, 4, 27, 28, 4, 27, 28, 4,
|
|
27, 28, 4, 27, 28, 4, 27, 28, 4, 0, 0, 0, 27, 28, 4, 47, 48, 4, 42, 43, 4,
|
|
34, 35, 4, 42, 43, 4, 42, 43, 4, 34, 35, 4, 34, 35, 4, 0, 0, 0, 34, 35, 4, 5,
|
|
6, 12, 5, 6, 12, 5, 6, 12, 5, 6, 12, 5, 6, 12, 5, 6, 12, 5, 6, 12, 0, 0, 0,
|
|
5, 6, 12, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 0,
|
|
0, 0, 5, 6, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9,
|
|
10, 4, 0, 0, 0, 9, 10, 4, 22, 23, 4, 22, 23, 4, 20, 21, 4, 22, 23, 4, 22, 23,
|
|
4, 20, 21, 4, 20, 21, 4, 0, 0, 0, 20, 21, 4, 7, 8, 26, 0, 0, 0, 7, 8, 26, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 26, 0, 0, 0, 7, 8, 26, 7, 8, 4, 0, 0, 0, 7, 8,
|
|
4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 4, 0, 0, 0, 7, 8, 4, 13, 14, 4, 0, 0, 0,
|
|
13, 14, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 4, 0, 0, 0, 13, 14, 4, 15, 16,
|
|
4, 0, 0, 0, 15, 16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 4, 0, 0, 0, 15, 16,
|
|
4, 5, 6, 19, 5, 6, 19, 5, 6, 19, 5, 6, 19, 5, 6, 19, 5, 6, 19, 5, 6, 19, 0,
|
|
0, 0, 5, 6, 19, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6,
|
|
4, 0, 0, 0, 5, 6, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10,
|
|
4, 9, 10, 4, 0, 0, 0, 9, 10, 4, 22, 23, 4, 22, 23, 4, 20, 21, 4, 22, 23, 4,
|
|
22, 23, 4, 20, 21, 4, 20, 21, 4, 0, 0, 0, 20, 21, 4, 5, 6, 12, 5, 6, 12, 5,
|
|
6, 12, 5, 6, 12, 5, 6, 12, 5, 6, 12, 5, 6, 12, 0, 0, 0, 5, 6, 12, 5, 6, 4, 5,
|
|
6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 0, 0, 0, 5, 6, 4, 9, 10,
|
|
4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 9, 10, 4, 0, 0, 0, 9,
|
|
10, 4, 22, 23, 4, 22, 23, 4, 20, 21, 4, 22, 23, 4, 22, 23, 4, 20, 21, 4, 20,
|
|
21, 4, 0, 0, 0, 20, 21, 4, 7, 8, 26, 0, 0, 0, 7, 8, 26, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 7, 8, 26, 0, 0, 0, 7, 8, 26, 7, 8, 4, 0, 0, 0, 7, 8, 4, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 7, 8, 4, 0, 0, 0, 7, 8, 4, 13, 14, 4, 0, 0, 0, 13, 14, 4, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 13, 14, 4, 0, 0, 0, 13, 14, 4, 15, 16, 4, 0, 0, 0, 15,
|
|
16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 4, 0, 0, 0, 15, 16, 4, 7, 8, 4, 0,
|
|
0, 0, 7, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 4, 0, 0, 0, 7, 8, 4, 7, 8, 4,
|
|
0, 0, 0, 7, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 4, 0, 0, 0, 7, 8, 4, 13,
|
|
14, 4, 0, 0, 0, 13, 14, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 4, 0, 0, 0, 13,
|
|
14, 4, 15, 16, 4, 0, 0, 0, 15, 16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 4,
|
|
0, 0, 0, 15, 16, 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, 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, 0, 0, 0, 0, 7, 8, 4, 0, 0, 0, 7, 8, 4, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 7, 8, 4, 0, 0, 0, 7, 8, 4, 7, 8, 4, 0, 0, 0, 7, 8, 4, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 7, 8, 4, 0, 0, 0, 7, 8, 4, 13, 14, 4, 0, 0, 0, 13, 14, 4, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 13, 14, 4, 0, 0, 0, 13, 14, 4, 15, 16, 4, 0, 0, 0, 15,
|
|
16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 4, 0, 0, 0, 15, 16, 4
|
|
};
|
|
|
|
static size_t ScoreTqReqTimeoutPriorityInherit_Scope(
|
|
void *arg,
|
|
char *buf,
|
|
size_t n
|
|
)
|
|
{
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx;
|
|
|
|
ctx = arg;
|
|
|
|
if ( ctx->Map.in_action_loop ) {
|
|
return T_get_scope(
|
|
ScoreTqReqTimeoutPriorityInherit_PreDesc,
|
|
buf,
|
|
n,
|
|
ctx->Map.pcs
|
|
);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static T_fixture ScoreTqReqTimeoutPriorityInherit_Fixture = {
|
|
.setup = ScoreTqReqTimeoutPriorityInherit_Setup_Wrap,
|
|
.stop = NULL,
|
|
.teardown = ScoreTqReqTimeoutPriorityInherit_Teardown_Wrap,
|
|
.scope = ScoreTqReqTimeoutPriorityInherit_Scope,
|
|
.initial_context = &ScoreTqReqTimeoutPriorityInherit_Instance
|
|
};
|
|
|
|
static inline ScoreTqReqTimeoutPriorityInherit_Entry
|
|
ScoreTqReqTimeoutPriorityInherit_PopEntry(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx
|
|
)
|
|
{
|
|
size_t index;
|
|
|
|
index = ctx->Map.index;
|
|
ctx->Map.index = index + 1;
|
|
return ScoreTqReqTimeoutPriorityInherit_Entries[
|
|
ScoreTqReqTimeoutPriorityInherit_Map[ index ]
|
|
];
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_SetPreConditionStates(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx
|
|
)
|
|
{
|
|
ctx->Map.pcs[ 0 ] = ctx->Map.pci[ 0 ];
|
|
ctx->Map.pcs[ 1 ] = ctx->Map.pci[ 1 ];
|
|
ctx->Map.pcs[ 2 ] = ctx->Map.pci[ 2 ];
|
|
ctx->Map.pcs[ 3 ] = ctx->Map.pci[ 3 ];
|
|
ctx->Map.pcs[ 4 ] = ctx->Map.pci[ 4 ];
|
|
|
|
if ( ctx->Map.entry.Pre_OwnerQueue_NA ) {
|
|
ctx->Map.pcs[ 5 ] = ScoreTqReqTimeoutPriorityInherit_Pre_OwnerQueue_NA;
|
|
} else {
|
|
ctx->Map.pcs[ 5 ] = ctx->Map.pci[ 5 ];
|
|
}
|
|
|
|
if ( ctx->Map.entry.Pre_OwnerOwnerPriority_NA ) {
|
|
ctx->Map.pcs[ 6 ] = ScoreTqReqTimeoutPriorityInherit_Pre_OwnerOwnerPriority_NA;
|
|
} else {
|
|
ctx->Map.pcs[ 6 ] = ctx->Map.pci[ 6 ];
|
|
}
|
|
|
|
ctx->Map.pcs[ 7 ] = ctx->Map.pci[ 7 ];
|
|
}
|
|
|
|
static void ScoreTqReqTimeoutPriorityInherit_TestVariant(
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx
|
|
)
|
|
{
|
|
ScoreTqReqTimeoutPriorityInherit_Pre_HomeScheduler_Prepare(
|
|
ctx,
|
|
ctx->Map.pcs[ 0 ]
|
|
);
|
|
ScoreTqReqTimeoutPriorityInherit_Pre_EligibleScheduler_Prepare(
|
|
ctx,
|
|
ctx->Map.pcs[ 1 ]
|
|
);
|
|
ScoreTqReqTimeoutPriorityInherit_Pre_Queue_Prepare( ctx, ctx->Map.pcs[ 2 ] );
|
|
ScoreTqReqTimeoutPriorityInherit_Pre_OwnerPriority_Prepare(
|
|
ctx,
|
|
ctx->Map.pcs[ 3 ]
|
|
);
|
|
ScoreTqReqTimeoutPriorityInherit_Pre_OwnerState_Prepare(
|
|
ctx,
|
|
ctx->Map.pcs[ 4 ]
|
|
);
|
|
ScoreTqReqTimeoutPriorityInherit_Pre_OwnerQueue_Prepare(
|
|
ctx,
|
|
ctx->Map.pcs[ 5 ]
|
|
);
|
|
ScoreTqReqTimeoutPriorityInherit_Pre_OwnerOwnerPriority_Prepare(
|
|
ctx,
|
|
ctx->Map.pcs[ 6 ]
|
|
);
|
|
ScoreTqReqTimeoutPriorityInherit_Pre_WaitState_Prepare(
|
|
ctx,
|
|
ctx->Map.pcs[ 7 ]
|
|
);
|
|
ScoreTqReqTimeoutPriorityInherit_Action( ctx );
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Status_Check(
|
|
ctx,
|
|
ctx->Map.entry.Post_Status
|
|
);
|
|
ScoreTqReqTimeoutPriorityInherit_Post_Unblock_Check(
|
|
ctx,
|
|
ctx->Map.entry.Post_Unblock
|
|
);
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerPriority_Check(
|
|
ctx,
|
|
ctx->Map.entry.Post_OwnerPriority
|
|
);
|
|
ScoreTqReqTimeoutPriorityInherit_Post_OwnerOwnerPriority_Check(
|
|
ctx,
|
|
ctx->Map.entry.Post_OwnerOwnerPriority
|
|
);
|
|
}
|
|
|
|
static T_fixture_node ScoreTqReqTimeoutPriorityInherit_Node;
|
|
|
|
void ScoreTqReqTimeoutPriorityInherit_Run( TQContext *tq_ctx )
|
|
{
|
|
ScoreTqReqTimeoutPriorityInherit_Context *ctx;
|
|
|
|
ctx = &ScoreTqReqTimeoutPriorityInherit_Instance;
|
|
ctx->tq_ctx = tq_ctx;
|
|
|
|
ctx = T_push_fixture(
|
|
&ScoreTqReqTimeoutPriorityInherit_Node,
|
|
&ScoreTqReqTimeoutPriorityInherit_Fixture
|
|
);
|
|
ctx->Map.in_action_loop = true;
|
|
ctx->Map.index = 0;
|
|
|
|
for (
|
|
ctx->Map.pci[ 0 ] = ScoreTqReqTimeoutPriorityInherit_Pre_HomeScheduler_Home;
|
|
ctx->Map.pci[ 0 ] < ScoreTqReqTimeoutPriorityInherit_Pre_HomeScheduler_NA;
|
|
++ctx->Map.pci[ 0 ]
|
|
) {
|
|
for (
|
|
ctx->Map.pci[ 1 ] = ScoreTqReqTimeoutPriorityInherit_Pre_EligibleScheduler_One;
|
|
ctx->Map.pci[ 1 ] < ScoreTqReqTimeoutPriorityInherit_Pre_EligibleScheduler_NA;
|
|
++ctx->Map.pci[ 1 ]
|
|
) {
|
|
for (
|
|
ctx->Map.pci[ 2 ] = ScoreTqReqTimeoutPriorityInherit_Pre_Queue_Only;
|
|
ctx->Map.pci[ 2 ] < ScoreTqReqTimeoutPriorityInherit_Pre_Queue_NA;
|
|
++ctx->Map.pci[ 2 ]
|
|
) {
|
|
for (
|
|
ctx->Map.pci[ 3 ] = ScoreTqReqTimeoutPriorityInherit_Pre_OwnerPriority_Only;
|
|
ctx->Map.pci[ 3 ] < ScoreTqReqTimeoutPriorityInherit_Pre_OwnerPriority_NA;
|
|
++ctx->Map.pci[ 3 ]
|
|
) {
|
|
for (
|
|
ctx->Map.pci[ 4 ] = ScoreTqReqTimeoutPriorityInherit_Pre_OwnerState_NotEnqueued;
|
|
ctx->Map.pci[ 4 ] < ScoreTqReqTimeoutPriorityInherit_Pre_OwnerState_NA;
|
|
++ctx->Map.pci[ 4 ]
|
|
) {
|
|
for (
|
|
ctx->Map.pci[ 5 ] = ScoreTqReqTimeoutPriorityInherit_Pre_OwnerQueue_Only;
|
|
ctx->Map.pci[ 5 ] < ScoreTqReqTimeoutPriorityInherit_Pre_OwnerQueue_NA;
|
|
++ctx->Map.pci[ 5 ]
|
|
) {
|
|
for (
|
|
ctx->Map.pci[ 6 ] = ScoreTqReqTimeoutPriorityInherit_Pre_OwnerOwnerPriority_Only;
|
|
ctx->Map.pci[ 6 ] < ScoreTqReqTimeoutPriorityInherit_Pre_OwnerOwnerPriority_NA;
|
|
++ctx->Map.pci[ 6 ]
|
|
) {
|
|
for (
|
|
ctx->Map.pci[ 7 ] = ScoreTqReqTimeoutPriorityInherit_Pre_WaitState_Blocked;
|
|
ctx->Map.pci[ 7 ] < ScoreTqReqTimeoutPriorityInherit_Pre_WaitState_NA;
|
|
++ctx->Map.pci[ 7 ]
|
|
) {
|
|
ctx->Map.entry = ScoreTqReqTimeoutPriorityInherit_PopEntry(
|
|
ctx
|
|
);
|
|
|
|
if ( ctx->Map.entry.Skip ) {
|
|
continue;
|
|
}
|
|
|
|
ScoreTqReqTimeoutPriorityInherit_SetPreConditionStates(
|
|
ctx
|
|
);
|
|
ScoreTqReqTimeoutPriorityInherit_Prepare( ctx );
|
|
ScoreTqReqTimeoutPriorityInherit_TestVariant( ctx );
|
|
ScoreTqReqTimeoutPriorityInherit_Cleanup( ctx );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
T_pop_fixture();
|
|
}
|
|
|
|
/** @} */
|