rtems: Clarify scheduler of created task

This commit is contained in:
Sebastian Huber
2022-03-29 15:23:29 +02:00
parent c2d7376f06
commit 9f9f1408a1
6 changed files with 209 additions and 5 deletions

View File

@@ -445,9 +445,9 @@ rtems_task_priority _RTEMS_Maximum_priority( void );
* task with other task related directives. * task with other task related directives.
* *
* The **initial priority** of the task is specified in ``initial_priority``. * The **initial priority** of the task is specified in ``initial_priority``.
* The scheduler of the created task is the scheduler of the calling task at * The home scheduler of the created task is the home scheduler of the calling
* some point during the task creation. The initial task priority specified in * task at some time point during the task creation. The initial task priority
* ``initial_priority`` shall be valid for this scheduler. * specified in ``initial_priority`` shall be valid for this scheduler.
* *
* The **stack size** of the task is specified in ``stack_size``. If the * The **stack size** of the task is specified in ``stack_size``. If the
* requested stack size is less than the configured minimum stack size, then * requested stack size is less than the configured minimum stack size, then

View File

@@ -25,6 +25,7 @@ source:
- testsuites/validation/tc-score-tq-smp.c - testsuites/validation/tc-score-tq-smp.c
- testsuites/validation/tc-sem-smp.c - testsuites/validation/tc-sem-smp.c
- testsuites/validation/tc-sem-mrsp-obtain.c - testsuites/validation/tc-sem-mrsp-obtain.c
- testsuites/validation/tc-task-smp.c
- testsuites/validation/ts-validation-smp-only-0.c - testsuites/validation/ts-validation-smp-only-0.c
stlib: [] stlib: []
target: testsuites/validation/ts-validation-smp-only-0.exe target: testsuites/validation/ts-validation-smp-only-0.exe

View File

@@ -0,0 +1,146 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/**
* @file
*
* @ingroup RTEMSTestCaseRtemsTaskValSmp
*/
/*
* Copyright (C) 2022 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.h>
#include "ts-config.h"
#include "tx-support.h"
#include <rtems/test.h>
/**
* @defgroup RTEMSTestCaseRtemsTaskValSmp spec:/rtems/task/val/smp
*
* @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0
*
* @brief This test case collection provides SMP-specific validation test cases
* for requirements of the @ref RTEMSAPIClassicTasks.
*
* This test case performs the following actions:
*
* - Validate the home scheduler of tasks created by rtems_task_create() and
* constructed by rtems_task_construct() on scheduler B.
*
* - Move runner from scheduler A to B.
*
* - Create a task. Check that the home scheduler of the created task is
* scheduler B.
*
* - Construct a task. Check that the home scheduler of the constructed task
* is scheduler B.
*
* - Restore runner scheduler.
*
* @{
*/
/**
* @brief Validate the home scheduler of tasks created by rtems_task_create()
* and constructed by rtems_task_construct() on scheduler B.
*/
static void RtemsTaskValSmp_Action_0( void )
{
rtems_status_code sc;
rtems_status_code id;
/*
* Move runner from scheduler A to B.
*/
T_step_eq_u32( 0, GetSelfScheduler(), SCHEDULER_A_ID );
SetSelfScheduler( SCHEDULER_B_ID, 1 );
/*
* Create a task. Check that the home scheduler of the created task is
* scheduler B.
*/
sc = rtems_task_create(
OBJECT_NAME,
1,
TEST_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
&id
);
T_step_rsc_success( 1, sc );
T_step_eq_u32( 2, GetScheduler( id ), SCHEDULER_B_ID );
DeleteTask( id );
/*
* Construct a task. Check that the home scheduler of the constructed task
* is scheduler B.
*/
sc = rtems_task_construct( &DefaultTaskConfig, &id );
T_step_rsc_success( 3, sc );
T_step_eq_u32( 4, GetScheduler( id ), SCHEDULER_B_ID );
DeleteTask( id );
/*
* Restore runner scheduler.
*/
RestoreRunnerScheduler();
}
/**
* @fn void T_case_body_RtemsTaskValSmp( void )
*/
T_TEST_CASE( RtemsTaskValSmp )
{
T_plan( 5 );
RtemsTaskValSmp_Action_0();
}
/** @} */

View File

@@ -7,7 +7,7 @@
*/ */
/* /*
* Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) * Copyright (C) 2021, 2022 embedded brains GmbH (http://www.embedded-brains.de)
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
@@ -56,6 +56,9 @@
#include <string.h> #include <string.h>
#include <rtems/score/apimutex.h> #include <rtems/score/apimutex.h>
#include "ts-config.h"
#include "tx-support.h"
#include <rtems/test.h> #include <rtems/test.h>
/** /**
@@ -110,6 +113,15 @@
* - Check that rtems_task_is_suspended() returns the expected status if * - Check that rtems_task_is_suspended() returns the expected status if
* called with a task identifier parameter of RTEMS_SELF. * called with a task identifier parameter of RTEMS_SELF.
* *
* - Validate the home scheduler of tasks created by rtems_task_create() and
* constructed by rtems_task_construct().
*
* - Create a task. Check that the home scheduler of the created task is
* scheduler A.
*
* - Construct a task. Check that the home scheduler of the constructed task
* is scheduler A.
*
* @{ * @{
*/ */
@@ -284,12 +296,49 @@ static void RtemsTaskValTask_Action_8( void )
T_step_rsc_success( 7, sc ); T_step_rsc_success( 7, sc );
} }
/**
* @brief Validate the home scheduler of tasks created by rtems_task_create()
* and constructed by rtems_task_construct().
*/
static void RtemsTaskValTask_Action_9( void )
{
rtems_status_code sc;
rtems_status_code id;
/*
* Create a task. Check that the home scheduler of the created task is
* scheduler A.
*/
sc = rtems_task_create(
OBJECT_NAME,
1,
TEST_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
&id
);
T_step_rsc_success( 8, sc );
T_step_eq_u32( 9, GetScheduler( id ), SCHEDULER_A_ID );
DeleteTask( id );
/*
* Construct a task. Check that the home scheduler of the constructed task
* is scheduler A.
*/
sc = rtems_task_construct( &DefaultTaskConfig, &id );
T_step_rsc_success( 10, sc );
T_step_eq_u32( 11, GetScheduler( id ), SCHEDULER_A_ID );
DeleteTask( id );
}
/** /**
* @fn void T_case_body_RtemsTaskValTask( void ) * @fn void T_case_body_RtemsTaskValTask( void )
*/ */
T_TEST_CASE( RtemsTaskValTask ) T_TEST_CASE( RtemsTaskValTask )
{ {
T_plan( 8 ); T_plan( 12 );
RtemsTaskValTask_Action_0(); RtemsTaskValTask_Action_0();
RtemsTaskValTask_Action_1(); RtemsTaskValTask_Action_1();
@@ -300,6 +349,7 @@ T_TEST_CASE( RtemsTaskValTask )
RtemsTaskValTask_Action_6(); RtemsTaskValTask_Action_6();
RtemsTaskValTask_Action_7(); RtemsTaskValTask_Action_7();
RtemsTaskValTask_Action_8(); RtemsTaskValTask_Action_8();
RtemsTaskValTask_Action_9();
} }
/** @} */ /** @} */

View File

@@ -557,6 +557,11 @@ void RestoreRunnerPriority( void )
SetSelfPriority( 1 ); SetSelfPriority( 1 );
} }
void RestoreRunnerScheduler( void )
{
SetSelfScheduler( SCHEDULER_A_ID, 1 );
}
Thread_Control *GetThread( rtems_id id ) Thread_Control *GetThread( rtems_id id )
{ {
Thread_Control *the_thread; Thread_Control *the_thread;

View File

@@ -228,6 +228,8 @@ void RestoreRunnerMode( void );
void RestoreRunnerPriority( void ); void RestoreRunnerPriority( void );
void RestoreRunnerScheduler( void );
struct _Thread_Control; struct _Thread_Control;
struct _Thread_Control *GetThread( rtems_id id ); struct _Thread_Control *GetThread( rtems_id id );