File indexing completed on 2025-05-11 08:24:45
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #ifdef HAVE_CONFIG_H
0030 #include "config.h"
0031 #endif
0032
0033 #include <tmacros.h>
0034
0035 const char rtems_test_name[] = "SP 51";
0036
0037
0038 rtems_task Init(rtems_task_argument argument);
0039
0040 static void test_create_initially_locked_prio_inherit_sema(void)
0041 {
0042 rtems_status_code sc;
0043 rtems_id id;
0044 rtems_task_priority prio_a;
0045 rtems_task_priority prio_b;
0046 rtems_task_priority prio_ceiling = 0;
0047
0048 sc = rtems_task_set_priority(RTEMS_SELF, RTEMS_CURRENT_PRIORITY, &prio_a);
0049 rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0050
0051 rtems_test_assert(prio_a != prio_ceiling);
0052
0053 sc = rtems_semaphore_create(
0054 rtems_build_name( 'S', 'E', 'M', 'A' ),
0055 0,
0056 RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY,
0057 prio_ceiling,
0058 &id
0059 );
0060 rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0061
0062 sc = rtems_task_set_priority(RTEMS_SELF, RTEMS_CURRENT_PRIORITY, &prio_b);
0063 rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0064
0065 rtems_test_assert(prio_a == prio_b);
0066
0067 sc = rtems_semaphore_release(id);
0068 rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0069
0070 sc = rtems_semaphore_delete(id);
0071 rtems_test_assert(sc == RTEMS_SUCCESSFUL);
0072 }
0073
0074 rtems_task Init(
0075 rtems_task_argument argument
0076 )
0077 {
0078 rtems_status_code sc;
0079 rtems_id mutex;
0080
0081 TEST_BEGIN();
0082
0083 puts( "Create semaphore - priority ceiling unlocked - invalid ceiling" );
0084 sc = rtems_semaphore_create(
0085 rtems_build_name( 'S', 'E', 'M', '1' ),
0086 0,
0087 RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY_CEILING | RTEMS_PRIORITY,
0088 UINT32_MAX,
0089 &mutex
0090 );
0091 fatal_directive_status(sc, RTEMS_INVALID_PRIORITY, "rtems_semaphore_create");
0092
0093 puts( "Create semaphore - priority ceiling locked - violate ceiling" );
0094 sc = rtems_semaphore_create(
0095 rtems_build_name( 'S', 'E', 'M', '1' ),
0096 0,
0097 RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY_CEILING | RTEMS_PRIORITY,
0098 (RTEMS_MAXIMUM_PRIORITY - 4u),
0099 &mutex
0100 );
0101 fatal_directive_status(sc, RTEMS_INVALID_PRIORITY, "rtems_semaphore_create");
0102
0103 puts( "Create semaphore - priority ceiling unlocked" );
0104 sc = rtems_semaphore_create(
0105 rtems_build_name( 'S', 'E', 'M', '1' ),
0106 1,
0107 RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY_CEILING | RTEMS_PRIORITY,
0108 (RTEMS_MAXIMUM_PRIORITY - 4u),
0109 &mutex
0110 );
0111 directive_failed( sc, "rtems_semaphore_create" );
0112
0113 puts( "Obtain semaphore -- violate ceiling" );
0114 sc = rtems_semaphore_obtain( mutex, RTEMS_DEFAULT_OPTIONS, 0 );
0115 fatal_directive_status(
0116 sc, RTEMS_INVALID_PRIORITY, "rtems_semaphore_obtain" );
0117
0118 puts( "Release semaphore we did not obtain" );
0119 sc = rtems_semaphore_release( mutex );
0120 fatal_directive_status(
0121 sc, RTEMS_NOT_OWNER_OF_RESOURCE, "rtems_semaphore_release" );
0122
0123 sc = rtems_semaphore_delete( mutex );
0124 directive_failed( sc, "rtems_semaphore_delete" );
0125
0126 test_create_initially_locked_prio_inherit_sema();
0127
0128 TEST_END();
0129 rtems_test_exit( 0 );
0130 }
0131
0132
0133
0134
0135 #define CONFIGURE_INIT
0136 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0137 #define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
0138
0139 #define CONFIGURE_MAXIMUM_TASKS 1
0140 #define CONFIGURE_MAXIMUM_SEMAPHORES 1
0141
0142 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
0143
0144 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
0145
0146 #include <rtems/confdefs.h>
0147
0148