Lines Matching refs:queue
58 void z_impl_k_queue_init(struct k_queue *queue) in z_impl_k_queue_init() argument
60 sys_sflist_init(&queue->data_q); in z_impl_k_queue_init()
61 queue->lock = (struct k_spinlock) {}; in z_impl_k_queue_init()
62 z_waitq_init(&queue->wait_q); in z_impl_k_queue_init()
64 sys_dlist_init(&queue->poll_events); in z_impl_k_queue_init()
67 SYS_PORT_TRACING_OBJ_INIT(k_queue, queue); in z_impl_k_queue_init()
69 k_object_init(queue); in z_impl_k_queue_init()
73 static inline void z_vrfy_k_queue_init(struct k_queue *queue) in z_vrfy_k_queue_init() argument
75 K_OOPS(K_SYSCALL_OBJ_NEVER_INIT(queue, K_OBJ_QUEUE)); in z_vrfy_k_queue_init()
76 z_impl_k_queue_init(queue); in z_vrfy_k_queue_init()
87 static inline bool handle_poll_events(struct k_queue *queue, uint32_t state) in handle_poll_events() argument
90 return z_handle_obj_poll_events(&queue->poll_events, state); in handle_poll_events()
92 ARG_UNUSED(queue); in handle_poll_events()
99 void z_impl_k_queue_cancel_wait(struct k_queue *queue) in z_impl_k_queue_cancel_wait() argument
101 SYS_PORT_TRACING_OBJ_FUNC(k_queue, cancel_wait, queue); in z_impl_k_queue_cancel_wait()
103 k_spinlock_key_t key = k_spin_lock(&queue->lock); in z_impl_k_queue_cancel_wait()
107 first_pending_thread = z_unpend_first_thread(&queue->wait_q); in z_impl_k_queue_cancel_wait()
114 resched = handle_poll_events(queue, K_POLL_STATE_CANCELLED) || resched; in z_impl_k_queue_cancel_wait()
117 z_reschedule(&queue->lock, key); in z_impl_k_queue_cancel_wait()
119 k_spin_unlock(&queue->lock, key); in z_impl_k_queue_cancel_wait()
124 static inline void z_vrfy_k_queue_cancel_wait(struct k_queue *queue) in z_vrfy_k_queue_cancel_wait() argument
126 K_OOPS(K_SYSCALL_OBJ(queue, K_OBJ_QUEUE)); in z_vrfy_k_queue_cancel_wait()
127 z_impl_k_queue_cancel_wait(queue); in z_vrfy_k_queue_cancel_wait()
132 static int32_t queue_insert(struct k_queue *queue, void *prev, void *data, in queue_insert() argument
136 k_spinlock_key_t key = k_spin_lock(&queue->lock); in queue_insert()
140 SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_queue, queue_insert, queue, alloc); in queue_insert()
143 prev = sys_sflist_peek_tail(&queue->data_q); in queue_insert()
145 first_pending_thread = z_unpend_first_thread(&queue->wait_q); in queue_insert()
148 SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(k_queue, queue_insert, queue, alloc, K_FOREVER); in queue_insert()
171 SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(k_queue, queue_insert, queue, alloc, K_FOREVER); in queue_insert()
173 sys_sflist_insert(&queue->data_q, prev, data); in queue_insert()
174 resched = handle_poll_events(queue, K_POLL_STATE_DATA_AVAILABLE); in queue_insert()
178 z_reschedule(&queue->lock, key); in queue_insert()
180 k_spin_unlock(&queue->lock, key); in queue_insert()
183 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, queue_insert, queue, alloc, result); in queue_insert()
188 void k_queue_insert(struct k_queue *queue, void *prev, void *data) in k_queue_insert() argument
190 SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_queue, insert, queue); in k_queue_insert()
192 (void)queue_insert(queue, prev, data, false, false); in k_queue_insert()
194 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, insert, queue); in k_queue_insert()
197 void k_queue_append(struct k_queue *queue, void *data) in k_queue_append() argument
199 SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_queue, append, queue); in k_queue_append()
201 (void)queue_insert(queue, NULL, data, false, true); in k_queue_append()
203 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, append, queue); in k_queue_append()
206 void k_queue_prepend(struct k_queue *queue, void *data) in k_queue_prepend() argument
208 SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_queue, prepend, queue); in k_queue_prepend()
210 (void)queue_insert(queue, NULL, data, false, false); in k_queue_prepend()
212 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, prepend, queue); in k_queue_prepend()
215 int32_t z_impl_k_queue_alloc_append(struct k_queue *queue, void *data) in z_impl_k_queue_alloc_append() argument
217 SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_queue, alloc_append, queue); in z_impl_k_queue_alloc_append()
219 int32_t ret = queue_insert(queue, NULL, data, true, true); in z_impl_k_queue_alloc_append()
221 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, alloc_append, queue, ret); in z_impl_k_queue_alloc_append()
227 static inline int32_t z_vrfy_k_queue_alloc_append(struct k_queue *queue, in z_vrfy_k_queue_alloc_append() argument
230 K_OOPS(K_SYSCALL_OBJ(queue, K_OBJ_QUEUE)); in z_vrfy_k_queue_alloc_append()
231 return z_impl_k_queue_alloc_append(queue, data); in z_vrfy_k_queue_alloc_append()
236 int32_t z_impl_k_queue_alloc_prepend(struct k_queue *queue, void *data) in z_impl_k_queue_alloc_prepend() argument
238 SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_queue, alloc_prepend, queue); in z_impl_k_queue_alloc_prepend()
240 int32_t ret = queue_insert(queue, NULL, data, true, false); in z_impl_k_queue_alloc_prepend()
242 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, alloc_prepend, queue, ret); in z_impl_k_queue_alloc_prepend()
248 static inline int32_t z_vrfy_k_queue_alloc_prepend(struct k_queue *queue, in z_vrfy_k_queue_alloc_prepend() argument
251 K_OOPS(K_SYSCALL_OBJ(queue, K_OBJ_QUEUE)); in z_vrfy_k_queue_alloc_prepend()
252 return z_impl_k_queue_alloc_prepend(queue, data); in z_vrfy_k_queue_alloc_prepend()
257 int k_queue_append_list(struct k_queue *queue, void *head, void *tail) in k_queue_append_list() argument
259 SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_queue, append_list, queue); in k_queue_append_list()
264 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, append_list, queue, -EINVAL); in k_queue_append_list()
269 k_spinlock_key_t key = k_spin_lock(&queue->lock); in k_queue_append_list()
273 thread = z_unpend_first_thread(&queue->wait_q); in k_queue_append_list()
280 thread = z_unpend_first_thread(&queue->wait_q); in k_queue_append_list()
284 sys_sflist_append_list(&queue->data_q, head, tail); in k_queue_append_list()
287 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, append_list, queue, 0); in k_queue_append_list()
289 resched = handle_poll_events(queue, K_POLL_STATE_DATA_AVAILABLE) || resched; in k_queue_append_list()
292 z_reschedule(&queue->lock, key); in k_queue_append_list()
294 k_spin_unlock(&queue->lock, key); in k_queue_append_list()
300 int k_queue_merge_slist(struct k_queue *queue, sys_slist_t *list) in k_queue_merge_slist() argument
304 SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_queue, merge_slist, queue); in k_queue_merge_slist()
308 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, merge_slist, queue, -EINVAL); in k_queue_merge_slist()
322 ret = k_queue_append_list(queue, list->head, list->tail); in k_queue_merge_slist()
324 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, merge_slist, queue, ret); in k_queue_merge_slist()
330 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, merge_slist, queue, 0); in k_queue_merge_slist()
335 void *z_impl_k_queue_get(struct k_queue *queue, k_timeout_t timeout) in z_impl_k_queue_get() argument
337 k_spinlock_key_t key = k_spin_lock(&queue->lock); in z_impl_k_queue_get()
340 SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_queue, get, queue, timeout); in z_impl_k_queue_get()
342 if (likely(!sys_sflist_is_empty(&queue->data_q))) { in z_impl_k_queue_get()
345 node = sys_sflist_get_not_empty(&queue->data_q); in z_impl_k_queue_get()
347 k_spin_unlock(&queue->lock, key); in z_impl_k_queue_get()
349 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, get, queue, timeout, data); in z_impl_k_queue_get()
354 SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(k_queue, get, queue, timeout); in z_impl_k_queue_get()
357 k_spin_unlock(&queue->lock, key); in z_impl_k_queue_get()
359 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, get, queue, timeout, NULL); in z_impl_k_queue_get()
364 int ret = z_pend_curr(&queue->lock, key, &queue->wait_q, timeout); in z_impl_k_queue_get()
366 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, get, queue, timeout, in z_impl_k_queue_get()
372 bool k_queue_remove(struct k_queue *queue, void *data) in k_queue_remove() argument
374 SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_queue, remove, queue); in k_queue_remove()
376 bool ret = sys_sflist_find_and_remove(&queue->data_q, (sys_sfnode_t *)data); in k_queue_remove()
378 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, remove, queue, ret); in k_queue_remove()
383 bool k_queue_unique_append(struct k_queue *queue, void *data) in k_queue_unique_append() argument
385 SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_queue, unique_append, queue); in k_queue_unique_append()
389 SYS_SFLIST_FOR_EACH_NODE(&queue->data_q, test) { in k_queue_unique_append()
391 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, unique_append, queue, false); in k_queue_unique_append()
397 k_queue_append(queue, data); in k_queue_unique_append()
399 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_queue, unique_append, queue, true); in k_queue_unique_append()
404 void *z_impl_k_queue_peek_head(struct k_queue *queue) in z_impl_k_queue_peek_head() argument
406 void *ret = z_queue_node_peek(sys_sflist_peek_head(&queue->data_q), false); in z_impl_k_queue_peek_head()
408 SYS_PORT_TRACING_OBJ_FUNC(k_queue, peek_head, queue, ret); in z_impl_k_queue_peek_head()
413 void *z_impl_k_queue_peek_tail(struct k_queue *queue) in z_impl_k_queue_peek_tail() argument
415 void *ret = z_queue_node_peek(sys_sflist_peek_tail(&queue->data_q), false); in z_impl_k_queue_peek_tail()
417 SYS_PORT_TRACING_OBJ_FUNC(k_queue, peek_tail, queue, ret); in z_impl_k_queue_peek_tail()
423 static inline void *z_vrfy_k_queue_get(struct k_queue *queue, in z_vrfy_k_queue_get() argument
426 K_OOPS(K_SYSCALL_OBJ(queue, K_OBJ_QUEUE)); in z_vrfy_k_queue_get()
427 return z_impl_k_queue_get(queue, timeout); in z_vrfy_k_queue_get()
431 static inline int z_vrfy_k_queue_is_empty(struct k_queue *queue) in z_vrfy_k_queue_is_empty() argument
433 K_OOPS(K_SYSCALL_OBJ(queue, K_OBJ_QUEUE)); in z_vrfy_k_queue_is_empty()
434 return z_impl_k_queue_is_empty(queue); in z_vrfy_k_queue_is_empty()
438 static inline void *z_vrfy_k_queue_peek_head(struct k_queue *queue) in z_vrfy_k_queue_peek_head() argument
440 K_OOPS(K_SYSCALL_OBJ(queue, K_OBJ_QUEUE)); in z_vrfy_k_queue_peek_head()
441 return z_impl_k_queue_peek_head(queue); in z_vrfy_k_queue_peek_head()
445 static inline void *z_vrfy_k_queue_peek_tail(struct k_queue *queue) in z_vrfy_k_queue_peek_tail() argument
447 K_OOPS(K_SYSCALL_OBJ(queue, K_OBJ_QUEUE)); in z_vrfy_k_queue_peek_tail()
448 return z_impl_k_queue_peek_tail(queue); in z_vrfy_k_queue_peek_tail()