From 2e908a7be31558cc98a9f0e97556e49ee5748c16 Mon Sep 17 00:00:00 2001 From: nodist Date: Mon, 28 Sep 2026 16:15:39 -0400 Subject: inline some queue fns --- source/queue.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) (limited to 'source') diff --git a/source/queue.c b/source/queue.c index 6f36ce8..350c4e2 100644 --- a/source/queue.c +++ b/source/queue.c @@ -1,17 +1,9 @@ #include "kpl.h" -void kpl_task_queue_init(kpl_task_queue *task_queue) { - __atomic_store_n(&task_queue->dummy.next, NULL, __ATOMIC_RELAXED); - __atomic_store_n(&task_queue->head, &task_queue->dummy, __ATOMIC_RELAXED); - task_queue->tail = (kpl_task*) &task_queue->dummy; -} +extern inline void kpl_task_queue_init(kpl_task_queue *task_queue); -void kpl_task_queue_add(kpl_task_queue *task_queue, kpl_task *task) { - __atomic_store_n(&task->next, NULL, __ATOMIC_RELAXED); - kpl_task *head = __atomic_exchange_n(&task_queue->head, task, __ATOMIC_SEQ_CST); - __atomic_store_n(&head->next, task, __ATOMIC_RELEASE); -} +extern inline void kpl_task_queue_add(kpl_task_queue *task_queue, kpl_task *task); kpl_task *kpl_task_queue_next(kpl_task_queue *task_queue) { kpl_task *task = NULL; @@ -45,7 +37,9 @@ bool kpl_ring_queue_init(kpl_ring_queue *ring_queue, int8_t size_pow2) { if (size_pow2 < KPL_RING_QUEUE_MIN_POW2 || size_pow2 > KPL_RING_QUEUE_MAX_POW2) return false; size_t size = 1L << size_pow2; - ring_queue->items = calloc(1, sizeof(kpl_ring_queue_item) * size); + ring_queue->mmap_size = KPL_PAGE_SIZE_ROUND(sizeof(kpl_ring_queue_item) * size); + ring_queue->items = mmap(NULL, ring_queue->mmap_size, + PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); ring_queue->items_mask = size - 1; __atomic_store_n(&ring_queue->head_index, 0, __ATOMIC_RELAXED); __atomic_store_n(&ring_queue->tail_index, 0, __ATOMIC_RELAXED); @@ -54,9 +48,7 @@ bool kpl_ring_queue_init(kpl_ring_queue *ring_queue, int8_t size_pow2) { return true; } -void kpl_ring_queue_free(kpl_ring_queue *ring_queue) { - free(ring_queue->items); -} +extern inline void kpl_ring_queue_free(kpl_ring_queue *ring_queue); bool kpl_ring_queue_add(kpl_ring_queue *ring_queue, void *data) { for (;;) { -- cgit v1.2.3