diff options
author | Vijay Kumar Banerjee <vijay@rtems.org> | 2021-05-05 19:30:29 -0600 |
---|---|---|
committer | Vijay Kumar Banerjee <vijay@rtems.org> | 2021-05-06 23:57:25 -0600 |
commit | 2bea88cefe9db70bd63a922b7098a8656df8ea45 (patch) | |
tree | 048fec5e77ac5bcb20492c1027655f7f06060b61 | |
parent | 11ce86e05a77a5790da11ab40927b311d2d22ec3 (diff) |
smpschededf05: partially donestrongapa
-rw-r--r-- | spec/build/testsuites/smptests/grp.yml | 2 | ||||
-rw-r--r-- | spec/build/testsuites/smptests/smpschededf05.yml | 20 | ||||
-rw-r--r-- | testsuites/smptests/smpschededf05/init.c | 137 |
3 files changed, 159 insertions, 0 deletions
diff --git a/spec/build/testsuites/smptests/grp.yml b/spec/build/testsuites/smptests/grp.yml index 771708503e..15e7b90509 100644 --- a/spec/build/testsuites/smptests/grp.yml +++ b/spec/build/testsuites/smptests/grp.yml @@ -106,6 +106,8 @@ links: - role: build-dependency uid: smpschededf04 - role: build-dependency + uid: smpschededf05 +- role: build-dependency uid: smpschedsem01 - role: build-dependency uid: smpscheduler01 diff --git a/spec/build/testsuites/smptests/smpschededf05.yml b/spec/build/testsuites/smptests/smpschededf05.yml new file mode 100644 index 0000000000..449b7ede69 --- /dev/null +++ b/spec/build/testsuites/smptests/smpschededf05.yml @@ -0,0 +1,20 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +build-type: test-program +cflags: [] +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +cppflags: [] +cxxflags: [] +enabled-by: +- RTEMS_SMP +features: c cprogram +includes: [] +ldflags: [] +links: [] +source: +- testsuites/smptests/smpschededf05/init.c +stlib: [] +target: testsuites/smptests/smpschededf05.exe +type: build +use-after: [] +use-before: [] diff --git a/testsuites/smptests/smpschededf05/init.c b/testsuites/smptests/smpschededf05/init.c new file mode 100644 index 0000000000..fc04347d91 --- /dev/null +++ b/testsuites/smptests/smpschededf05/init.c @@ -0,0 +1,137 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "tmacros.h" + +#include <rtems.h> + +const char rtems_test_name[] = "SMPSCHEDEDF 5"; + +#define CPU_COUNT 4 + +#define TASK_COUNT 4 + +#define MAIN rtems_build_name('M', 'A', 'I', 'N') + +#define TA0 rtems_build_name('T', 'A', '0', '0') + +#define TA1 rtems_build_name('T', 'A', '0', '1') + +#define TA2 rtems_build_name('T', 'A', '0', '2') + +#define TA3 rtems_build_name('T', 'A', '0', '3') + +static void do_nothing_task(rtems_task_argument arg) +{ + printf("TA %d\n", (int)arg); + while(1); +} + +static void test(void) +{ + rtems_status_code sc; + rtems_id task[TASK_COUNT]; + rtems_id sched_id; + size_t i; + cpu_set_t cpuset[TASK_COUNT]; + cpu_set_t cpuset_get[TASK_COUNT]; + char ch = '0'; + + for (i = 0; i < TASK_COUNT; ++i){ + CPU_ZERO(&cpuset[i]); + CPU_SET(i, &cpuset[i]); + + sc = rtems_task_create( + rtems_build_name('T', 'A', '0', ch + 1), + 2, + RTEMS_MINIMUM_STACK_SIZE, + RTEMS_DEFAULT_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &task[i] + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + + sc = rtems_scheduler_ident(TA0, &sched_id); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + sc = rtems_task_set_scheduler(task[i], sched_id, 2); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + sc = rtems_task_set_affinity(task[i], sizeof(cpu_set_t), &cpuset[i]); + + sc = rtems_task_start(task[i], do_nothing_task, i); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + } + + for (i = 0; i < 10000000; ++i); + + for (i = 0; i < 2; ++i){ + CPU_ZERO(&cpuset_get[i]); + CPU_SET(i, &cpuset_get[i]); + + sc = rtems_task_get_affinity(task[i], sizeof(cpu_set_t), &cpuset_get[i]); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + rtems_test_assert(CPU_EQUAL(&cpuset[i], &cpuset_get[i])); + + rtems_task_delete(task[i]); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + } + +} + +static void Init(rtems_task_argument arg) +{ + TEST_BEGIN(); + + if (rtems_scheduler_get_processor_maximum() == CPU_COUNT) { + test(); + } else { + puts("warning: wrong processor count to run the test"); + } + + TEST_END(); + rtems_test_exit(0); +} + +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER + +#define CONFIGURE_MAXIMUM_TASKS (1 + TASK_COUNT) + +#define CONFIGURE_MAXIMUM_PROCESSORS CPU_COUNT + + + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION +#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#define CONFIGURE_SCHEDULER_EDF_SMP +#include <rtems/scheduler.h> + + +RTEMS_SCHEDULER_EDF_SMP(a); +RTEMS_SCHEDULER_EDF_SMP(b); +RTEMS_SCHEDULER_EDF_SMP(c); +RTEMS_SCHEDULER_EDF_SMP(d); +RTEMS_SCHEDULER_EDF_SMP(e); + +#define CONFIGURE_SCHEDULER_TABLE_ENTRIES \ + RTEMS_SCHEDULER_TABLE_EDF_SMP( a, MAIN),\ + RTEMS_SCHEDULER_TABLE_EDF_SMP( b, TA0), \ + RTEMS_SCHEDULER_TABLE_EDF_SMP( c, TA1), \ + RTEMS_SCHEDULER_TABLE_EDF_SMP( d, TA2), \ + RTEMS_SCHEDULER_TABLE_EDF_SMP( e, TA3) + +#define CONFIGURE_SCHEDULER_ASSIGNMENTS \ + RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \ + RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \ + RTEMS_SCHEDULER_ASSIGN(2, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \ + RTEMS_SCHEDULER_ASSIGN(3, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL) + +#include <rtems/confdefs.h> |