[PATCH] Add new Strong APA test
Richi Dubey
richidubey at gmail.com
Wed Sep 2 15:36:58 UTC 2020
Please ignore this patch and refer to
https://lists.rtems.org/pipermail/devel/2020-September/061766.html.
On Wed, Sep 2, 2020 at 8:56 PM Richi Dubey <richidubey at gmail.com> wrote:
> ---
> testsuites/smptests/smpstrongapa01/init.c | 62 +++++++++++++++--------
> 1 file changed, 40 insertions(+), 22 deletions(-)
>
> diff --git a/testsuites/smptests/smpstrongapa01/init.c
> b/testsuites/smptests/smpstrongapa01/init.c
> index bf8bc05231..3053bed785 100644
> --- a/testsuites/smptests/smpstrongapa01/init.c
> +++ b/testsuites/smptests/smpstrongapa01/init.c
> @@ -1,4 +1,5 @@
> /*
> + * Copyright (c) 2020 Richi Dubey (richidubey at gmail.com)
> * Copyright (c) 2016, 2017 embedded brains GmbH. All rights reserved.
> *
> * embedded brains GmbH
> @@ -16,7 +17,7 @@
> #include "config.h"
> #endif
>
> -#include "tmacros.h"
> +#include <tmacros.h>
>
> #include <rtems.h>
>
> @@ -24,15 +25,22 @@ const char rtems_test_name[] = "SMPSTRONGAPA 1";
>
> #define CPU_COUNT 4
>
> -#define TASK_COUNT (3 * CPU_COUNT)
> +#define TASK_COUNT 5
>
> #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, cpu3) ( (cpu3 < 3) | (cpu2 << 2 ) | (cpu1 <<
> 1) | cpu0 )
>
> -#define NAME rtems_build_name('S', 'A', 'P', 'A')
> +typedef enum {
> + T0,
> + T1,
> + T2,
> + T3,
> + T4,
> + IDLE
> +} task_index;
>
> typedef struct {
> enum {
> @@ -43,7 +51,7 @@ typedef struct {
> KIND_UNBLOCK
> } kind;
>
> - size_t index;
> + task_index index;
>
> struct {
> rtems_task_priority priority;
> @@ -65,7 +73,7 @@ typedef struct {
> KIND_RESET, \
> 0, \
> { 0 }, \
> - { IDLE, IDLE, IDLE, IDLE } \
> + { IDLE, IDLE, IDLE, IDLE} \
> }
>
> #define SET_PRIORITY(index, prio, cpu0, cpu1, cpu2, cpu3) \
> @@ -73,7 +81,7 @@ typedef struct {
> KIND_SET_PRIORITY, \
> index, \
> { .priority = prio }, \
> - { cpu0, cpu1, cpu2, cpu3 } \
> + { cpu0, cpu1, cpu2, cpu3} \
> }
>
> #define SET_AFFINITY(index, aff, cpu0, cpu1, cpu2, cpu3) \
> @@ -97,22 +105,29 @@ typedef struct {
> KIND_UNBLOCK, \
> index, \
> { 0 }, \
> - { cpu0, cpu1, cpu2, cpu3 } \
> + { cpu0, cpu1, cpu2, cpu3} \
> }
>
> 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, IDLE),
> + UNBLOCK( T1, T0, T1, IDLE, IDLE),
> + UNBLOCK( T2, T0, T1, T2, IDLE),
> + UNBLOCK( T3, T0, T1, T2, T3),
> + UNBLOCK( T4, T0, T1, T2, T3),
> + SET_PRIORITY( T0, P(0), T0, T1, T2, T3),
> + SET_PRIORITY( T1, P(1), T0, T1, T2, T3),
> + SET_PRIORITY( T2, P(2), T0, T1, T2, T3),
> + /*
> + * Introduce Task 4 intially with lowest priority to imitate late
> arrival
> + */
> + SET_PRIORITY( T4, P(5), T0, T1, T2, T3),
> + SET_PRIORITY( T3, P(4), T0, T1, T2, T3),
> + SET_AFFINITY( T4, A(1, 0, 0, 0), T0, T1, T2, T3),
> + /*
> + * Show that higher priority task gets dislodged from its processor
> + */
> + SET_PRIORITY( T4, P(3), T4, T1, T2, T0),
> RESET
> };
>
> @@ -182,7 +197,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 +294,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 +307,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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20200902/1d72dca7/attachment.html>
More information about the devel
mailing list