diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-06-10 08:48:54 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-06-22 14:36:40 +0200 |
commit | 77ff5599e0d8e6d91190a379be21a332f83252b0 (patch) | |
tree | 339e28b236beb9e606322cb801d7340e2e44f8bf /testsuites/smptests/smpscheduler02 | |
parent | score: Delete unused _Scheduler_Priority_compare() (diff) | |
download | rtems-77ff5599e0d8e6d91190a379be21a332f83252b0.tar.bz2 |
score: Introduce map priority scheduler operation
Introduce map/unmap priority scheduler operations to map thread priority
values from/to the user domain to/from the scheduler domain. Use the
map priority operation to validate the thread priority. The EDF
schedulers use this new operation to distinguish between normal
priorities and priorities obtain through a job release.
Update #2173.
Update #2556.
Diffstat (limited to 'testsuites/smptests/smpscheduler02')
-rw-r--r-- | testsuites/smptests/smpscheduler02/init.c | 35 |
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 |