Hi Richi, On Wed, Aug 19, 2020 at 9:52 AM Richi Dubey <richidu...@gmail.com> wrote: > > Hi, > > I would request someone to please verify if this patch looks correct since I > am testing my code on this test. The logic is taken from the paper and I was > wondering if the reset function is handled correctly in this test because I > still have a little hard time understanding how (and why) we are reordering > the idle threads. Please let me know if there's anything that looks astray. >
The test logic makes sense to me. The only question I have is whether SET_PRIORITY( T2,P(2), T2, T1, T0), could also be SET_PRIORITY( T2,P(2), T2, T0, T1), I don't know these tests well enough to say for sure about what reset() is doing. It looks to be suspending every task, resuming 1 task on every CPU, and then suspending that task (assuming there is only 1 runnable non-idle task on each CPU, and therefore executing == heir). > Also, the same test can be accessed from this link: > https://github.com/richidubey/rtems/blob/Strong-APA-v1.3/testsuites/smptests/smpstrongapa01/init.c > > Thanks, > Richi. > > On Wed, Aug 19, 2020 at 9:18 PM Richi Dubey <richidu...@gmail.com> wrote: >> >> --- >> 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 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel