Lines Matching refs:m
38 struct lthread_mutex *m; in lthread_mutex_init() local
44 m = _lthread_objcache_alloc((THIS_SCHED)->mutex_cache); in lthread_mutex_init()
45 if (m == NULL) in lthread_mutex_init()
48 m->blocked = _lthread_queue_create("blocked queue"); in lthread_mutex_init()
49 if (m->blocked == NULL) { in lthread_mutex_init()
50 _lthread_objcache_free((THIS_SCHED)->mutex_cache, m); in lthread_mutex_init()
55 strncpy(m->name, "no name", sizeof(m->name)); in lthread_mutex_init()
57 strncpy(m->name, name, sizeof(m->name)); in lthread_mutex_init()
58 m->name[sizeof(m->name)-1] = 0; in lthread_mutex_init()
60 m->root_sched = THIS_SCHED; in lthread_mutex_init()
61 m->owner = NULL; in lthread_mutex_init()
63 rte_atomic64_init(&m->count); in lthread_mutex_init()
65 DIAG_CREATE_EVENT(m, LT_DIAG_MUTEX_CREATE); in lthread_mutex_init()
67 (*mutex) = m; in lthread_mutex_init()
74 int lthread_mutex_destroy(struct lthread_mutex *m) in lthread_mutex_destroy() argument
76 if ((m == NULL) || (m->blocked == NULL)) { in lthread_mutex_destroy()
77 DIAG_EVENT(m, LT_DIAG_MUTEX_DESTROY, m, POSIX_ERRNO(EINVAL)); in lthread_mutex_destroy()
81 if (m->owner == NULL) { in lthread_mutex_destroy()
83 if (_lthread_queue_destroy(m->blocked) < 0) { in lthread_mutex_destroy()
84 DIAG_EVENT(m, LT_DIAG_MUTEX_DESTROY, in lthread_mutex_destroy()
85 m, POSIX_ERRNO(EBUSY)); in lthread_mutex_destroy()
90 _lthread_objcache_free(m->root_sched->mutex_cache, m); in lthread_mutex_destroy()
91 DIAG_EVENT(m, LT_DIAG_MUTEX_DESTROY, m, 0); in lthread_mutex_destroy()
95 DIAG_EVENT(m, LT_DIAG_MUTEX_DESTROY, m, POSIX_ERRNO(EBUSY)); in lthread_mutex_destroy()
102 int lthread_mutex_lock(struct lthread_mutex *m) in lthread_mutex_lock() argument
106 if ((m == NULL) || (m->blocked == NULL)) { in lthread_mutex_lock()
107 DIAG_EVENT(m, LT_DIAG_MUTEX_LOCK, m, POSIX_ERRNO(EINVAL)); in lthread_mutex_lock()
112 if (m->owner == lt) { in lthread_mutex_lock()
113 DIAG_EVENT(m, LT_DIAG_MUTEX_LOCK, m, POSIX_ERRNO(EDEADLK)); in lthread_mutex_lock()
118 rte_atomic64_inc(&m->count); in lthread_mutex_lock()
121 ((uint64_t *) &m->owner, 0, (uint64_t) lt)) { in lthread_mutex_lock()
123 DIAG_EVENT(m, LT_DIAG_MUTEX_LOCK, m, 0); in lthread_mutex_lock()
129 } while ((rte_atomic64_read(&m->count) == 1) && in lthread_mutex_lock()
130 (m->owner == NULL)); in lthread_mutex_lock()
138 DIAG_EVENT(m, LT_DIAG_MUTEX_BLOCKED, m, lt); in lthread_mutex_lock()
139 lt->pending_wr_queue = m->blocked; in lthread_mutex_lock()
148 int lthread_mutex_trylock(struct lthread_mutex *m) in lthread_mutex_trylock() argument
152 if ((m == NULL) || (m->blocked == NULL)) { in lthread_mutex_trylock()
153 DIAG_EVENT(m, LT_DIAG_MUTEX_TRYLOCK, m, POSIX_ERRNO(EINVAL)); in lthread_mutex_trylock()
157 if (m->owner == lt) { in lthread_mutex_trylock()
159 DIAG_EVENT(m, LT_DIAG_MUTEX_TRYLOCK, m, POSIX_ERRNO(EDEADLK)); in lthread_mutex_trylock()
163 rte_atomic64_inc(&m->count); in lthread_mutex_trylock()
165 ((uint64_t *) &m->owner, (uint64_t) NULL, (uint64_t) lt)) { in lthread_mutex_trylock()
167 DIAG_EVENT(m, LT_DIAG_MUTEX_TRYLOCK, m, 0); in lthread_mutex_trylock()
172 rte_atomic64_dec(&m->count); in lthread_mutex_trylock()
173 DIAG_EVENT(m, LT_DIAG_MUTEX_TRYLOCK, m, POSIX_ERRNO(EBUSY)); in lthread_mutex_trylock()
180 int lthread_mutex_unlock(struct lthread_mutex *m) in lthread_mutex_unlock() argument
185 if ((m == NULL) || (m->blocked == NULL)) { in lthread_mutex_unlock()
186 DIAG_EVENT(m, LT_DIAG_MUTEX_UNLOCKED, m, POSIX_ERRNO(EINVAL)); in lthread_mutex_unlock()
191 if (m->owner != lt || m->owner == NULL) { in lthread_mutex_unlock()
192 DIAG_EVENT(m, LT_DIAG_MUTEX_UNLOCKED, m, POSIX_ERRNO(EPERM)); in lthread_mutex_unlock()
196 rte_atomic64_dec(&m->count); in lthread_mutex_unlock()
198 while (rte_atomic64_read(&m->count) > 0) { in lthread_mutex_unlock()
199 unblocked = _lthread_queue_remove(m->blocked); in lthread_mutex_unlock()
202 rte_atomic64_dec(&m->count); in lthread_mutex_unlock()
203 DIAG_EVENT(m, LT_DIAG_MUTEX_UNLOCKED, m, unblocked); in lthread_mutex_unlock()
211 m->owner = NULL; in lthread_mutex_unlock()
219 lthread_mutex_diag_ref(struct lthread_mutex *m) in lthread_mutex_diag_ref() argument
221 if (m == NULL) in lthread_mutex_diag_ref()
223 return m->diag_ref; in lthread_mutex_diag_ref()