From 7f7a66e38543f36df6a64a4c3ba24ce4f4f04331 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Tue, 8 Jan 2019 15:31:35 -0700 Subject: Change API to provide io_uring struct abstraction This is cleaner than having the app juggle an SQ and CQ ring, just wrap them in struct io_uring and have the API always take that. This means the app doesn't need to worry about the different types of rings, and that we only need to pass in one argument for setup/teardown. Signed-off-by: Jens Axboe --- src/liburing.h | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'src/liburing.h') diff --git a/src/liburing.h b/src/liburing.h index d6589f6..c5bb32e 100644 --- a/src/liburing.h +++ b/src/liburing.h @@ -34,6 +34,11 @@ struct io_uring_cq { size_t ring_sz; }; +struct io_uring { + struct io_uring_sq sq; + struct io_uring_cq cq; +}; + /* * System calls */ @@ -46,20 +51,19 @@ extern int io_uring_enter(unsigned fd, unsigned to_submit, * Library interface */ extern int io_uring_queue_init(unsigned entries, struct io_uring_params *p, - struct iovec *iovecs, struct io_uring_sq *sq, struct io_uring_cq *cq); -extern void io_uring_queue_exit(int fd, struct io_uring_sq *sq, - struct io_uring_cq *cq); -extern int io_uring_get_completion(int fd, struct io_uring_cq *cq, + struct iovec *iovecs, struct io_uring *ring); +extern void io_uring_queue_exit(int fd, struct io_uring *ring); +extern int io_uring_get_completion(int fd, struct io_uring *ring, struct io_uring_event **ev_ptr); -extern int io_uring_wait_completion(int fd, struct io_uring_cq *cq, +extern int io_uring_wait_completion(int fd, struct io_uring *ring, struct io_uring_event **ev_ptr); -extern int io_uring_submit(int fd, struct io_uring_sq *sq); -extern struct io_uring_iocb *io_uring_get_iocb(struct io_uring_sq *sq); +extern int io_uring_submit(int fd, struct io_uring *ring); +extern struct io_uring_iocb *io_uring_get_iocb(struct io_uring *ring); static inline struct io_uring_iocb * -io_uring_iocb_from_ev(struct io_uring_sq *sq, struct io_uring_event *ev) +io_uring_iocb_from_ev(struct io_uring *ring, struct io_uring_event *ev) { - return &sq->iocbs[ev->index]; + return &ring->sq.iocbs[ev->index]; } #endif -- cgit