summaryrefslogtreecommitdiffstats
path: root/testsuites/smptests/smpscheduler02/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuites/smptests/smpscheduler02/init.c')
-rw-r--r--testsuites/smptests/smpscheduler02/init.c35
1 files changed, 33 insertions, 2 deletions
diff --git a/testsuites/smptests/smpscheduler02/init.c b/testsuites/smptests/smpscheduler02/init.c
index 479e468147..52b3f61816 100644
--- a/testsuites/smptests/smpscheduler02/init.c
+++ b/testsuites/smptests/smpscheduler02/init.c
@@ -35,6 +35,8 @@ const char rtems_test_name[] = "SMPSCHEDULER 2";
static rtems_id main_task_id;
+static rtems_id sema_id;
+
static void task(rtems_task_argument arg)
{
rtems_status_code sc;
@@ -45,6 +47,9 @@ static void task(rtems_task_argument arg)
rtems_test_assert(sched_get_priority_min(SCHED_RR) == 1);
rtems_test_assert(sched_get_priority_max(SCHED_RR) == 126);
+ sc = rtems_semaphore_obtain(sema_id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
+ rtems_test_assert(sc == RTEMS_NOT_DEFINED);
+
sc = rtems_event_transient_send(main_task_id);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
@@ -61,6 +66,7 @@ static void test(void)
rtems_id scheduler_a_id;
rtems_id scheduler_b_id;
rtems_id scheduler_c_id;
+ rtems_task_priority prio;
cpu_set_t cpuset;
cpu_set_t first_cpu;
cpu_set_t second_cpu;
@@ -95,6 +101,27 @@ static void test(void)
sc = rtems_scheduler_ident(SCHED_C, &scheduler_c_id);
rtems_test_assert(sc == RTEMS_UNSATISFIED);
+ sc = rtems_semaphore_create(
+ SCHED_A,
+ 1,
+ RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_PRIORITY_CEILING,
+ 1,
+ &sema_id
+ );
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ prio = 2;
+ sc = rtems_semaphore_set_priority(sema_id, scheduler_a_id, prio, &prio);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+ rtems_test_assert(prio == 1);
+
+ if (cpu_count > 1) {
+ prio = 1;
+ sc = rtems_semaphore_set_priority(sema_id, scheduler_b_id, prio, &prio);
+ rtems_test_assert(sc == RTEMS_NOT_DEFINED);
+ rtems_test_assert(prio == 2);
+ }
+
CPU_ZERO(&cpuset);
sc = rtems_scheduler_get_processor_set(
scheduler_a_id,
@@ -182,6 +209,9 @@ static void test(void)
sc = rtems_task_delete(task_id);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_semaphore_delete(sema_id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
#else /* defined(__RTEMS_HAVE_SYS_CPUSET_H__) */
@@ -212,6 +242,9 @@ static void Init(rtems_task_argument arg)
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_MAXIMUM_TASKS 2
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1
+
#define CONFIGURE_SMP_APPLICATION
/* Lets see when the first RTEMS system hits this limit */
@@ -269,8 +302,6 @@ RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP(c);
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
RTEMS_SCHEDULER_ASSIGN(2, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
-#define CONFIGURE_MAXIMUM_TASKS 2
-
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE