--- testsuites/smptests/smpstrongapa01/init.c | 85 +++++++++++++---------- 1 file changed, 49 insertions(+), 36 deletions(-)
diff --git a/testsuites/smptests/smpstrongapa01/init.c b/testsuites/smptests/smpstrongapa01/init.c index bf8bc05231..89cc6404b9 100644 --- a/testsuites/smptests/smpstrongapa01/init.c +++ b/testsuites/smptests/smpstrongapa01/init.c @@ -1,38 +1,40 @@ /* - * Copyright (c) 2016, 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2020 Richi Dubey + * All rights reserved. * - * embedded brains GmbH - * Dornierstr. 4 - * 82178 Puchheim - * Germany - * <rt...@embedded-brains.de> + * richidu...@gmail.com * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.org/license/LICENSE. */ - #ifdef HAVE_CONFIG_H #include "config.h" #endif -#include "tmacros.h" +#include <tmacros.h> #include <rtems.h> const char rtems_test_name[] = "SMPSTRONGAPA 1"; -#define CPU_COUNT 4 +#define CPU_COUNT 3 -#define TASK_COUNT (3 * CPU_COUNT) +#define TASK_COUNT 4 #define P(i) (UINT32_C(2) + i) #define ALL ((UINT32_C(1) << CPU_COUNT) - 1) -#define IDLE UINT8_C(255) +#define A(cpu0, cpu1, cpu2) ((cpu2 << 2) | (cpu1 << 1) | cpu0) -#define NAME rtems_build_name('S', 'A', 'P', 'A') +typedef enum { + T0, + T1, + T2, + T3, + IDLE +} task_index; typedef struct { enum { @@ -43,7 +45,7 @@ typedef struct { KIND_UNBLOCK } kind; - size_t index; + task_index index; struct { rtems_task_priority priority; @@ -65,54 +67,62 @@ typedef struct { KIND_RESET, \ 0, \ { 0 }, \ - { IDLE, IDLE, IDLE, IDLE } \ + { IDLE, IDLE, IDLE} \ } -#define SET_PRIORITY(index, prio, cpu0, cpu1, cpu2, cpu3) \ +#define SET_PRIORITY(index, prio, cpu0, cpu1, cpu2) \ { \ KIND_SET_PRIORITY, \ index, \ { .priority = prio }, \ - { cpu0, cpu1, cpu2, cpu3 } \ + { cpu0, cpu1, cpu2 } \ } -#define SET_AFFINITY(index, aff, cpu0, cpu1, cpu2, cpu3) \ +#define SET_AFFINITY(index, aff, cpu0, cpu1, cpu2) \ { \ KIND_SET_AFFINITY, \ index, \ { .cpu_set = aff }, \ - { cpu0, cpu1, cpu2, cpu3 } \ + { cpu0, cpu1, cpu2 } \ } -#define BLOCK(index, cpu0, cpu1, cpu2, cpu3) \ +#define BLOCK(index, cpu0, cpu1, cpu2) \ { \ KIND_BLOCK, \ index, \ { 0 }, \ - { cpu0, cpu1, cpu2, cpu3 } \ + { cpu0, cpu1, cpu2 } \ } -#define UNBLOCK(index, cpu0, cpu1, cpu2, cpu3) \ +#define UNBLOCK(index, cpu0, cpu1, cpu2) \ { \ KIND_UNBLOCK, \ index, \ { 0 }, \ - { cpu0, cpu1, cpu2, cpu3 } \ + { cpu0, cpu1, cpu2 } \ } static const test_action test_actions[] = { RESET, - UNBLOCK( 0, 0, IDLE, IDLE, IDLE), - UNBLOCK( 1, 0, 1, IDLE, IDLE), - UNBLOCK( 2, 0, 1, 2, IDLE), - UNBLOCK( 3, 0, 1, 2, 3), - UNBLOCK( 5, 0, 1, 2, 3), - SET_PRIORITY( 3, P(4), 0, 1, 2, 3), - SET_PRIORITY( 5, P(3), 0, 1, 2, 5), - BLOCK( 5, 0, 1, 2, 3), - SET_AFFINITY( 5, ALL, 0, 1, 2, 3), - RESET, - UNBLOCK( 0, 0, IDLE, IDLE, IDLE), + UNBLOCK( T0, T0, IDLE, IDLE), + UNBLOCK( T1, T0, T1, IDLE), + UNBLOCK( T2, T0, T1, T2), + UNBLOCK( T3, T0, T1, T2), + SET_PRIORITY( T0, P(0), T0, T1, T2), + SET_PRIORITY( T1, P(1), T0, T1, T2), + SET_PRIORITY( T3, P(3), T0, T1, T2), + /* + * Introduce Task 2 intially with lowest priority to imitate late arrival + */ + SET_PRIORITY( T2, P(4), T0, T1, T3), + SET_AFFINITY( T0, ALL, T0, T1, T3), + SET_AFFINITY( T1, A(0, 1, 1), T0, T1, T3), + SET_AFFINITY( T2, A(1, 0, 0), T0, T1, T3), + SET_AFFINITY( T3, A(0, 1, 1), T0, T1, T3), + /* + * Show that higher priority task gets dislodged from its processor + */ + SET_PRIORITY( T2, P(2), T2, T1, T0), RESET }; @@ -182,7 +192,7 @@ static void check_cpu_allocations(test_context *ctx, const test_action *action) size_t i; for (i = 0; i < CPU_COUNT; ++i) { - size_t e; + task_index e; const Per_CPU_Control *c; const Thread_Control *h; @@ -279,7 +289,7 @@ static void test(void) for (i = 0; i < TASK_COUNT; ++i) { sc = rtems_task_create( - NAME, + rtems_build_name(' ', ' ', 'T', '0' + i), P(i), RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, @@ -292,7 +302,10 @@ static void test(void) rtems_test_assert(sc == RTEMS_SUCCESSFUL); } - sc = rtems_timer_create(NAME, &ctx->timer_id); + sc = rtems_timer_create( + rtems_build_name('A', 'C', 'T', 'N'), + &ctx->timer_id + ); rtems_test_assert(sc == RTEMS_SUCCESSFUL); sc = rtems_timer_fire_after(ctx->timer_id, 1, timer, ctx); -- 2.17.1 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel