summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVijay Kumar Banerjee <vijay@rtems.org>2021-05-05 19:30:29 -0600
committerVijay Kumar Banerjee <vijay@rtems.org>2021-05-06 23:57:25 -0600
commit2bea88cefe9db70bd63a922b7098a8656df8ea45 (patch)
tree048fec5e77ac5bcb20492c1027655f7f06060b61
parent11ce86e05a77a5790da11ab40927b311d2d22ec3 (diff)
smpschededf05: partially donestrongapa
-rw-r--r--spec/build/testsuites/smptests/grp.yml2
-rw-r--r--spec/build/testsuites/smptests/smpschededf05.yml20
-rw-r--r--testsuites/smptests/smpschededf05/init.c137
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>