diff options
author | Jennifer Averett <jennifer.averett@oarcorp.com> | 2014-07-10 11:55:04 -0500 |
---|---|---|
committer | Jennifer Averett <jennifer.averett@oarcorp.com> | 2014-07-11 10:12:48 -0500 |
commit | 247118bf519c18bd646417a817b8a22b304dcc61 (patch) | |
tree | ead8e87b6ce01a13c7e68977f881fb0cb27ebeb4 /testsuites/smptests/smpschedsem01/init.c | |
parent | smpschedaffinity05: Add test for worst case migration for affintiy scheduler. (diff) | |
download | rtems-247118bf519c18bd646417a817b8a22b304dcc61.tar.bz2 |
smpschedsem01: new test.
This test verifies priority is inherited from a high priority
semaphore by a lower priority task.
Diffstat (limited to 'testsuites/smptests/smpschedsem01/init.c')
-rw-r--r-- | testsuites/smptests/smpschedsem01/init.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/testsuites/smptests/smpschedsem01/init.c b/testsuites/smptests/smpschedsem01/init.c new file mode 100644 index 0000000000..894ba812b9 --- /dev/null +++ b/testsuites/smptests/smpschedsem01/init.c @@ -0,0 +1,94 @@ +/* + * COPYRIGHT (c) 2014. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#include <rtems.h> + +#include "tmacros.h" + +const char rtems_test_name[] = "SMPSCHEDSEM 01"; + +#define NUM_CPUS 1 +#define TASK_COUNT 2 +#define TASK_PRIORITY 8 +#define SEM_PRIORITY 5 + +/* + * Test verifies priority, + * Changes priority by obtaining a higher priority semaphore + * Releases semaphore to return priority + */ +static void test(void) +{ + rtems_id id; + rtems_status_code sc; + rtems_task_priority priority; + rtems_id task_sem; + + sc = rtems_semaphore_create( + rtems_build_name('S', 'E', 'M', '0'), + 1, + RTEMS_BINARY_SEMAPHORE | + RTEMS_PRIORITY | + RTEMS_PRIORITY_CEILING, + 5, + &task_sem + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + rtems_task_set_priority(RTEMS_SELF, RTEMS_CURRENT_PRIORITY, &priority); + printf("Init: priority %d expected %d\n",(int)priority, TASK_PRIORITY ); + rtems_test_assert( priority == TASK_PRIORITY ); + + printf("Init: Obtain Semaphore\n"); + sc = rtems_semaphore_obtain (task_sem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_task_set_priority(RTEMS_SELF, RTEMS_CURRENT_PRIORITY, &priority); + printf("Init: priority %d expected %d\n",(int)priority, SEM_PRIORITY ); + rtems_test_assert( priority == SEM_PRIORITY ); + + printf("Init: Release Semaphore\n"); + rtems_semaphore_release(task_sem); + rtems_task_set_priority(RTEMS_SELF, RTEMS_CURRENT_PRIORITY, &priority); + printf("Init: priority %d expected %d\n",(int)priority, TASK_PRIORITY ); + rtems_test_assert( priority == TASK_PRIORITY ); +} + +static void Init(rtems_task_argument arg) +{ + TEST_BEGIN(); + + test(); + + TEST_END(); + rtems_test_exit(0); +} + +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER + +#define CONFIGURE_SMP_APPLICATION + +#define CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP + +#define CONFIGURE_SMP_MAXIMUM_PROCESSORS NUM_CPUS + +#define CONFIGURE_MAXIMUM_TASKS TASK_COUNT + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + +#define CONFIGURE_INIT_TASK_PRIORITY TASK_PRIORITY +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> |