summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-03-12 14:16:30 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-03-16 14:47:25 +0100
commit0965b7c8b7956846167f43b813d68f8b5f2a60a1 (patch)
tree4c04e95b8512923fa6678413f7482e8be739fa89
parentsp14: Fix for SMP or robust thread dispatch (diff)
downloadrtems-0965b7c8b7956846167f43b813d68f8b5f2a60a1.tar.bz2
rtems: Require RTEMS_PRIORITY for MrsP semaphores
MrsP semaphores are a generalization of the priority ceiling semaphores for SMP configurations. Priority ceiling semaphores are required to use the priority task wait queue discipline. Require this discipline also for MrsP semaphores. Close #4347.
-rw-r--r--cpukit/include/rtems/rtems/sem.h3
-rw-r--r--cpukit/rtems/src/semcreate.c4
-rw-r--r--testsuites/smptests/smpfatal03/init.c4
-rw-r--r--testsuites/smptests/smpmrsp01/init.c8
-rw-r--r--testsuites/smptests/smpscheduler02/init.c3
-rw-r--r--testsuites/sptests/spmrsp01/init.c23
-rw-r--r--testsuites/tmtests/tmfine01/init.c3
7 files changed, 28 insertions, 20 deletions
diff --git a/cpukit/include/rtems/rtems/sem.h b/cpukit/include/rtems/rtems/sem.h
index 74d0ab45a3..1f0c952294 100644
--- a/cpukit/include/rtems/rtems/sem.h
+++ b/cpukit/include/rtems/rtems/sem.h
@@ -803,7 +803,8 @@ rtems_status_code rtems_semaphore_flush( rtems_id id );
* sc = rtems_semaphore_create(
* rtems_build_name( 'M', 'R', 'S', 'P' ),
* 1,
- * RTEMS_BINARY_SEMAPHORE | RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
+ * RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
+ * RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
* 1,
* &semaphore_id
* );
diff --git a/cpukit/rtems/src/semcreate.c b/cpukit/rtems/src/semcreate.c
index 3647bb7b13..0246c91bc9 100644
--- a/cpukit/rtems/src/semcreate.c
+++ b/cpukit/rtems/src/semcreate.c
@@ -93,8 +93,8 @@ rtems_status_code rtems_semaphore_create(
) {
variant = SEMAPHORE_VARIANT_MUTEX_PRIORITY_CEILING;
} else if (
- mutex_with_protocol
- == ( RTEMS_BINARY_SEMAPHORE | RTEMS_MULTIPROCESSOR_RESOURCE_SHARING )
+ mutex_with_protocol == ( RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
+ RTEMS_MULTIPROCESSOR_RESOURCE_SHARING )
) {
#if defined(RTEMS_SMP)
variant = SEMAPHORE_VARIANT_MRSP;
diff --git a/testsuites/smptests/smpfatal03/init.c b/testsuites/smptests/smpfatal03/init.c
index c40194aacb..7eb681b9f9 100644
--- a/testsuites/smptests/smpfatal03/init.c
+++ b/testsuites/smptests/smpfatal03/init.c
@@ -41,8 +41,8 @@ static void Init( rtems_task_argument arg )
sc = rtems_semaphore_create(
rtems_build_name('M', 'R', 'S', 'P'),
1,
- RTEMS_MULTIPROCESSOR_RESOURCE_SHARING
- | RTEMS_BINARY_SEMAPHORE,
+ RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
+ RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
1,
&sem_id
);
diff --git a/testsuites/smptests/smpmrsp01/init.c b/testsuites/smptests/smpmrsp01/init.c
index 11535763ca..76bb928982 100644
--- a/testsuites/smptests/smpmrsp01/init.c
+++ b/testsuites/smptests/smpmrsp01/init.c
@@ -257,8 +257,8 @@ static void create_mrsp_sema(
sc = rtems_semaphore_create(
rtems_build_name('M', 'R', 'S', 'P'),
1,
- RTEMS_MULTIPROCESSOR_RESOURCE_SHARING
- | RTEMS_BINARY_SEMAPHORE,
+ RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
+ RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
prio,
id
);
@@ -744,8 +744,8 @@ static void test_mrsp_initially_locked_error(void)
sc = rtems_semaphore_create(
rtems_build_name('M', 'R', 'S', 'P'),
0,
- RTEMS_MULTIPROCESSOR_RESOURCE_SHARING
- | RTEMS_BINARY_SEMAPHORE,
+ RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
+ RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
1,
&id
);
diff --git a/testsuites/smptests/smpscheduler02/init.c b/testsuites/smptests/smpscheduler02/init.c
index 9297efec23..b337fc667e 100644
--- a/testsuites/smptests/smpscheduler02/init.c
+++ b/testsuites/smptests/smpscheduler02/init.c
@@ -82,7 +82,8 @@ static void sticky_task(rtems_task_argument arg)
sc = rtems_semaphore_create(
rtems_build_name(' ', 'M', 'T', 'X'),
1,
- RTEMS_BINARY_SEMAPHORE | RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
+ RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
+ RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
2,
&mtx_id
);
diff --git a/testsuites/sptests/spmrsp01/init.c b/testsuites/sptests/spmrsp01/init.c
index a5f645d534..ca35d90595 100644
--- a/testsuites/sptests/spmrsp01/init.c
+++ b/testsuites/sptests/spmrsp01/init.c
@@ -53,8 +53,8 @@ static void test_mrsp_create_errors(void)
sc = rtems_semaphore_create(
rtems_build_name('M', 'R', 'S', 'P'),
1,
- RTEMS_MULTIPROCESSOR_RESOURCE_SHARING
- | RTEMS_BINARY_SEMAPHORE,
+ RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY
+ | RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
UINT32_MAX,
&id
);
@@ -63,29 +63,33 @@ static void test_mrsp_create_errors(void)
create_not_defined(
RTEMS_MULTIPROCESSOR_RESOURCE_SHARING
| RTEMS_COUNTING_SEMAPHORE
+ | RTEMS_PRIORITY
);
create_not_defined(
RTEMS_MULTIPROCESSOR_RESOURCE_SHARING
| RTEMS_SIMPLE_BINARY_SEMAPHORE
+ | RTEMS_PRIORITY
);
create_not_defined(
RTEMS_MULTIPROCESSOR_RESOURCE_SHARING
| RTEMS_BINARY_SEMAPHORE
- | RTEMS_PRIORITY
+ | RTEMS_FIFO
);
create_not_defined(
RTEMS_MULTIPROCESSOR_RESOURCE_SHARING
| RTEMS_INHERIT_PRIORITY
| RTEMS_BINARY_SEMAPHORE
+ | RTEMS_PRIORITY
);
create_not_defined(
RTEMS_MULTIPROCESSOR_RESOURCE_SHARING
| RTEMS_PRIORITY_CEILING
| RTEMS_BINARY_SEMAPHORE
+ | RTEMS_PRIORITY
);
create_not_defined(
@@ -93,6 +97,7 @@ static void test_mrsp_create_errors(void)
| RTEMS_INHERIT_PRIORITY
| RTEMS_PRIORITY_CEILING
| RTEMS_BINARY_SEMAPHORE
+ | RTEMS_PRIORITY
);
}
@@ -116,8 +121,8 @@ static void test_mrsp_obtain_release(void)
sc = rtems_semaphore_create(
rtems_build_name('M', 'R', 'S', 'P'),
1,
- RTEMS_MULTIPROCESSOR_RESOURCE_SHARING
- | RTEMS_BINARY_SEMAPHORE,
+ RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
+ RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
1,
&id
);
@@ -202,8 +207,8 @@ static void test_mrsp_set_priority(void)
sc = rtems_semaphore_create(
rtems_build_name('M', 'R', 'S', 'P'),
1,
- RTEMS_MULTIPROCESSOR_RESOURCE_SHARING
- | RTEMS_BINARY_SEMAPHORE,
+ RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
+ RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
1,
&id
);
@@ -266,8 +271,8 @@ static void test_mrsp_timeout_and_not_owner_of_resource(void)
sc = rtems_semaphore_create(
rtems_build_name('M', 'R', 'S', 'P'),
1,
- RTEMS_MULTIPROCESSOR_RESOURCE_SHARING
- | RTEMS_BINARY_SEMAPHORE,
+ RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
+ RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
1,
&id
);
diff --git a/testsuites/tmtests/tmfine01/init.c b/testsuites/tmtests/tmfine01/init.c
index d62278cb07..e2daa174b9 100644
--- a/testsuites/tmtests/tmfine01/init.c
+++ b/testsuites/tmtests/tmfine01/init.c
@@ -501,7 +501,8 @@ static void test_many_classic_mrsp_body(
sc = rtems_semaphore_create(
rtems_build_name('T', 'E', 'S', 'T'),
1,
- RTEMS_BINARY_SEMAPHORE | RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
+ RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
+ RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
1,
&id
);