diff options
| author | Anup Patel <[email protected]> | 2019-04-03 10:24:03 +0530 |
|---|---|---|
| committer | Atish Patra <[email protected]> | 2019-04-03 13:48:38 -0700 |
| commit | 9dc95021dbf29b96a84e0b7dca491f768aa0ef0d (patch) | |
| tree | ec694df5cafb17c992f3107336cbddc33dff7815 /include | |
| parent | 6dc1b0f6e2f895f220c284d9166205400fc98428 (diff) | |
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 <[email protected]>
Diffstat (limited to 'include')
| -rw-r--r-- | include/sbi/sbi_error.h | 1 | ||||
| -rw-r--r-- | include/sbi/sbi_fifo.h | 18 |
2 files changed, 12 insertions, 7 deletions
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 <sbi/sbi_types.h> 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 |
