diff options
Diffstat (limited to 'src/include/liburing.h')
-rw-r--r-- | src/include/liburing.h | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/include/liburing.h b/src/include/liburing.h index 6eece30..9beef0b 100644 --- a/src/include/liburing.h +++ b/src/include/liburing.h @@ -1090,13 +1090,22 @@ static inline struct io_uring_sqe *_io_uring_get_sqe(struct io_uring *ring) } /* + * Return the appropriate mask for a buffer ring of size 'ring_entries' + */ +static inline int io_uring_buf_ring_mask(__u32 ring_entries) +{ + return ring_entries - 1; +} + +/* * Assign 'buf' with the addr/len/buffer ID supplied */ static inline void io_uring_buf_ring_add(struct io_uring_buf_ring *br, void *addr, unsigned int len, - unsigned short bid, int buf_offset) + unsigned short bid, int mask, + int buf_offset) { - struct io_uring_buf *buf = &br->bufs[br->tail + buf_offset]; + struct io_uring_buf *buf = &br->bufs[(br->tail + buf_offset) & mask]; buf->addr = (unsigned long) (uintptr_t) addr; buf->len = len; |