|
| K_MUTEX_DEFINE (kmutex) |
| TESTPOINT: init via K_MUTEX_DEFINE.
|
|
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.
|
|
| ZTEST_USER (mutex_api_1cpu, test_mutex_priority_inheritance) |
| Test mutex's priority inheritance mechanism.
|
|
static void | tThread_mutex_lock_should_fail (void *p1, void *p2, void *p3) |
|
| ZTEST (mutex_api_1cpu, test_mutex_timeout_race_during_priority_inversion) |
| Test fix for subtle race during priority inversion.
|
|
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.