Update to newer io_uring API
[fio.git] / os / io_uring.h
index 61a37531c5894659d7d0e57c91cbb428c17631d9..20e4c22e040d6023bef78e64cafca8694c629733 100644 (file)
@@ -1,23 +1,33 @@
-#ifndef IO_URING_H
-#define IO_URING_H
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * Header file for the io_uring interface.
+ *
+ * Copyright (C) 2019 Jens Axboe
+ * Copyright (C) 2019 Christoph Hellwig
+ */
+#ifndef LINUX_IO_URING_H
+#define LINUX_IO_URING_H
+
+#include <linux/fs.h>
+#include <linux/types.h>
 
 /*
- * IO submission data structure
+ * IO submission data structure (Submission Queue Entry)
  */
-struct io_uring_iocb {
-       u8      opcode;
-       u8      flags;
-       u16     ioprio;
-       s32     fd;
-       u64     off;
+struct io_uring_sqe {
+       __u8    opcode;
+       __u8    flags;
+       __u16   ioprio;
+       __s32   fd;
+       __u64   off;
        union {
                void    *addr;
-               u64     __pad;
+               __u64   __pad;
        };
-       u32     len;
+       __u32   len;
        union {
                __kernel_rwf_t  rw_flags;
-               u32             __resv;
+               __u32           __resv;
        };
 };
 
@@ -25,73 +35,78 @@ struct io_uring_iocb {
  * io_uring_setup() flags
  */
 #define IORING_SETUP_IOPOLL    (1 << 0)        /* io_context is polled */
-#define IORING_SETUP_FIXEDBUFS (1 << 1)        /* IO buffers are fixed */
-#define IORING_SETUP_SQTHREAD  (1 << 2)        /* Use SQ thread */
-#define IORING_SETUP_SQWQ      (1 << 3)        /* Use SQ workqueue */
-#define IORING_SETUP_SQPOLL    (1 << 4)        /* SQ thread polls */
+#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_OP_READ         1
-#define IORING_OP_WRITE                2
+#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
+ * IO completion data structure (Completion Queue Entry)
  */
-struct io_uring_event {
-       __u64   index;          /* what iocb this event came from */
-       s32     res;            /* result code for this event */
-       u32     flags;
+struct io_uring_cqe {
+       __u64   index;          /* what sqe this event came from */
+       __s32   res;            /* result code for this event */
+       __u32   flags;
 };
 
-#define IOEV_FLAG_CACHEHIT     (1 << 0)        /* IO did not hit media */
+/*
+ * io_uring_event->flags
+ */
+#define IOCQE_FLAG_CACHEHIT    (1 << 0)        /* IO did not hit media */
 
 /*
  * Magic offsets for the application to mmap the data it needs
  */
 #define IORING_OFF_SQ_RING             0ULL
 #define IORING_OFF_CQ_RING             0x8000000ULL
-#define IORING_OFF_IOCB                        0x10000000ULL
+#define IORING_OFF_SQES                        0x10000000ULL
 
 /*
  * Filled with the offset for mmap(2)
  */
 struct io_sqring_offsets {
-       u32 head;
-       u32 tail;
-       u32 ring_mask;
-       u32 ring_entries;
-       u32 flags;
-       u32 dropped;
-       u32 array;
-       u32 resv[3];
+       __u32 head;
+       __u32 tail;
+       __u32 ring_mask;
+       __u32 ring_entries;
+       __u32 flags;
+       __u32 dropped;
+       __u32 array;
+       __u32 resv[3];
 };
 
 #define IORING_SQ_NEED_WAKEUP  (1 << 0) /* needs io_uring_enter wakeup */
 
 struct io_cqring_offsets {
-       u32 head;
-       u32 tail;
-       u32 ring_mask;
-       u32 ring_entries;
-       u32 overflow;
-       u32 events;
-       u32 resv[4];
+       __u32 head;
+       __u32 tail;
+       __u32 ring_mask;
+       __u32 ring_entries;
+       __u32 overflow;
+       __u32 cqes;
+       __u32 resv[4];
 };
 
+/*
+ * io_uring_enter(2) flags
+ */
 #define IORING_ENTER_GETEVENTS (1 << 0)
 
 /*
  * Passed in for io_uring_setup(2). Copied back with updated info on success
  */
 struct io_uring_params {
-       u32 sq_entries;
-       u32 cq_entries;
-       u32 flags;
-       u16 sq_thread_cpu;
-       u16 resv[9];
+       __u32 sq_entries;
+       __u32 cq_entries;
+       __u32 flags;
+       __u16 sq_thread_cpu;
+       __u16 resv[9];
        struct io_sqring_offsets sq_off;
        struct io_cqring_offsets cq_off;
 };