--- testsuites/smptests/smpstrongapa01/init.c | 72 ++++++++++++++--------- 1 file changed, 43 insertions(+), 29 deletions(-)
diff --git a/testsuites/smptests/smpstrongapa01/init.c b/testsuites/smptests/smpstrongapa01/init.c index bf8bc05231..e7abacd519 100644 --- a/testsuites/smptests/smpstrongapa01/init.c +++ b/testsuites/smptests/smpstrongapa01/init.c @@ -1,4 +1,5 @@ /* + * Copyright (c) 2020 Richi Dubey ( richidu...@gmail.com ) * Copyright (c) 2016, 2017 embedded brains GmbH. All rights reserved. * * embedded brains GmbH @@ -16,23 +17,28 @@ #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 2 -#define TASK_COUNT (3 * CPU_COUNT) +#define TASK_COUNT 3 #define P(i) (UINT32_C(2) + i) #define ALL ((UINT32_C(1) << CPU_COUNT) - 1) -#define IDLE UINT8_C(255) +#define A(cpu0, cpu1) ( (cpu1 << 1) | cpu0 ) -#define NAME rtems_build_name('S', 'A', 'P', 'A') +typedef enum { + T0, + T1, + T2, + IDLE +} task_index; typedef struct { enum { @@ -43,7 +49,7 @@ typedef struct { KIND_UNBLOCK } kind; - size_t index; + task_index index; struct { rtems_task_priority priority; @@ -65,54 +71,59 @@ typedef struct { KIND_RESET, \ 0, \ { 0 }, \ - { IDLE, IDLE, IDLE, IDLE } \ + { IDLE, IDLE} \ } -#define SET_PRIORITY(index, prio, cpu0, cpu1, cpu2, cpu3) \ +#define SET_PRIORITY(index, prio, cpu0, cpu1) \ { \ KIND_SET_PRIORITY, \ index, \ { .priority = prio }, \ - { cpu0, cpu1, cpu2, cpu3 } \ + { cpu0, cpu1} \ } -#define SET_AFFINITY(index, aff, cpu0, cpu1, cpu2, cpu3) \ +#define SET_AFFINITY(index, aff, cpu0, cpu1) \ { \ KIND_SET_AFFINITY, \ index, \ { .cpu_set = aff }, \ - { cpu0, cpu1, cpu2, cpu3 } \ + { cpu0, cpu1 } \ } -#define BLOCK(index, cpu0, cpu1, cpu2, cpu3) \ +#define BLOCK(index, cpu0, cpu1) \ { \ KIND_BLOCK, \ index, \ { 0 }, \ - { cpu0, cpu1, cpu2, cpu3 } \ + { cpu0, cpu1 } \ } -#define UNBLOCK(index, cpu0, cpu1, cpu2, cpu3) \ +#define UNBLOCK(index, cpu0, cpu1) \ { \ KIND_UNBLOCK, \ index, \ { 0 }, \ - { cpu0, cpu1, cpu2, cpu3 } \ + { cpu0, cpu1} \ } 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), + UNBLOCK( T1, T0, T1), + UNBLOCK( T2, T0, T1), + SET_PRIORITY( T0, P(0), T0, T1), + /* + * Introduce Task 2 intially with lowest priority to imitate late arrival + */ + SET_PRIORITY( T2, P(4), T0, T1), + SET_PRIORITY( T1, P(3), T0, T1), + SET_AFFINITY( T0, ALL, T0, T1), + SET_AFFINITY( T1, A(0, 1), T0, T1), + SET_AFFINITY( T2, A(1, 0), T0, T1), + /* + * Show that higher priority task gets dislodged from its processor + */ + SET_PRIORITY( T2, P(2), T2, T0), RESET }; @@ -182,7 +193,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 +290,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 +303,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