From d5b4ae1c58f49d3d665faadd0e2eddcef9aadc68 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Thu, 10 Jan 2019 14:28:10 -0700 Subject: Update to newer API - Fixed buffers are now available through io_uring_register() - Various thread/wq options are now dead and automatic instead - sqe->index is now sqe->buf_index - Fixed buffers require flag, not separate opcode Signed-off-by: Jens Axboe --- src/io_uring.c | 3 +-- src/io_uring.h | 25 +++++++++++++++++++------ src/liburing.h | 6 +++--- src/syscall.c | 17 ++++++++++++----- 4 files changed, 35 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/io_uring.c b/src/io_uring.c index d9c1511..bf79b9f 100644 --- a/src/io_uring.c +++ b/src/io_uring.c @@ -189,12 +189,11 @@ err: * contains the necessary information to read/write to the rings. */ int io_uring_queue_init(unsigned entries, struct io_uring_params *p, - struct iovec *iovecs, unsigned nr_iovecs, struct io_uring *ring) { int fd, ret; - fd = io_uring_setup(entries, iovecs, nr_iovecs, p); + fd = io_uring_setup(entries, p); if (fd < 0) return fd; diff --git a/src/io_uring.h b/src/io_uring.h index b07bbbb..613930d 100644 --- a/src/io_uring.h +++ b/src/io_uring.h @@ -29,25 +29,27 @@ struct io_uring_sqe { __kernel_rwf_t rw_flags; __u32 __resv; }; - __u16 index; /* index into fixed buffers, if used */ + __u16 buf_index; /* index into fixed buffers, if used */ __u16 __pad2[3]; __u64 data; /* data to be passed back at completion time */ }; +/* + * sqe->flags + */ +#define IOSQE_FIXED_BUFFER (1 << 0) /* use fixed buffer */ + /* * io_uring_setup() flags */ #define IORING_SETUP_IOPOLL (1 << 0) /* io_context is polled */ -#define IORING_SETUP_SQTHREAD (1 << 1) /* Use SQ thread */ -#define IORING_SETUP_SQWQ (1 << 2) /* Use SQ workqueue */ -#define IORING_SETUP_SQPOLL (1 << 3) /* SQ thread polls */ +#define IORING_SETUP_SQPOLL (1 << 1) /* SQ poll thread */ +#define IORING_SETUP_SQ_AFF (1 << 2) /* sq_thread_cpu is valid */ #define IORING_OP_READV 1 #define IORING_OP_WRITEV 2 #define IORING_OP_FSYNC 3 #define IORING_OP_FDSYNC 4 -#define IORING_OP_READ_FIXED 5 -#define IORING_OP_WRITE_FIXED 6 /* * IO completion data structure (Completion Queue Entry) @@ -114,4 +116,15 @@ struct io_uring_params { struct io_cqring_offsets cq_off; }; +/* + * io_uring_register(2) opcodes and arguments + */ +#define IORING_REGISTER_BUFFERS 0 +#define IORING_UNREGISTER_BUFFERS 1 + +struct io_uring_register_buffers { + struct iovec *iovecs; + unsigned nr_iovecs; +}; + #endif diff --git a/src/liburing.h b/src/liburing.h index ac645f1..4123ba1 100644 --- a/src/liburing.h +++ b/src/liburing.h @@ -43,16 +43,16 @@ struct io_uring { /* * System calls */ -extern int io_uring_setup(unsigned entries, struct iovec *iovecs, - unsigned nr_iovecs, struct io_uring_params *p); +extern int io_uring_setup(unsigned entries, struct io_uring_params *p); extern int io_uring_enter(unsigned fd, unsigned to_submit, unsigned min_complete, unsigned flags); +extern int io_uring_register(int fd, unsigned int opcode, void *arg); /* * Library interface */ extern int io_uring_queue_init(unsigned entries, struct io_uring_params *p, - struct iovec *iovecs, unsigned nr_iovecs, struct io_uring *ring); + struct io_uring *ring); extern void io_uring_queue_exit(struct io_uring *ring); extern int io_uring_get_completion(struct io_uring *ring, struct io_uring_cqe **cqe_ptr); diff --git a/src/syscall.c b/src/syscall.c index d06d59c..6347244 100644 --- a/src/syscall.c +++ b/src/syscall.c @@ -8,19 +8,26 @@ #if defined(__x86_64) #ifndef __NR_sys_io_uring_setup -#define __NR_sys_io_uring_setup 335 +#define __NR_sys_io_uring_setup 335 #endif #ifndef __NR_sys_io_uring_enter -#define __NR_sys_io_uring_enter 336 +#define __NR_sys_io_uring_enter 336 +#endif +#ifndef __NR_sys_io_uring_register +#define __NR_sys_io_uring_register 337 #endif #else #error "Arch not supported yet" #endif -int io_uring_setup(unsigned int entries, struct iovec *iovecs, - unsigned nr_iovecs, struct io_uring_params *p) +int io_uring_register(int fd, unsigned int opcode, void *arg) +{ + return syscall(__NR_sys_io_uring_register, fd, opcode, arg); +} + +int io_uring_setup(unsigned int entries, struct io_uring_params *p) { - return syscall(__NR_sys_io_uring_setup, entries, iovecs, nr_iovecs, p); + return syscall(__NR_sys_io_uring_setup, entries, p); } int io_uring_enter(int fd, unsigned int to_submit, unsigned int min_complete, -- cgit