Lines Matching refs:mutex

7 kstat_t mutex_create(kmutex_t *mutex, const name_t *name, uint8_t mm_alloc_flag)  in mutex_create()  argument
13 NULL_PARA_CHK(mutex); in mutex_create()
16 memset(mutex, 0, sizeof(kmutex_t)); in mutex_create()
19 klist_init(&mutex->blk_obj.blk_list); in mutex_create()
20 mutex->blk_obj.blk_policy = BLK_POLICY_PRI; in mutex_create()
21 mutex->blk_obj.name = name; in mutex_create()
22 mutex->mutex_task = NULL; in mutex_create()
23 mutex->mutex_list = NULL; in mutex_create()
24 mutex->mm_alloc_flag = mm_alloc_flag; in mutex_create()
26 mutex->blk_obj.cancel = 0u; in mutex_create()
31 klist_insert(&(g_kobj_list.mutex_head), &mutex->mutex_item); in mutex_create()
35 mutex->blk_obj.obj_type = RHINO_MUTEX_OBJ_TYPE; in mutex_create()
37 TRACE_MUTEX_CREATE(krhino_cur_task_get(), mutex, name); in mutex_create()
42 kstat_t krhino_mutex_create(kmutex_t *mutex, const name_t *name) in krhino_mutex_create() argument
44 return mutex_create(mutex, name, K_OBJ_STATIC_ALLOC); in krhino_mutex_create()
62 kstat_t krhino_mutex_del(kmutex_t *mutex) in krhino_mutex_del() argument
67 if (mutex == NULL) { in krhino_mutex_del()
71 NULL_PARA_CHK(mutex); in krhino_mutex_del()
77 if (mutex->blk_obj.obj_type != RHINO_MUTEX_OBJ_TYPE) { in krhino_mutex_del()
82 if (mutex->mm_alloc_flag != K_OBJ_STATIC_ALLOC) { in krhino_mutex_del()
87 blk_list_head = &mutex->blk_obj.blk_list; in krhino_mutex_del()
89 mutex->blk_obj.obj_type = RHINO_OBJ_TYPE_NONE; in krhino_mutex_del()
91 if (mutex->mutex_task != NULL) { in krhino_mutex_del()
92 mutex_release(mutex->mutex_task, mutex); in krhino_mutex_del()
101 klist_rm(&mutex->mutex_item); in krhino_mutex_del()
104 TRACE_MUTEX_DEL(g_active_task[cpu_cur_get()], mutex); in krhino_mutex_del()
112 kstat_t krhino_mutex_dyn_create(kmutex_t **mutex, const name_t *name) in krhino_mutex_dyn_create() argument
117 if (mutex == NULL) { in krhino_mutex_dyn_create()
121 NULL_PARA_CHK(mutex); in krhino_mutex_dyn_create()
134 *mutex = mutex_obj; in krhino_mutex_dyn_create()
139 kstat_t krhino_mutex_dyn_del(kmutex_t *mutex) in krhino_mutex_dyn_del() argument
144 if (mutex == NULL) { in krhino_mutex_dyn_del()
148 NULL_PARA_CHK(mutex); in krhino_mutex_dyn_del()
154 if (mutex->blk_obj.obj_type != RHINO_MUTEX_OBJ_TYPE) { in krhino_mutex_dyn_del()
159 if (mutex->mm_alloc_flag != K_OBJ_DYN_ALLOC) { in krhino_mutex_dyn_del()
164 blk_list_head = &mutex->blk_obj.blk_list; in krhino_mutex_dyn_del()
166 mutex->blk_obj.obj_type = RHINO_OBJ_TYPE_NONE; in krhino_mutex_dyn_del()
168 if (mutex->mutex_task != NULL) { in krhino_mutex_dyn_del()
169 mutex_release(mutex->mutex_task, mutex); in krhino_mutex_dyn_del()
178 klist_rm(&mutex->mutex_item); in krhino_mutex_dyn_del()
181 TRACE_MUTEX_DEL(g_active_task[cpu_cur_get()], mutex); in krhino_mutex_dyn_del()
185 krhino_mm_free(mutex); in krhino_mutex_dyn_del()
283 kstat_t krhino_mutex_lock(kmutex_t *mutex, tick_t ticks) in krhino_mutex_lock() argument
290 NULL_PARA_CHK(mutex); in krhino_mutex_lock()
299 TASK_CANCEL_CHK(mutex); in krhino_mutex_lock()
303 if (mutex->blk_obj.obj_type != RHINO_MUTEX_OBJ_TYPE) { in krhino_mutex_lock()
309 if (g_active_task[cur_cpu_num] == mutex->mutex_task) { in krhino_mutex_lock()
310 if (mutex->owner_nested == (mutex_nested_t)-1) { in krhino_mutex_lock()
316 mutex->owner_nested++; in krhino_mutex_lock()
324 mutex_task = mutex->mutex_task; in krhino_mutex_lock()
327 mutex->mutex_task = g_active_task[cur_cpu_num]; in krhino_mutex_lock()
329 mutex->mutex_list = g_active_task[cur_cpu_num]->mutex_list; in krhino_mutex_lock()
330 g_active_task[cur_cpu_num]->mutex_list = mutex; in krhino_mutex_lock()
332 mutex->owner_nested = 1u; in krhino_mutex_lock()
334 TRACE_MUTEX_GET(g_active_task[cur_cpu_num], mutex, ticks); in krhino_mutex_lock()
364 pend_to_blk_obj(&mutex->blk_obj, g_active_task[cur_cpu_num], ticks); in krhino_mutex_lock()
366 TRACE_MUTEX_GET_BLK(g_active_task[cur_cpu_num], mutex, ticks); in krhino_mutex_lock()
373 ret = pend_state_end_proc(g_active_task[cpu_cur_get()], &mutex->blk_obj); in krhino_mutex_lock()
380 kstat_t krhino_mutex_unlock(kmutex_t *mutex) in krhino_mutex_unlock() argument
387 NULL_PARA_CHK(mutex); in krhino_mutex_unlock()
397 if (mutex->blk_obj.obj_type != RHINO_MUTEX_OBJ_TYPE) { in krhino_mutex_unlock()
405 if (g_active_task[cur_cpu_num] != mutex->mutex_task) { in krhino_mutex_unlock()
410 mutex->owner_nested--; in krhino_mutex_unlock()
412 if (mutex->owner_nested > 0u) { in krhino_mutex_unlock()
417 mutex_release(g_active_task[cur_cpu_num], mutex); in krhino_mutex_unlock()
419 blk_list_head = &mutex->blk_obj.blk_list; in krhino_mutex_unlock()
424 mutex->mutex_task = NULL; in krhino_mutex_unlock()
426 TRACE_MUTEX_RELEASE_SUCCESS(g_active_task[cur_cpu_num], mutex); in krhino_mutex_unlock()
438 TRACE_MUTEX_TASK_WAKE(g_active_task[cur_cpu_num], task, mutex); in krhino_mutex_unlock()
441 mutex->mutex_task = task; in krhino_mutex_unlock()
443 mutex->mutex_list = task->mutex_list; in krhino_mutex_unlock()
444 task->mutex_list = mutex; in krhino_mutex_unlock()
446 mutex->owner_nested = 1u; in krhino_mutex_unlock()