19f5834c8SLukas Bulwahn /* SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR MIT */ 22b188cc1SJens Axboe /* 32b188cc1SJens Axboe * Header file for the io_uring interface. 42b188cc1SJens Axboe * 52b188cc1SJens Axboe * Copyright (C) 2019 Jens Axboe 62b188cc1SJens Axboe * Copyright (C) 2019 Christoph Hellwig 72b188cc1SJens Axboe */ 82b188cc1SJens Axboe #ifndef LINUX_IO_URING_H 92b188cc1SJens Axboe #define LINUX_IO_URING_H 102b188cc1SJens Axboe 112b188cc1SJens Axboe #include <linux/fs.h> 122b188cc1SJens Axboe #include <linux/types.h> 132b188cc1SJens Axboe 142b188cc1SJens Axboe /* 152b188cc1SJens Axboe * IO submission data structure (Submission Queue Entry) 162b188cc1SJens Axboe */ 172b188cc1SJens Axboe struct io_uring_sqe { 182b188cc1SJens Axboe __u8 opcode; /* type of operation for this sqe */ 196b06314cSJens Axboe __u8 flags; /* IOSQE_ flags */ 202b188cc1SJens Axboe __u16 ioprio; /* ioprio for the request */ 212b188cc1SJens Axboe __s32 fd; /* file descriptor to do IO on */ 2217f2fe35SJens Axboe union { 232b188cc1SJens Axboe __u64 off; /* offset into file */ 2417f2fe35SJens Axboe __u64 addr2; 2517f2fe35SJens Axboe }; 267d67af2cSPavel Begunkov union { 272b188cc1SJens Axboe __u64 addr; /* pointer to buffer or iovecs */ 287d67af2cSPavel Begunkov __u64 splice_off_in; 297d67af2cSPavel Begunkov }; 302b188cc1SJens Axboe __u32 len; /* buffer size or number of iovecs */ 312b188cc1SJens Axboe union { 322b188cc1SJens Axboe __kernel_rwf_t rw_flags; 33c992fe29SChristoph Hellwig __u32 fsync_flags; 345769a351SJiufei Xue __u16 poll_events; /* compatibility */ 355769a351SJiufei Xue __u32 poll32_events; /* word-reversed for BE */ 365d17b4a4SJens Axboe __u32 sync_range_flags; 370fa03c62SJens Axboe __u32 msg_flags; 385262f567SJens Axboe __u32 timeout_flags; 3917f2fe35SJens Axboe __u32 accept_flags; 4062755e35SJens Axboe __u32 cancel_flags; 4115b71abeSJens Axboe __u32 open_flags; 42eddc7ef5SJens Axboe __u32 statx_flags; 434840e418SJens Axboe __u32 fadvise_advice; 447d67af2cSPavel Begunkov __u32 splice_flags; 4580a261fdSJens Axboe __u32 rename_flags; 4614a1143bSJens Axboe __u32 unlink_flags; 47*cf30da90SDmitry Kadashev __u32 hardlink_flags; 482b188cc1SJens Axboe }; 492b188cc1SJens Axboe __u64 user_data; /* data to be passed back at completion time */ 50ddf0322dSJens Axboe /* pack this to avoid bogus arm OABI complaints */ 51ddf0322dSJens Axboe union { 5275c6a039SJens Axboe /* index into fixed buffers, if used */ 5375c6a039SJens Axboe __u16 buf_index; 54ddf0322dSJens Axboe /* for grouped buffer selection */ 55ddf0322dSJens Axboe __u16 buf_group; 56ddf0322dSJens Axboe } __attribute__((packed)); 5775c6a039SJens Axboe /* personality to use, if used */ 5875c6a039SJens Axboe __u16 personality; 597d67af2cSPavel Begunkov __s32 splice_fd_in; 609ba6a1c0SPavel Begunkov __u64 __pad2[2]; 61edafcceeSJens Axboe }; 622b188cc1SJens Axboe 636b47ee6eSPavel Begunkov enum { 646b47ee6eSPavel Begunkov IOSQE_FIXED_FILE_BIT, 656b47ee6eSPavel Begunkov IOSQE_IO_DRAIN_BIT, 666b47ee6eSPavel Begunkov IOSQE_IO_LINK_BIT, 676b47ee6eSPavel Begunkov IOSQE_IO_HARDLINK_BIT, 686b47ee6eSPavel Begunkov IOSQE_ASYNC_BIT, 69bcda7baaSJens Axboe IOSQE_BUFFER_SELECT_BIT, 706b47ee6eSPavel Begunkov }; 716b47ee6eSPavel Begunkov 72def596e9SJens Axboe /* 736b06314cSJens Axboe * sqe->flags 746b06314cSJens Axboe */ 756b47ee6eSPavel Begunkov /* use fixed fileset */ 766b47ee6eSPavel Begunkov #define IOSQE_FIXED_FILE (1U << IOSQE_FIXED_FILE_BIT) 776b47ee6eSPavel Begunkov /* issue after inflight IO */ 786b47ee6eSPavel Begunkov #define IOSQE_IO_DRAIN (1U << IOSQE_IO_DRAIN_BIT) 796b47ee6eSPavel Begunkov /* links next sqe */ 806b47ee6eSPavel Begunkov #define IOSQE_IO_LINK (1U << IOSQE_IO_LINK_BIT) 816b47ee6eSPavel Begunkov /* like LINK, but stronger */ 826b47ee6eSPavel Begunkov #define IOSQE_IO_HARDLINK (1U << IOSQE_IO_HARDLINK_BIT) 836b47ee6eSPavel Begunkov /* always go async */ 846b47ee6eSPavel Begunkov #define IOSQE_ASYNC (1U << IOSQE_ASYNC_BIT) 85bcda7baaSJens Axboe /* select buffer from sqe->buf_group */ 86bcda7baaSJens Axboe #define IOSQE_BUFFER_SELECT (1U << IOSQE_BUFFER_SELECT_BIT) 876b06314cSJens Axboe 886b06314cSJens Axboe /* 89def596e9SJens Axboe * io_uring_setup() flags 90def596e9SJens Axboe */ 91def596e9SJens Axboe #define IORING_SETUP_IOPOLL (1U << 0) /* io_context is polled */ 926c271ce2SJens Axboe #define IORING_SETUP_SQPOLL (1U << 1) /* SQ poll thread */ 936c271ce2SJens Axboe #define IORING_SETUP_SQ_AFF (1U << 2) /* sq_thread_cpu is valid */ 9433a107f0SJens Axboe #define IORING_SETUP_CQSIZE (1U << 3) /* app defines CQ size */ 958110c1a6SJens Axboe #define IORING_SETUP_CLAMP (1U << 4) /* clamp SQ/CQ ring sizes */ 9624369c2eSPavel Begunkov #define IORING_SETUP_ATTACH_WQ (1U << 5) /* attach to existing wq */ 977e84e1c7SStefano Garzarella #define IORING_SETUP_R_DISABLED (1U << 6) /* start with ring disabled */ 98def596e9SJens Axboe 999e3aa61aSJens Axboe enum { 1009e3aa61aSJens Axboe IORING_OP_NOP, 1019e3aa61aSJens Axboe IORING_OP_READV, 1029e3aa61aSJens Axboe IORING_OP_WRITEV, 1039e3aa61aSJens Axboe IORING_OP_FSYNC, 1049e3aa61aSJens Axboe IORING_OP_READ_FIXED, 1059e3aa61aSJens Axboe IORING_OP_WRITE_FIXED, 1069e3aa61aSJens Axboe IORING_OP_POLL_ADD, 1079e3aa61aSJens Axboe IORING_OP_POLL_REMOVE, 1089e3aa61aSJens Axboe IORING_OP_SYNC_FILE_RANGE, 1099e3aa61aSJens Axboe IORING_OP_SENDMSG, 1109e3aa61aSJens Axboe IORING_OP_RECVMSG, 1119e3aa61aSJens Axboe IORING_OP_TIMEOUT, 1129e3aa61aSJens Axboe IORING_OP_TIMEOUT_REMOVE, 1139e3aa61aSJens Axboe IORING_OP_ACCEPT, 1149e3aa61aSJens Axboe IORING_OP_ASYNC_CANCEL, 1159e3aa61aSJens Axboe IORING_OP_LINK_TIMEOUT, 1169e3aa61aSJens Axboe IORING_OP_CONNECT, 117d63d1b5eSJens Axboe IORING_OP_FALLOCATE, 11815b71abeSJens Axboe IORING_OP_OPENAT, 119b5dba59eSJens Axboe IORING_OP_CLOSE, 12005f3fb3cSJens Axboe IORING_OP_FILES_UPDATE, 121eddc7ef5SJens Axboe IORING_OP_STATX, 1223a6820f2SJens Axboe IORING_OP_READ, 1233a6820f2SJens Axboe IORING_OP_WRITE, 1244840e418SJens Axboe IORING_OP_FADVISE, 125c1ca757bSJens Axboe IORING_OP_MADVISE, 126fddafaceSJens Axboe IORING_OP_SEND, 127fddafaceSJens Axboe IORING_OP_RECV, 128cebdb986SJens Axboe IORING_OP_OPENAT2, 1293e4827b0SJens Axboe IORING_OP_EPOLL_CTL, 1307d67af2cSPavel Begunkov IORING_OP_SPLICE, 131ddf0322dSJens Axboe IORING_OP_PROVIDE_BUFFERS, 132067524e9SJens Axboe IORING_OP_REMOVE_BUFFERS, 133f2a8d5c7SPavel Begunkov IORING_OP_TEE, 13436f4fa68SJens Axboe IORING_OP_SHUTDOWN, 13580a261fdSJens Axboe IORING_OP_RENAMEAT, 13614a1143bSJens Axboe IORING_OP_UNLINKAT, 137e34a02dcSDmitry Kadashev IORING_OP_MKDIRAT, 1387a8721f8SDmitry Kadashev IORING_OP_SYMLINKAT, 139*cf30da90SDmitry Kadashev IORING_OP_LINKAT, 1409e3aa61aSJens Axboe 1419e3aa61aSJens Axboe /* this goes last, obviously */ 1429e3aa61aSJens Axboe IORING_OP_LAST, 1439e3aa61aSJens Axboe }; 144c992fe29SChristoph Hellwig 145c992fe29SChristoph Hellwig /* 146c992fe29SChristoph Hellwig * sqe->fsync_flags 147c992fe29SChristoph Hellwig */ 148c992fe29SChristoph Hellwig #define IORING_FSYNC_DATASYNC (1U << 0) 1492b188cc1SJens Axboe 1502b188cc1SJens Axboe /* 151a41525abSJens Axboe * sqe->timeout_flags 152a41525abSJens Axboe */ 153a41525abSJens Axboe #define IORING_TIMEOUT_ABS (1U << 0) 1549c8e11b3SPavel Begunkov #define IORING_TIMEOUT_UPDATE (1U << 1) 155a41525abSJens Axboe 156a41525abSJens Axboe /* 1577d67af2cSPavel Begunkov * sqe->splice_flags 1587d67af2cSPavel Begunkov * extends splice(2) flags 1597d67af2cSPavel Begunkov */ 1607d67af2cSPavel Begunkov #define SPLICE_F_FD_IN_FIXED (1U << 31) /* the last bit of __u32 */ 1617d67af2cSPavel Begunkov 1627d67af2cSPavel Begunkov /* 16388e41cf9SJens Axboe * POLL_ADD flags. Note that since sqe->poll_events is the flag space, the 16488e41cf9SJens Axboe * command flags for POLL_ADD are stored in sqe->len. 16588e41cf9SJens Axboe * 16688e41cf9SJens Axboe * IORING_POLL_ADD_MULTI Multishot poll. Sets IORING_CQE_F_MORE if 16788e41cf9SJens Axboe * the poll handler will continue to report 16888e41cf9SJens Axboe * CQEs on behalf of the same SQE. 169b69de288SJens Axboe * 170b69de288SJens Axboe * IORING_POLL_UPDATE Update existing poll request, matching 171b69de288SJens Axboe * sqe->addr as the old user_data field. 17288e41cf9SJens Axboe */ 17388e41cf9SJens Axboe #define IORING_POLL_ADD_MULTI (1U << 0) 174b69de288SJens Axboe #define IORING_POLL_UPDATE_EVENTS (1U << 1) 175b69de288SJens Axboe #define IORING_POLL_UPDATE_USER_DATA (1U << 2) 17688e41cf9SJens Axboe 17788e41cf9SJens Axboe /* 1782b188cc1SJens Axboe * IO completion data structure (Completion Queue Entry) 1792b188cc1SJens Axboe */ 1802b188cc1SJens Axboe struct io_uring_cqe { 1812b188cc1SJens Axboe __u64 user_data; /* sqe->data submission passed back */ 1822b188cc1SJens Axboe __s32 res; /* result code for this event */ 1832b188cc1SJens Axboe __u32 flags; 1842b188cc1SJens Axboe }; 1852b188cc1SJens Axboe 1862b188cc1SJens Axboe /* 187bcda7baaSJens Axboe * cqe->flags 188bcda7baaSJens Axboe * 189bcda7baaSJens Axboe * IORING_CQE_F_BUFFER If set, the upper 16 bits are the buffer ID 19088e41cf9SJens Axboe * IORING_CQE_F_MORE If set, parent SQE will generate more CQE entries 191bcda7baaSJens Axboe */ 192bcda7baaSJens Axboe #define IORING_CQE_F_BUFFER (1U << 0) 19388e41cf9SJens Axboe #define IORING_CQE_F_MORE (1U << 1) 194bcda7baaSJens Axboe 195bcda7baaSJens Axboe enum { 196bcda7baaSJens Axboe IORING_CQE_BUFFER_SHIFT = 16, 197bcda7baaSJens Axboe }; 198bcda7baaSJens Axboe 199bcda7baaSJens Axboe /* 2002b188cc1SJens Axboe * Magic offsets for the application to mmap the data it needs 2012b188cc1SJens Axboe */ 2022b188cc1SJens Axboe #define IORING_OFF_SQ_RING 0ULL 2032b188cc1SJens Axboe #define IORING_OFF_CQ_RING 0x8000000ULL 2042b188cc1SJens Axboe #define IORING_OFF_SQES 0x10000000ULL 2052b188cc1SJens Axboe 2062b188cc1SJens Axboe /* 2072b188cc1SJens Axboe * Filled with the offset for mmap(2) 2082b188cc1SJens Axboe */ 2092b188cc1SJens Axboe struct io_sqring_offsets { 2102b188cc1SJens Axboe __u32 head; 2112b188cc1SJens Axboe __u32 tail; 2122b188cc1SJens Axboe __u32 ring_mask; 2132b188cc1SJens Axboe __u32 ring_entries; 2142b188cc1SJens Axboe __u32 flags; 2152b188cc1SJens Axboe __u32 dropped; 2162b188cc1SJens Axboe __u32 array; 2172b188cc1SJens Axboe __u32 resv1; 2182b188cc1SJens Axboe __u64 resv2; 2192b188cc1SJens Axboe }; 2202b188cc1SJens Axboe 2216c271ce2SJens Axboe /* 2226c271ce2SJens Axboe * sq_ring->flags 2236c271ce2SJens Axboe */ 2246c271ce2SJens Axboe #define IORING_SQ_NEED_WAKEUP (1U << 0) /* needs io_uring_enter wakeup */ 2256d5f9049SXiaoguang Wang #define IORING_SQ_CQ_OVERFLOW (1U << 1) /* CQ ring is overflown */ 2266c271ce2SJens Axboe 2272b188cc1SJens Axboe struct io_cqring_offsets { 2282b188cc1SJens Axboe __u32 head; 2292b188cc1SJens Axboe __u32 tail; 2302b188cc1SJens Axboe __u32 ring_mask; 2312b188cc1SJens Axboe __u32 ring_entries; 2322b188cc1SJens Axboe __u32 overflow; 2332b188cc1SJens Axboe __u32 cqes; 2340d9b5b3aSStefano Garzarella __u32 flags; 2350d9b5b3aSStefano Garzarella __u32 resv1; 2360d9b5b3aSStefano Garzarella __u64 resv2; 2372b188cc1SJens Axboe }; 2382b188cc1SJens Axboe 2392b188cc1SJens Axboe /* 2407e55a19cSStefano Garzarella * cq_ring->flags 2417e55a19cSStefano Garzarella */ 2427e55a19cSStefano Garzarella 2437e55a19cSStefano Garzarella /* disable eventfd notifications */ 2447e55a19cSStefano Garzarella #define IORING_CQ_EVENTFD_DISABLED (1U << 0) 2457e55a19cSStefano Garzarella 2467e55a19cSStefano Garzarella /* 2472b188cc1SJens Axboe * io_uring_enter(2) flags 2482b188cc1SJens Axboe */ 2492b188cc1SJens Axboe #define IORING_ENTER_GETEVENTS (1U << 0) 2506c271ce2SJens Axboe #define IORING_ENTER_SQ_WAKEUP (1U << 1) 25190554200SJens Axboe #define IORING_ENTER_SQ_WAIT (1U << 2) 252c73ebb68SHao Xu #define IORING_ENTER_EXT_ARG (1U << 3) 2532b188cc1SJens Axboe 2542b188cc1SJens Axboe /* 2552b188cc1SJens Axboe * Passed in for io_uring_setup(2). Copied back with updated info on success 2562b188cc1SJens Axboe */ 2572b188cc1SJens Axboe struct io_uring_params { 2582b188cc1SJens Axboe __u32 sq_entries; 2592b188cc1SJens Axboe __u32 cq_entries; 2602b188cc1SJens Axboe __u32 flags; 2616c271ce2SJens Axboe __u32 sq_thread_cpu; 2626c271ce2SJens Axboe __u32 sq_thread_idle; 263ac90f249SJens Axboe __u32 features; 26424369c2eSPavel Begunkov __u32 wq_fd; 26524369c2eSPavel Begunkov __u32 resv[3]; 2662b188cc1SJens Axboe struct io_sqring_offsets sq_off; 2672b188cc1SJens Axboe struct io_cqring_offsets cq_off; 2682b188cc1SJens Axboe }; 2692b188cc1SJens Axboe 270edafcceeSJens Axboe /* 271ac90f249SJens Axboe * io_uring_params->features flags 272ac90f249SJens Axboe */ 273ac90f249SJens Axboe #define IORING_FEAT_SINGLE_MMAP (1U << 0) 2741d7bb1d5SJens Axboe #define IORING_FEAT_NODROP (1U << 1) 275da8c9690SJens Axboe #define IORING_FEAT_SUBMIT_STABLE (1U << 2) 276ba04291eSJens Axboe #define IORING_FEAT_RW_CUR_POS (1U << 3) 277cccf0ee8SJens Axboe #define IORING_FEAT_CUR_PERSONALITY (1U << 4) 278d7718a9dSJens Axboe #define IORING_FEAT_FAST_POLL (1U << 5) 2795769a351SJiufei Xue #define IORING_FEAT_POLL_32BITS (1U << 6) 28028cea78aSJens Axboe #define IORING_FEAT_SQPOLL_NONFIXED (1U << 7) 281c73ebb68SHao Xu #define IORING_FEAT_EXT_ARG (1U << 8) 2821c0aa1faSJens Axboe #define IORING_FEAT_NATIVE_WORKERS (1U << 9) 2839690557eSPavel Begunkov #define IORING_FEAT_RSRC_TAGS (1U << 10) 284ac90f249SJens Axboe 285ac90f249SJens Axboe /* 286edafcceeSJens Axboe * io_uring_register(2) opcodes and arguments 287edafcceeSJens Axboe */ 2889d4a75efSStefano Garzarella enum { 2899d4a75efSStefano Garzarella IORING_REGISTER_BUFFERS = 0, 2909d4a75efSStefano Garzarella IORING_UNREGISTER_BUFFERS = 1, 2919d4a75efSStefano Garzarella IORING_REGISTER_FILES = 2, 2929d4a75efSStefano Garzarella IORING_UNREGISTER_FILES = 3, 2939d4a75efSStefano Garzarella IORING_REGISTER_EVENTFD = 4, 2949d4a75efSStefano Garzarella IORING_UNREGISTER_EVENTFD = 5, 2959d4a75efSStefano Garzarella IORING_REGISTER_FILES_UPDATE = 6, 2969d4a75efSStefano Garzarella IORING_REGISTER_EVENTFD_ASYNC = 7, 2979d4a75efSStefano Garzarella IORING_REGISTER_PROBE = 8, 2989d4a75efSStefano Garzarella IORING_REGISTER_PERSONALITY = 9, 2999d4a75efSStefano Garzarella IORING_UNREGISTER_PERSONALITY = 10, 30021b55dbcSStefano Garzarella IORING_REGISTER_RESTRICTIONS = 11, 3017e84e1c7SStefano Garzarella IORING_REGISTER_ENABLE_RINGS = 12, 302992da01aSPavel Begunkov 303992da01aSPavel Begunkov /* extended with tagging */ 304992da01aSPavel Begunkov IORING_REGISTER_FILES2 = 13, 305992da01aSPavel Begunkov IORING_REGISTER_FILES_UPDATE2 = 14, 306992da01aSPavel Begunkov IORING_REGISTER_BUFFERS2 = 15, 307992da01aSPavel Begunkov IORING_REGISTER_BUFFERS_UPDATE = 16, 3089d4a75efSStefano Garzarella 309fe76421dSJens Axboe /* set/clear io-wq thread affinities */ 310fe76421dSJens Axboe IORING_REGISTER_IOWQ_AFF = 17, 311fe76421dSJens Axboe IORING_UNREGISTER_IOWQ_AFF = 18, 312fe76421dSJens Axboe 3139d4a75efSStefano Garzarella /* this goes last */ 3149d4a75efSStefano Garzarella IORING_REGISTER_LAST 3159d4a75efSStefano Garzarella }; 316c3a31e60SJens Axboe 317269bbe5fSBijan Mottahedeh /* deprecated, see struct io_uring_rsrc_update */ 318c3a31e60SJens Axboe struct io_uring_files_update { 319c3a31e60SJens Axboe __u32 offset; 3201292e972SEugene Syromiatnikov __u32 resv; 3211292e972SEugene Syromiatnikov __aligned_u64 /* __s32 * */ fds; 322c3a31e60SJens Axboe }; 323edafcceeSJens Axboe 324792e3582SPavel Begunkov struct io_uring_rsrc_register { 325792e3582SPavel Begunkov __u32 nr; 326992da01aSPavel Begunkov __u32 resv; 327992da01aSPavel Begunkov __u64 resv2; 328792e3582SPavel Begunkov __aligned_u64 data; 329792e3582SPavel Begunkov __aligned_u64 tags; 330792e3582SPavel Begunkov }; 331792e3582SPavel Begunkov 332c3bdad02SPavel Begunkov struct io_uring_rsrc_update { 333c3bdad02SPavel Begunkov __u32 offset; 334c3bdad02SPavel Begunkov __u32 resv; 335c3bdad02SPavel Begunkov __aligned_u64 data; 336c3bdad02SPavel Begunkov }; 337c3bdad02SPavel Begunkov 338c3bdad02SPavel Begunkov struct io_uring_rsrc_update2 { 339c3bdad02SPavel Begunkov __u32 offset; 340c3bdad02SPavel Begunkov __u32 resv; 341c3bdad02SPavel Begunkov __aligned_u64 data; 342c3bdad02SPavel Begunkov __aligned_u64 tags; 343c3bdad02SPavel Begunkov __u32 nr; 344992da01aSPavel Begunkov __u32 resv2; 345c3bdad02SPavel Begunkov }; 346c3bdad02SPavel Begunkov 3474e0377a1Snoah /* Skip updating fd indexes set to this value in the fd table */ 3484e0377a1Snoah #define IORING_REGISTER_FILES_SKIP (-2) 3494e0377a1Snoah 35066f4af93SJens Axboe #define IO_URING_OP_SUPPORTED (1U << 0) 35166f4af93SJens Axboe 35266f4af93SJens Axboe struct io_uring_probe_op { 35366f4af93SJens Axboe __u8 op; 35466f4af93SJens Axboe __u8 resv; 35566f4af93SJens Axboe __u16 flags; /* IO_URING_OP_* flags */ 35666f4af93SJens Axboe __u32 resv2; 35766f4af93SJens Axboe }; 35866f4af93SJens Axboe 35966f4af93SJens Axboe struct io_uring_probe { 36066f4af93SJens Axboe __u8 last_op; /* last opcode supported */ 36166f4af93SJens Axboe __u8 ops_len; /* length of ops[] array below */ 36266f4af93SJens Axboe __u16 resv; 36366f4af93SJens Axboe __u32 resv2[3]; 36466f4af93SJens Axboe struct io_uring_probe_op ops[0]; 36566f4af93SJens Axboe }; 36666f4af93SJens Axboe 36721b55dbcSStefano Garzarella struct io_uring_restriction { 36821b55dbcSStefano Garzarella __u16 opcode; 36921b55dbcSStefano Garzarella union { 37021b55dbcSStefano Garzarella __u8 register_op; /* IORING_RESTRICTION_REGISTER_OP */ 37121b55dbcSStefano Garzarella __u8 sqe_op; /* IORING_RESTRICTION_SQE_OP */ 37221b55dbcSStefano Garzarella __u8 sqe_flags; /* IORING_RESTRICTION_SQE_FLAGS_* */ 37321b55dbcSStefano Garzarella }; 37421b55dbcSStefano Garzarella __u8 resv; 37521b55dbcSStefano Garzarella __u32 resv2[3]; 37621b55dbcSStefano Garzarella }; 37721b55dbcSStefano Garzarella 37821b55dbcSStefano Garzarella /* 37921b55dbcSStefano Garzarella * io_uring_restriction->opcode values 38021b55dbcSStefano Garzarella */ 38121b55dbcSStefano Garzarella enum { 38221b55dbcSStefano Garzarella /* Allow an io_uring_register(2) opcode */ 38321b55dbcSStefano Garzarella IORING_RESTRICTION_REGISTER_OP = 0, 38421b55dbcSStefano Garzarella 38521b55dbcSStefano Garzarella /* Allow an sqe opcode */ 38621b55dbcSStefano Garzarella IORING_RESTRICTION_SQE_OP = 1, 38721b55dbcSStefano Garzarella 38821b55dbcSStefano Garzarella /* Allow sqe flags */ 38921b55dbcSStefano Garzarella IORING_RESTRICTION_SQE_FLAGS_ALLOWED = 2, 39021b55dbcSStefano Garzarella 39121b55dbcSStefano Garzarella /* Require sqe flags (these flags must be set on each submission) */ 39221b55dbcSStefano Garzarella IORING_RESTRICTION_SQE_FLAGS_REQUIRED = 3, 39321b55dbcSStefano Garzarella 39421b55dbcSStefano Garzarella IORING_RESTRICTION_LAST 39521b55dbcSStefano Garzarella }; 39621b55dbcSStefano Garzarella 397c73ebb68SHao Xu struct io_uring_getevents_arg { 398c73ebb68SHao Xu __u64 sigmask; 399c73ebb68SHao Xu __u32 sigmask_sz; 400c73ebb68SHao Xu __u32 pad; 401c73ebb68SHao Xu __u64 ts; 402c73ebb68SHao Xu }; 403c73ebb68SHao Xu 4042b188cc1SJens Axboe #endif 405