summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-11-13 22:19:37 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-11-19 08:44:23 +0100
commitbf94588b6da8d29dc6406775bae270aeeb05cde0 (patch)
tree4e00426a23d495e37c480304d5f2ea63ec5bdee1
parent190161dcc8ef740f5256ad80a76d765a8f8aea28 (diff)
ts-default ts-config
-rw-r--r--testsuites/validation/ts-config.h29
-rw-r--r--testsuites/validation/ts-default.h76
-rw-r--r--testsuites/validation/tx-support.h4
3 files changed, 99 insertions, 10 deletions
diff --git a/testsuites/validation/ts-config.h b/testsuites/validation/ts-config.h
index 6bfbfb3571..b31cfa3e87 100644
--- a/testsuites/validation/ts-config.h
+++ b/testsuites/validation/ts-config.h
@@ -51,6 +51,12 @@ extern "C" {
#define TEST_MICROSECONDS_PER_TICK 1000
+#define TEST_RUNNER_NAME rtems_build_name( 'R', 'U', 'N', ' ' )
+
+#define TEST_RUNNER_ARGUMENT 123456789
+
+#define TEST_RUNNER_INITIAL_MODES RTEMS_NO_ASR
+
#define TEST_SCHEDULER_A_NAME rtems_build_name( 'A', ' ', ' ', ' ' )
#define TEST_SCHEDULER_B_NAME rtems_build_name( 'B', ' ', ' ', ' ' )
@@ -60,11 +66,20 @@ extern "C" {
#define TEST_SCHEDULER_D_NAME rtems_build_name( 'D', ' ', ' ', ' ' )
#if defined( __OPTIMIZE__ ) && !defined( RTEMS_COVERAGE )
-#define TEST_MINIMUM_STACK_SIZE RTEMS_MINIMUM_STACK_SIZE
+#define TEST_BASE_STACK_SIZE RTEMS_MINIMUM_STACK_SIZE
#else
-#define TEST_MINIMUM_STACK_SIZE ( 4 * RTEMS_MINIMUM_STACK_SIZE )
+#define TEST_BASE_STACK_SIZE ( 4 * RTEMS_MINIMUM_STACK_SIZE )
#endif
+#define TEST_MINIMUM_STACK_SIZE \
+ ( TEST_BASE_STACK_SIZE + CPU_STACK_ALIGNMENT )
+
+#define TEST_IDLE_STACK_SIZE \
+ ( TEST_BASE_STACK_SIZE + 2 * CPU_STACK_ALIGNMENT )
+
+#define TEST_INTERRUPT_STACK_SIZE \
+ ( TEST_BASE_STACK_SIZE + 4 * CPU_INTERRUPT_STACK_ALIGNMENT )
+
#define TEST_MAXIMUM_BARRIERS 7
#define TEST_MAXIMUM_MESSAGE_QUEUES 3
@@ -91,6 +106,16 @@ void *test_task_stack_allocate( size_t size );
void test_task_stack_deallocate( void *stack );
+void *test_idle_task_stack_allocate( uint32_t cpu_index, size_t size );
+
+void *test_idle_task_body( uintptr_t unused );
+
+extern rtems_task_argument test_runner_argument;
+
+extern rtems_task_priority test_runner_initial_priority;
+
+extern rtems_mode test_runner_initial_modes;
+
/** @} */
#ifdef __cplusplus
diff --git a/testsuites/validation/ts-default.h b/testsuites/validation/ts-default.h
index 3f95c93de9..7e4798e0e5 100644
--- a/testsuites/validation/ts-default.h
+++ b/testsuites/validation/ts-default.h
@@ -32,7 +32,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <rtems.h>
+#include <bsp.h>
#include <rtems/bspIo.h>
#include <rtems/chain.h>
#include <rtems/test-info.h>
@@ -101,11 +101,29 @@ static union {
rtems_chain_node node;
} task_storage[ MAX_TASKS ];
-static void Init( rtems_task_argument arg )
+rtems_task_argument test_runner_argument;
+
+rtems_task_priority test_runner_initial_priority;
+
+rtems_mode test_runner_initial_modes;
+
+static void Runner( rtems_task_argument arg )
{
int exit_code;
- (void) arg;
+ test_runner_argument = arg;
+
+ (void) rtems_task_mode(
+ RTEMS_ASR,
+ RTEMS_ASR_MASK,
+ &test_runner_initial_modes
+ );
+
+ (void) rtems_task_set_priority(
+ RTEMS_SELF,
+ PRIO_DEFAULT,
+ &test_runner_initial_priority
+ );
rtems_chain_initialize(
&free_task_storage,
@@ -131,6 +149,8 @@ void *test_task_stack_allocate( size_t size )
return NULL;
}
+ T_quiet_ge_sz( size, TEST_MINIMUM_STACK_SIZE );
+
return rtems_chain_get_unprotected( &free_task_storage );
}
@@ -146,7 +166,9 @@ void test_task_stack_deallocate( void *stack )
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#endif
-#define CONFIGURE_INTERRUPT_STACK_SIZE TEST_MINIMUM_STACK_SIZE
+#define CONFIGURE_MINIMUM_TASK_STACK_SIZE TEST_MINIMUM_STACK_SIZE
+
+#define CONFIGURE_INTERRUPT_STACK_SIZE TEST_INTERRUPT_STACK_SIZE
#define CONFIGURE_MAXIMUM_BARRIERS TEST_MAXIMUM_BARRIERS
@@ -187,12 +209,20 @@ void test_task_stack_deallocate( void *stack )
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_INIT_TASK_ATTRIBUTES TASK_ATTRIBUTES
+#define CONFIGURE_INIT_TASK_ARGUMENTS TEST_RUNNER_ARGUMENT
-#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES
+#define CONFIGURE_INIT_TASK_ATTRIBUTES ( RTEMS_SYSTEM_TASK | TASK_ATTRIBUTES )
#define CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE TASK_STORAGE_SIZE
+#define CONFIGURE_INIT_TASK_ENTRY_POINT Runner
+
+#define CONFIGURE_INIT_TASK_INITIAL_MODES TEST_RUNNER_INITIAL_MODES
+
+#define CONFIGURE_INIT_TASK_NAME TEST_RUNNER_NAME
+
+#define CONFIGURE_INIT_TASK_PRIORITY 0
+
#if !defined( CONFIGURE_INITIAL_EXTENSIONS )
#define CONFIGURE_INITIAL_EXTENSIONS { .fatal = FatalInitialExtension }
#endif
@@ -268,8 +298,42 @@ T_scheduler_operations[ CONFIGURE_MAXIMUM_PROCESSORS ] = {
#define CONFIGURE_SCHEDULER_NAME TEST_SCHEDULER_A_NAME
+#define CONFIGURE_SCHEDULER_PRIORITY
+
+#define CONFIGURE_MAXIMUM_PRIORITY 127
+
#endif
+#define CONFIGURE_IDLE_TASK_STACK_SIZE TEST_IDLE_STACK_SIZE
+
+static char test_idle_stacks[ CONFIGURE_MAXIMUM_PROCESSORS ][
+ ( TEST_IDLE_STACK_SIZE + CPU_IDLE_TASK_IS_FP * CONTEXT_FP_SIZE )
+]
+RTEMS_ALIGNED( CPU_INTERRUPT_STACK_ALIGNMENT )
+RTEMS_SECTION( ".rtemsstack.idle" );
+
+void *test_idle_task_stack_allocate( uint32_t cpu_index, size_t size )
+{
+ if ( size > sizeof( test_idle_stacks[ 0 ] ) ) {
+ rtems_fatal( RTEMS_FATAL_SOURCE_APPLICATION, 0xABAD1DEA );
+ }
+
+ return &test_idle_stacks[ cpu_index ][0];
+}
+
+#define CONFIGURE_TASK_STACK_ALLOCATOR_FOR_IDLE test_idle_task_stack_allocate
+
+void *test_idle_task_body( uintptr_t unused )
+{
+#if defined(BSP_IDLE_TASK_BODY)
+ return BSP_IDLE_TASK_BODY( unused );
+#else
+ return _CPU_Thread_Idle_body( unused );
+#endif
+}
+
+#define CONFIGURE_IDLE_TASK_BODY test_idle_task_body
+
#define CONFIGURE_INIT
#include <rtems/confdefs.h>
diff --git a/testsuites/validation/tx-support.h b/testsuites/validation/tx-support.h
index efbb8097b2..5f0076363b 100644
--- a/testsuites/validation/tx-support.h
+++ b/testsuites/validation/tx-support.h
@@ -84,7 +84,7 @@ typedef enum {
* It may be used for the runner thread together with PRIO_FLEXIBLE for worker
* threads.
*/
-#define PRIO_NEARLY_IDLE 254
+#define PRIO_NEARLY_IDLE 126
/**
* @brief This constants represents a priority with a wider range of higher and
@@ -93,7 +93,7 @@ typedef enum {
* It may be used for the worker threads together with PRIO_NEARLY_IDLE for the
* runner thread.
*/
-#define PRIO_FLEXIBLE 128
+#define PRIO_FLEXIBLE 64
/**
* @brief This constants represents an invalid RTEMS object identifier.