summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2019-01-10 14:28:10 -0700
committerJens Axboe <axboe@kernel.dk>2019-01-10 14:28:10 -0700
commitd5b4ae1c58f49d3d665faadd0e2eddcef9aadc68 (patch)
tree77db153ea81470f720d18c7934b408b8ac954e2d /src
parent6cdce17753a3664484c907ed264e734ed5f3c2d7 (diff)
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 <axboe@kernel.dk>
Diffstat (limited to 'src')
-rw-r--r--src/io_uring.c3
-rw-r--r--src/io_uring.h25
-rw-r--r--src/liburing.h6
-rw-r--r--src/syscall.c17
4 files changed, 35 insertions, 16 deletions
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,