From 9dc95021dbf29b96a84e0b7dca491f768aa0ef0d Mon Sep 17 00:00:00 2001 From: Anup Patel Date: Wed, 3 Apr 2019 10:24:03 +0530 Subject: lib: More improvements to sbi_fifo This patch does following improvements to sbi_fifo: 1. Use valid SBI_Exxxx error codes instead of -1 2. The sbi_fifo_is_full() and sbi_fifo_is_empty() did not acquire qlock before accessing head and tail hence fixed it 3. Added avail member for ease in debugging and simplifying head/tail updates. Due to above changes size of sbi_fifo changes from 48 bytes to 56 bytes. Signed-off-by: Anup Patel --- include/sbi/sbi_error.h | 1 + include/sbi/sbi_fifo.h | 18 +++++++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) (limited to 'include') diff --git a/include/sbi/sbi_error.h b/include/sbi/sbi_error.h index 68076e73..300ee743 100644 --- a/include/sbi/sbi_error.h +++ b/include/sbi/sbi_error.h @@ -21,5 +21,6 @@ #define SBI_ETIMEDOUT -8 #define SBI_EIO -9 #define SBI_EILL -10 +#define SBI_ENOSPC -11 #endif diff --git a/include/sbi/sbi_fifo.h b/include/sbi/sbi_fifo.h index ba9769b6..1a595187 100644 --- a/include/sbi/sbi_fifo.h +++ b/include/sbi/sbi_fifo.h @@ -15,18 +15,22 @@ #include struct sbi_fifo { - int head; - int tail; - spinlock_t qlock; - unsigned long entrysize; - unsigned long num_entries; + /* Static members of struct */ void *queue; + unsigned long entry_size; + unsigned long num_entries; + /* Dynamic members of struct protected by lock */ + spinlock_t qlock; + unsigned long avail; + unsigned long head; + unsigned long tail; }; int sbi_fifo_dequeue(struct sbi_fifo *fifo, void *data); int sbi_fifo_enqueue(struct sbi_fifo *fifo, void *data); -void sbi_fifo_init(struct sbi_fifo *fifo, unsigned long entries, - unsigned long entrysize); +void sbi_fifo_init(struct sbi_fifo *fifo, void *queue_mem, + unsigned long entries, unsigned long entry_size); bool sbi_fifo_is_empty(struct sbi_fifo *fifo); bool sbi_fifo_is_full(struct sbi_fifo *fifo); + #endif -- cgit v1.3.1