From d13029ebdd0ed9430977097431d292081d78f431 Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Sun, 6 Oct 2024 11:15:58 -0400 Subject: [PATCH] kernel: Add queue_full() API call This allows callers to see if it's safe to enqueue something instead of triggering a panic if the queue turns out to be full. Change-Id: Idb887e7a47cfbfef998f27d9d85090f3c0ed2230 --- firmware/kernel/include/queue.h | 1 + firmware/kernel/queue.c | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/firmware/kernel/include/queue.h b/firmware/kernel/include/queue.h index a9c3b5a93a..da03f5312e 100644 --- a/firmware/kernel/include/queue.h +++ b/firmware/kernel/include/queue.h @@ -141,6 +141,7 @@ extern void queue_reply(struct event_queue *q, intptr_t retval); extern bool queue_in_queue_send(struct event_queue *q); #endif /* HAVE_EXTENDED_MESSAGING_AND_NAME */ extern bool queue_empty(const struct event_queue* q); +extern bool queue_full(const struct event_queue* q); extern bool queue_peek(struct event_queue *q, struct queue_event *ev); #define QPEEK_FILTER_COUNT_MASK (0xffu) /* 0x00=1 filter, 0xff=256 filters */ diff --git a/firmware/kernel/queue.c b/firmware/kernel/queue.c index 5566604c5d..29611e34c7 100644 --- a/firmware/kernel/queue.c +++ b/firmware/kernel/queue.c @@ -701,6 +701,12 @@ bool queue_empty(const struct event_queue* q) return ( q->read == q->write ); } +/* Poll queue to see if it is full */ +bool queue_full(const struct event_queue* q) +{ + return ((q->write - q->read) >= QUEUE_LENGTH); +} + void queue_clear(struct event_queue* q) { int oldlevel;