| 
|   | K_MUTEX_DEFINE (kmutex) | 
|   | 
| static  | K_THREAD_STACK_DEFINE (tstack,(512+CONFIG_TEST_EXTRA_STACK_SIZE)) | 
|   | 
| static  | K_THREAD_STACK_DEFINE (tstack2,(512+CONFIG_TEST_EXTRA_STACK_SIZE)) | 
|   | 
| static  | K_THREAD_STACK_DEFINE (tstack3,(512+CONFIG_TEST_EXTRA_STACK_SIZE)) | 
|   | 
| static void  | tThread_entry_lock_forever (void *p1, void *p2, void *p3) | 
|   | 
| static void  | tThread_entry_lock_no_wait (void *p1, void *p2, void *p3) | 
|   | 
| static void  | tThread_entry_lock_timeout_fail (void *p1, void *p2, void *p3) | 
|   | 
| static void  | tThread_entry_lock_timeout_pass (void *p1, void *p2, void *p3) | 
|   | 
| static void  | tmutex_test_lock (struct k_mutex *pmutex, void(*entry_fn)(void *, void *, void *)) | 
|   | 
| static void  | tmutex_test_lock_timeout (struct k_mutex *pmutex, void(*entry_fn)(void *, void *, void *)) | 
|   | 
| static void  | tmutex_test_lock_unlock (struct k_mutex *pmutex) | 
|   | 
| static void  | tThread_T1_priority_inheritance (void *p1, void *p2, void *p3) | 
|   | 
| static void  | tThread_T2_priority_inheritance (void *p1, void *p2, void *p3) | 
|   | 
| static void  | tThread_lock_with_time_period (void *p1, void *p2, void *p3) | 
|   | 
| static void  | tThread_waiter (void *p1, void *p2, void *p3) | 
|   | 
|   | ZTEST_USER (mutex_api_1cpu, test_mutex_reent_lock_forever) | 
|   | 
|   | ZTEST_USER (mutex_api, test_mutex_reent_lock_no_wait) | 
|   | 
|   | ZTEST_USER (mutex_api, test_mutex_reent_lock_timeout_fail) | 
|   | 
|   | ZTEST_USER (mutex_api_1cpu, test_mutex_reent_lock_timeout_pass) | 
|   | 
|   | ZTEST_USER (mutex_api_1cpu, test_mutex_lock_unlock) | 
|   | 
|   | ZTEST_USER (mutex_api, test_mutex_recursive) | 
|   | Test recursive mutex.  More...
  | 
|   | 
|   | ZTEST_USER (mutex_api_1cpu, test_mutex_priority_inheritance) | 
|   | Test mutex's priority inheritance mechanism.  More...
  | 
|   | 
| static void *  | mutex_api_tests_setup (void) | 
|   | 
|   | ZTEST_SUITE (mutex_api, NULL, mutex_api_tests_setup, NULL, NULL, NULL) | 
|   | 
|   | ZTEST_SUITE (mutex_api_1cpu, NULL, mutex_api_tests_setup, ztest_simple_1cpu_before, ztest_simple_1cpu_after, NULL) | 
|   | 
      
        
          | ZTEST_USER  | 
          ( | 
          mutex_api  | 
          ,  | 
        
        
           | 
           | 
          test_mutex_recursive  | 
            | 
        
        
           | 
          ) | 
           |  | 
        
      
 
Test recursive mutex. 
To verify that getting a lock of a mutex already locked will succeed and waiters will be unblocked only when the number of locks reaches zero. 
TESTPOINT: when mutex has no owner, we cannot unlock it
TESTPOINT: lock the mutex recursively
TESTPOINT: unlock the mutex recursively
TESTPOINT: waiter thread got the mutex
 
 
      
        
          | ZTEST_USER  | 
          ( | 
          mutex_api_1cpu  | 
          ,  | 
        
        
           | 
           | 
          test_mutex_priority_inheritance  | 
            | 
        
        
           | 
          ) | 
           |  | 
        
      
 
Test mutex's priority inheritance mechanism. 
To verify mutex provide priority inheritance to prevent priority inversion, and there are 3 cases need to run. The thread T1 hold the mutex first and cases list as below:
- case 1. When priority T2 > T1, priority inheritance happened.
 
- case 2. When priority T1 > T2, priority inheritance won't happened.
 
- case 3. When priority T2 > T3 > T1, priority inheritance happened but T2 wait for timeout and T3 got the mutex. 
 
TESTPOINT: run test case 1, given priority T1 < T2
TESTPOINT: The current thread does not own the mutex.
TESTPOINT: run test case 2, given priority T1 > T2, this means priority inheritance won't happen.
TESTPOINT: run test case 3, given priority T1 < T3 < T2, but t2 do not get mutex due to timeout.