Index: testsuites/smptests/Makefile.am
===================================================================
--- testsuites/smptests/Makefile.am	(revision 6a631daeb87d41800212b494a560d62612982b23)
+++ testsuites/smptests/Makefile.am	(revision 77ff5599e0d8e6d91190a379be21a332f83252b0)
@@ -46,4 +46,5 @@
 SUBDIRS += smppsxaffinity01
 SUBDIRS += smppsxaffinity02
+SUBDIRS += smppsxmutex01
 SUBDIRS += smppsxsignal01
 endif
Index: testsuites/smptests/configure.ac
===================================================================
--- testsuites/smptests/configure.ac	(revision 6a631daeb87d41800212b494a560d62612982b23)
+++ testsuites/smptests/configure.ac	(revision 77ff5599e0d8e6d91190a379be21a332f83252b0)
@@ -58,4 +58,5 @@
 # Explicitly list all Makefiles here
 AC_CONFIG_FILES([Makefile
+smppsxmutex01/Makefile
 smpstrongapa01/Makefile
 smp01/Makefile
Index: testsuites/smptests/smppsxmutex01/Makefile.am
===================================================================
--- testsuites/smptests/smppsxmutex01/Makefile.am	(revision 77ff5599e0d8e6d91190a379be21a332f83252b0)
+++ testsuites/smptests/smppsxmutex01/Makefile.am	(revision 77ff5599e0d8e6d91190a379be21a332f83252b0)
@@ -0,0 +1,19 @@
+rtems_tests_PROGRAMS = smppsxmutex01
+smppsxmutex01_SOURCES = init.c
+
+dist_rtems_tests_DATA = smppsxmutex01.scn smppsxmutex01.doc
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../automake/compile.am
+include $(top_srcdir)/../automake/leaf.am
+
+AM_CPPFLAGS += -I$(top_srcdir)/../support/include
+
+LINK_OBJS = $(smppsxmutex01_OBJECTS)
+LINK_LIBS = $(smppsxmutex01_LDLIBS)
+
+smppsxmutex01$(EXEEXT): $(smppsxmutex01_OBJECTS) $(smppsxmutex01_DEPENDENCIES)
+	@rm -f smppsxmutex01$(EXEEXT)
+	$(make-exe)
+
+include $(top_srcdir)/../automake/local.am
Index: testsuites/smptests/smppsxmutex01/init.c
===================================================================
--- testsuites/smptests/smppsxmutex01/init.c	(revision 77ff5599e0d8e6d91190a379be21a332f83252b0)
+++ testsuites/smptests/smppsxmutex01/init.c	(revision 77ff5599e0d8e6d91190a379be21a332f83252b0)
@@ -0,0 +1,184 @@
+/*
+ * Copyright (c) 2016 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Dornierstr. 4
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * 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 <errno.h>
+#include <pthread.h>
+
+#include <rtems.h>
+#include <rtems/libcsupport.h>
+
+#include "tmacros.h"
+
+const char rtems_test_name[] = "SMPPSXMUTEX 1";
+
+#define SCHED_A rtems_build_name(' ', ' ', ' ', 'A')
+
+#define SCHED_B rtems_build_name(' ', ' ', ' ', 'B')
+
+typedef struct {
+  pthread_t thread_b;
+  pthread_mutexattr_t mtx_attr;
+  pthread_mutex_t mtx_a;
+  pthread_mutex_t mtx_b;
+} test_context;
+
+static test_context test_instance;
+
+static void *thread_b(void *arg)
+{
+  test_context *ctx;
+  rtems_id scheduler_b_id;
+  rtems_status_code sc;
+  int prio_ceiling;
+  int eno;
+
+  ctx = arg;
+
+  rtems_test_assert(rtems_get_current_processor() == 0);
+
+  sc = rtems_scheduler_ident(SCHED_B, &scheduler_b_id);
+  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+  sc = rtems_task_set_scheduler(pthread_self(), scheduler_b_id);
+  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+  rtems_test_assert(rtems_get_current_processor() == 1);
+
+  eno = pthread_mutex_init(&ctx->mtx_b, &ctx->mtx_attr);
+  rtems_test_assert(eno == 0);
+
+  eno = pthread_mutex_getprioceiling(&ctx->mtx_b, &prio_ceiling);
+  rtems_test_assert(eno == 0);
+  rtems_test_assert(prio_ceiling == 254);
+
+  eno = pthread_mutex_lock(&ctx->mtx_b);
+  rtems_test_assert(eno == 0);
+
+  eno = pthread_mutex_unlock(&ctx->mtx_b);
+  rtems_test_assert(eno == 0);
+
+  eno = pthread_mutex_destroy(&ctx->mtx_b);
+  rtems_test_assert(eno == 0);
+
+  eno = pthread_mutex_getprioceiling(&ctx->mtx_a, &prio_ceiling);
+  rtems_test_assert(eno == 0);
+  rtems_test_assert(prio_ceiling == 126);
+
+  eno = pthread_mutex_lock(&ctx->mtx_a);
+  rtems_test_assert(eno == EINVAL);
+
+  return ctx;
+}
+
+static void test(test_context *ctx)
+{
+  uint32_t cpu_count;
+  int prio_ceiling;
+  int eno;
+
+  cpu_count = rtems_get_processor_count();
+
+  rtems_test_assert(rtems_get_current_processor() == 0);
+
+  eno = pthread_mutexattr_init(&ctx->mtx_attr);
+  rtems_test_assert(eno == 0);
+
+  eno = pthread_mutexattr_setprotocol(&ctx->mtx_attr, PTHREAD_PRIO_PROTECT);
+  rtems_test_assert(eno == 0);
+
+  eno = pthread_mutex_init(&ctx->mtx_a, &ctx->mtx_attr);
+  rtems_test_assert(eno == 0);
+
+  eno = pthread_mutex_getprioceiling(&ctx->mtx_a, &prio_ceiling);
+  rtems_test_assert(eno == 0);
+  rtems_test_assert(prio_ceiling == 126);
+
+  eno = pthread_mutex_lock(&ctx->mtx_a);
+  rtems_test_assert(eno == 0);
+
+  eno = pthread_mutex_unlock(&ctx->mtx_a);
+  rtems_test_assert(eno == 0);
+
+  if (cpu_count > 1) {
+    void *exit_code;
+
+    eno = pthread_create(&ctx->thread_b, NULL, thread_b, ctx);
+    rtems_test_assert(eno == 0);
+
+    exit_code = NULL;
+    eno = pthread_join(ctx->thread_b, &exit_code);
+    rtems_test_assert(eno == 0);
+    rtems_test_assert(exit_code == ctx);
+  }
+
+  eno = pthread_mutex_destroy(&ctx->mtx_a);
+  rtems_test_assert(eno == 0);
+
+  eno = pthread_mutexattr_destroy(&ctx->mtx_attr);
+  rtems_test_assert(eno == 0);
+}
+
+static void *POSIX_Init(void *arg)
+{
+  rtems_resource_snapshot snapshot;
+
+  TEST_BEGIN();
+
+  rtems_resource_snapshot_take(&snapshot);
+
+  test(&test_instance);
+
+  rtems_test_assert(rtems_resource_snapshot_check(&snapshot));
+
+  TEST_END();
+  rtems_test_exit(0);
+}
+
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+#define CONFIGURE_MAXIMUM_POSIX_THREADS 2
+#define CONFIGURE_MAXIMUM_POSIX_MUTEXES 2
+
+#define CONFIGURE_SMP_APPLICATION
+
+#define CONFIGURE_SMP_MAXIMUM_PROCESSORS 2
+
+#define CONFIGURE_SCHEDULER_PRIORITY_SMP
+
+#include <rtems/scheduler.h>
+
+RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(a, 128);
+
+RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(b, 256);
+
+#define CONFIGURE_SCHEDULER_CONTROLS \
+  RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP(a, SCHED_A), \
+  RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP(b, SCHED_B)  \
+
+#define CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS \
+  RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
+  RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
Index: testsuites/smptests/smppsxmutex01/smppsxmutex01.scn
===================================================================
--- testsuites/smptests/smppsxmutex01/smppsxmutex01.scn	(revision 77ff5599e0d8e6d91190a379be21a332f83252b0)
+++ testsuites/smptests/smppsxmutex01/smppsxmutex01.scn	(revision 77ff5599e0d8e6d91190a379be21a332f83252b0)
@@ -0,0 +1,2 @@
+*** BEGIN OF TEST SMPPSXMUTEX 1 ***
+*** END OF TEST SMPPSXMUTEX 1 ***
Index: testsuites/smptests/smpscheduler02/init.c
===================================================================
--- testsuites/smptests/smpscheduler02/init.c	(revision 6a631daeb87d41800212b494a560d62612982b23)
+++ testsuites/smptests/smpscheduler02/init.c	(revision 77ff5599e0d8e6d91190a379be21a332f83252b0)
@@ -36,4 +36,6 @@
 static rtems_id main_task_id;
 
+static rtems_id sema_id;
+
 static void task(rtems_task_argument arg)
 {
@@ -45,4 +47,7 @@
   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);
@@ -62,4 +67,5 @@
   rtems_id scheduler_b_id;
   rtems_id scheduler_c_id;
+  rtems_task_priority prio;
   cpu_set_t cpuset;
   cpu_set_t first_cpu;
@@ -95,4 +101,25 @@
   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);
@@ -183,4 +210,7 @@
   sc = rtems_task_delete(task_id);
   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+  sc = rtems_semaphore_delete(sema_id);
+  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
 }
 
@@ -213,4 +243,7 @@
 #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
 
+#define CONFIGURE_MAXIMUM_TASKS 2
+#define CONFIGURE_MAXIMUM_SEMAPHORES 1
+
 #define CONFIGURE_SMP_APPLICATION
 
@@ -270,6 +303,4 @@
   RTEMS_SCHEDULER_ASSIGN(2, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
 
-#define CONFIGURE_MAXIMUM_TASKS 2
-
 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
 
