t/io_uring: make submits/reaps per-second reflected with sq thread poll
[fio.git] / os / io_uring.h
index 7dd21126f142c5c856d85f67fc3d5340b035828f..613930dbf3253ef744263599383211f91d30995f 100644 (file)
 #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;         /* type of operation for this sqe */
+       __u8    flags;          /* as of now unused */
+       __u16   ioprio;         /* ioprio for the request */
+       __s32   fd;             /* file descriptor to do IO on */
+       __u64   off;            /* offset into file */
        union {
-               void    *addr;
+               void    *addr;  /* buffer or iovecs */
                __u64   __pad;
        };
-       __u32   len;
+       __u32   len;            /* buffer size or number of iovecs */
        union {
                __kernel_rwf_t  rw_flags;
                __u32           __resv;
        };
+       __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_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_SQPOLL    (1 << 1)        /* SQ poll thread */
+#define IORING_SETUP_SQ_AFF    (1 << 2)        /* sq_thread_cpu is valid */
 
-#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 */
+struct io_uring_cqe {
+       __u64   data;           /* sqe->data submission passed back */
        __s32   res;            /* result code for this event */
        __u32   flags;
 };
@@ -59,14 +63,14 @@ struct io_uring_event {
 /*
  * io_uring_event->flags
  */
-#define IOEV_FLAG_CACHEHIT     (1 << 0)        /* IO did not hit media */
+#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)
@@ -90,7 +94,7 @@ struct io_cqring_offsets {
        __u32 ring_mask;
        __u32 ring_entries;
        __u32 overflow;
-       __u32 events;
+       __u32 cqes;
        __u32 resv[4];
 };
 
@@ -112,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