| ... | ... | @@ -3740,35 +3740,6 @@ else |
| 3740 | 3740 | fields: siginfo_fields_union, |
| 3741 | 3741 | }; |
| 3742 | 3742 | |
| 3743 | | pub const io_uring_params = extern struct { |
| 3744 | | sq_entries: u32, |
| 3745 | | cq_entries: u32, |
| 3746 | | flags: u32, |
| 3747 | | sq_thread_cpu: u32, |
| 3748 | | sq_thread_idle: u32, |
| 3749 | | features: u32, |
| 3750 | | wq_fd: u32, |
| 3751 | | resv: [3]u32, |
| 3752 | | sq_off: io_sqring_offsets, |
| 3753 | | cq_off: io_cqring_offsets, |
| 3754 | | }; |
| 3755 | | |
| 3756 | | // io_uring_params.features flags |
| 3757 | | |
| 3758 | | pub const IORING_FEAT_SINGLE_MMAP = 1 << 0; |
| 3759 | | pub const IORING_FEAT_NODROP = 1 << 1; |
| 3760 | | pub const IORING_FEAT_SUBMIT_STABLE = 1 << 2; |
| 3761 | | pub const IORING_FEAT_RW_CUR_POS = 1 << 3; |
| 3762 | | pub const IORING_FEAT_CUR_PERSONALITY = 1 << 4; |
| 3763 | | pub const IORING_FEAT_FAST_POLL = 1 << 5; |
| 3764 | | pub const IORING_FEAT_POLL_32BITS = 1 << 6; |
| 3765 | | pub const IORING_FEAT_SQPOLL_NONFIXED = 1 << 7; |
| 3766 | | pub const IORING_FEAT_EXT_ARG = 1 << 8; |
| 3767 | | pub const IORING_FEAT_NATIVE_WORKERS = 1 << 9; |
| 3768 | | pub const IORING_FEAT_RSRC_TAGS = 1 << 10; |
| 3769 | | pub const IORING_FEAT_CQE_SKIP = 1 << 11; |
| 3770 | | pub const IORING_FEAT_LINKED_FILE = 1 << 12; |
| 3771 | | |
| 3772 | 3743 | // io_uring_params.flags |
| 3773 | 3744 | |
| 3774 | 3745 | /// io_context is polled |
| ... | ... | @@ -3812,53 +3783,15 @@ pub const IORING_SETUP_SQE128 = 1 << 10; |
| 3812 | 3783 | /// CQEs are 32 byte |
| 3813 | 3784 | pub const IORING_SETUP_CQE32 = 1 << 11; |
| 3814 | 3785 | |
| 3815 | | pub const io_sqring_offsets = extern struct { |
| 3816 | | /// offset of ring head |
| 3817 | | head: u32, |
| 3818 | | |
| 3819 | | /// offset of ring tail |
| 3820 | | tail: u32, |
| 3821 | | |
| 3822 | | /// ring mask value |
| 3823 | | ring_mask: u32, |
| 3824 | | |
| 3825 | | /// entries in ring |
| 3826 | | ring_entries: u32, |
| 3786 | /// Only one task is allowed to submit requests |
| 3787 | pub const IORING_SETUP_SINGLE_ISSUER = 1 << 12; |
| 3827 | 3788 | |
| 3828 | | /// ring flags |
| 3829 | | flags: u32, |
| 3830 | | |
| 3831 | | /// number of sqes not submitted |
| 3832 | | dropped: u32, |
| 3833 | | |
| 3834 | | /// sqe index array |
| 3835 | | array: u32, |
| 3836 | | |
| 3837 | | resv1: u32, |
| 3838 | | user_addr: u64, |
| 3839 | | }; |
| 3840 | | |
| 3841 | | // io_sqring_offsets.flags |
| 3842 | | |
| 3843 | | /// needs io_uring_enter wakeup |
| 3844 | | pub const IORING_SQ_NEED_WAKEUP = 1 << 0; |
| 3845 | | /// kernel has cqes waiting beyond the cq ring |
| 3846 | | pub const IORING_SQ_CQ_OVERFLOW = 1 << 1; |
| 3847 | | /// task should enter the kernel |
| 3848 | | pub const IORING_SQ_TASKRUN = 1 << 2; |
| 3849 | | |
| 3850 | | pub const io_cqring_offsets = extern struct { |
| 3851 | | head: u32, |
| 3852 | | tail: u32, |
| 3853 | | ring_mask: u32, |
| 3854 | | ring_entries: u32, |
| 3855 | | overflow: u32, |
| 3856 | | cqes: u32, |
| 3857 | | flags: u32, |
| 3858 | | resv: u32, |
| 3859 | | user_addr: u64, |
| 3860 | | }; |
| 3789 | /// Defer running task work to get events. |
| 3790 | /// Rather than running bits of task work whenever the task transitions |
| 3791 | /// try to do it just before it is needed. |
| 3792 | pub const IORING_SETUP_DEFER_TASKRUN = 1 << 13; |
| 3861 | 3793 | |
| 3794 | /// IO submission data structure (Submission Queue Entry) |
| 3862 | 3795 | pub const io_uring_sqe = extern struct { |
| 3863 | 3796 | opcode: IORING_OP, |
| 3864 | 3797 | flags: u8, |
| ... | ... | @@ -3872,9 +3805,18 @@ pub const io_uring_sqe = extern struct { |
| 3872 | 3805 | buf_index: u16, |
| 3873 | 3806 | personality: u16, |
| 3874 | 3807 | splice_fd_in: i32, |
| 3875 | | __pad2: [2]u64, |
| 3808 | addr3: u64, |
| 3809 | resv: u64, |
| 3876 | 3810 | }; |
| 3877 | 3811 | |
| 3812 | /// If sqe->file_index is set to this for opcodes that instantiate a new |
| 3813 | /// direct descriptor (like openat/openat2/accept), then io_uring will allocate |
| 3814 | /// an available direct descriptor instead of having the application pass one |
| 3815 | /// in. The picked direct descriptor will be returned in cqe->res, or -ENFILE |
| 3816 | /// if the space is full. |
| 3817 | /// Available since Linux 5.19 |
| 3818 | pub const IORING_FILE_INDEX_ALLOC = maxInt(u32); |
| 3819 | |
| 3878 | 3820 | pub const IOSQE_BIT = enum(u8) { |
| 3879 | 3821 | FIXED_FILE, |
| 3880 | 3822 | IO_DRAIN, |
| ... | ... | @@ -3964,6 +3906,10 @@ pub const IORING_OP = enum(u8) { |
| 3964 | 3906 | |
| 3965 | 3907 | _, |
| 3966 | 3908 | }; |
| 3909 | // io_uring_sqe.uring_cmd_flags (rw_flags in the Zig struct) |
| 3910 | |
| 3911 | /// use registered buffer; pass thig flag along with setting sqe->buf_index. |
| 3912 | pub const IORING_URING_CMD_FIXED = 1 << 0; |
| 3967 | 3913 | |
| 3968 | 3914 | // io_uring_sqe.fsync_flags (rw_flags in the Zig struct) |
| 3969 | 3915 | pub const IORING_FSYNC_DATASYNC = 1 << 0; |
| ... | ... | @@ -3990,6 +3936,7 @@ pub const IORING_POLL_ADD_MULTI = 1 << 0; |
| 3990 | 3936 | /// Update existing poll request, matching sqe->addr as the old user_data field. |
| 3991 | 3937 | pub const IORING_POLL_UPDATE_EVENTS = 1 << 1; |
| 3992 | 3938 | pub const IORING_POLL_UPDATE_USER_DATA = 1 << 2; |
| 3939 | pub const IORING_POLL_ADD_LEVEL = 1 << 3; |
| 3993 | 3940 | |
| 3994 | 3941 | // ASYNC_CANCEL flags. |
| 3995 | 3942 | |
| ... | ... | @@ -3999,6 +3946,8 @@ pub const IORING_ASYNC_CANCEL_ALL = 1 << 0; |
| 3999 | 3946 | pub const IORING_ASYNC_CANCEL_FD = 1 << 1; |
| 4000 | 3947 | /// Match any request |
| 4001 | 3948 | pub const IORING_ASYNC_CANCEL_ANY = 1 << 2; |
| 3949 | /// 'fd' passed in is a fixed descriptor. Available since Linux 6.0 |
| 3950 | pub const IORING_ASYNC_CANCEL_FD_FIXED = 1 << 3; |
| 4002 | 3951 | |
| 4003 | 3952 | // send/sendmsg and recv/recvmsg flags (sqe->ioprio) |
| 4004 | 3953 | |
| ... | ... | @@ -4007,10 +3956,32 @@ pub const IORING_ASYNC_CANCEL_ANY = 1 << 2; |
| 4007 | 3956 | pub const IORING_RECVSEND_POLL_FIRST = 1 << 0; |
| 4008 | 3957 | /// Multishot recv. Sets IORING_CQE_F_MORE if the handler will continue to report CQEs on behalf of the same SQE. |
| 4009 | 3958 | pub const IORING_RECV_MULTISHOT = 1 << 1; |
| 4010 | | |
| 4011 | | /// accept flags stored in sqe->ioprio |
| 3959 | /// Use registered buffers, the index is stored in the buf_index field. |
| 3960 | pub const IORING_RECVSEND_FIXED_BUF = 1 << 2; |
| 3961 | /// If set, SEND[MSG]_ZC should report the zerocopy usage in cqe.res for the IORING_CQE_F_NOTIF cqe. |
| 3962 | pub const IORING_SEND_ZC_REPORT_USAGE = 1 << 3; |
| 3963 | /// CQE.RES FOR IORING_CQE_F_NOTIF if IORING_SEND_ZC_REPORT_USAGE was requested |
| 3964 | pub const IORING_NOTIF_USAGE_ZC_COPIED = 1 << 31; |
| 3965 | |
| 3966 | /// accept flags stored in sqe->iopri |
| 4012 | 3967 | pub const IORING_ACCEPT_MULTISHOT = 1 << 0; |
| 4013 | 3968 | |
| 3969 | /// IORING_OP_MSG_RING command types, stored in sqe->addr |
| 3970 | pub const IORING_MSG_RING_COMMAND = enum(u8) { |
| 3971 | /// pass sqe->len as 'res' and off as user_data |
| 3972 | DATA, |
| 3973 | /// send a registered fd to another ring |
| 3974 | SEND_FD, |
| 3975 | }; |
| 3976 | |
| 3977 | // io_uring_sqe.msg_ring_flags (rw_flags in the Zig struct) |
| 3978 | |
| 3979 | /// Don't post a CQE to the target ring. Not applicable for IORING_MSG_DATA, obviously. |
| 3980 | pub const IORING_MSG_RING_CQE_SKIP = 1 << 0; |
| 3981 | |
| 3982 | /// Pass through the flags from sqe->file_index (splice_fd_in in the zig struct) to cqe->flags */ |
| 3983 | pub const IORING_MSG_RING_FLAGS_PASS = 1 << 1; |
| 3984 | |
| 4014 | 3985 | // IO completion data structure (Completion Queue Entry) |
| 4015 | 3986 | pub const io_uring_cqe = extern struct { |
| 4016 | 3987 | /// io_uring_sqe.data submission passed back |
| ... | ... | @@ -4020,6 +3991,8 @@ pub const io_uring_cqe = extern struct { |
| 4020 | 3991 | res: i32, |
| 4021 | 3992 | flags: u32, |
| 4022 | 3993 | |
| 3994 | // Followed by 16 bytes of padding if initialized with IORING_SETUP_CQE32, doubling cqe size |
| 3995 | |
| 4023 | 3996 | pub fn err(self: io_uring_cqe) E { |
| 4024 | 3997 | if (self.res > -4096 and self.res < 0) { |
| 4025 | 3998 | return @as(E, @enumFromInt(-self.res)); |
| ... | ... | @@ -4040,11 +4013,66 @@ pub const IORING_CQE_F_SOCK_NONEMPTY = 1 << 2; |
| 4040 | 4013 | /// Set for notification CQEs. Can be used to distinct them from sends. |
| 4041 | 4014 | pub const IORING_CQE_F_NOTIF = 1 << 3; |
| 4042 | 4015 | |
| 4016 | pub const IORING_CQE_BUFFER_SHIFT = 16; |
| 4017 | |
| 4043 | 4018 | /// Magic offsets for the application to mmap the data it needs |
| 4044 | 4019 | pub const IORING_OFF_SQ_RING = 0; |
| 4045 | 4020 | pub const IORING_OFF_CQ_RING = 0x8000000; |
| 4046 | 4021 | pub const IORING_OFF_SQES = 0x10000000; |
| 4047 | 4022 | |
| 4023 | /// Filled with the offset for mmap(2) |
| 4024 | pub const io_sqring_offsets = extern struct { |
| 4025 | /// offset of ring head |
| 4026 | head: u32, |
| 4027 | |
| 4028 | /// offset of ring tail |
| 4029 | tail: u32, |
| 4030 | |
| 4031 | /// ring mask value |
| 4032 | ring_mask: u32, |
| 4033 | |
| 4034 | /// entries in ring |
| 4035 | ring_entries: u32, |
| 4036 | |
| 4037 | /// ring flags |
| 4038 | flags: u32, |
| 4039 | |
| 4040 | /// number of sqes not submitted |
| 4041 | dropped: u32, |
| 4042 | |
| 4043 | /// sqe index array |
| 4044 | array: u32, |
| 4045 | |
| 4046 | resv1: u32, |
| 4047 | resv2: u64, |
| 4048 | }; |
| 4049 | |
| 4050 | // io_sqring_offsets.flags |
| 4051 | |
| 4052 | /// needs io_uring_enter wakeup |
| 4053 | pub const IORING_SQ_NEED_WAKEUP = 1 << 0; |
| 4054 | /// kernel has cqes waiting beyond the cq ring |
| 4055 | pub const IORING_SQ_CQ_OVERFLOW = 1 << 1; |
| 4056 | /// task should enter the kernel |
| 4057 | pub const IORING_SQ_TASKRUN = 1 << 2; |
| 4058 | |
| 4059 | pub const io_cqring_offsets = extern struct { |
| 4060 | head: u32, |
| 4061 | tail: u32, |
| 4062 | ring_mask: u32, |
| 4063 | ring_entries: u32, |
| 4064 | overflow: u32, |
| 4065 | cqes: u32, |
| 4066 | flags: u32, |
| 4067 | resv: u32, |
| 4068 | user_addr: u64, |
| 4069 | }; |
| 4070 | |
| 4071 | // io_cqring_offsets.flags |
| 4072 | |
| 4073 | /// disable eventfd notifications |
| 4074 | pub const IORING_CQ_EVENTFD_DISABLED = 1 << 0; |
| 4075 | |
| 4048 | 4076 | // io_uring_enter flags |
| 4049 | 4077 | pub const IORING_ENTER_GETEVENTS = 1 << 0; |
| 4050 | 4078 | pub const IORING_ENTER_SQ_WAKEUP = 1 << 1; |
| ... | ... | @@ -4052,8 +4080,37 @@ pub const IORING_ENTER_SQ_WAIT = 1 << 2; |
| 4052 | 4080 | pub const IORING_ENTER_EXT_ARG = 1 << 3; |
| 4053 | 4081 | pub const IORING_ENTER_REGISTERED_RING = 1 << 4; |
| 4054 | 4082 | |
| 4083 | pub const io_uring_params = extern struct { |
| 4084 | sq_entries: u32, |
| 4085 | cq_entries: u32, |
| 4086 | flags: u32, |
| 4087 | sq_thread_cpu: u32, |
| 4088 | sq_thread_idle: u32, |
| 4089 | features: u32, |
| 4090 | wq_fd: u32, |
| 4091 | resv: [3]u32, |
| 4092 | sq_off: io_sqring_offsets, |
| 4093 | cq_off: io_cqring_offsets, |
| 4094 | }; |
| 4095 | |
| 4096 | // io_uring_params.features flags |
| 4097 | |
| 4098 | pub const IORING_FEAT_SINGLE_MMAP = 1 << 0; |
| 4099 | pub const IORING_FEAT_NODROP = 1 << 1; |
| 4100 | pub const IORING_FEAT_SUBMIT_STABLE = 1 << 2; |
| 4101 | pub const IORING_FEAT_RW_CUR_POS = 1 << 3; |
| 4102 | pub const IORING_FEAT_CUR_PERSONALITY = 1 << 4; |
| 4103 | pub const IORING_FEAT_FAST_POLL = 1 << 5; |
| 4104 | pub const IORING_FEAT_POLL_32BITS = 1 << 6; |
| 4105 | pub const IORING_FEAT_SQPOLL_NONFIXED = 1 << 7; |
| 4106 | pub const IORING_FEAT_EXT_ARG = 1 << 8; |
| 4107 | pub const IORING_FEAT_NATIVE_WORKERS = 1 << 9; |
| 4108 | pub const IORING_FEAT_RSRC_TAGS = 1 << 10; |
| 4109 | pub const IORING_FEAT_CQE_SKIP = 1 << 11; |
| 4110 | pub const IORING_FEAT_LINKED_FILE = 1 << 12; |
| 4111 | |
| 4055 | 4112 | // io_uring_register opcodes and arguments |
| 4056 | | pub const IORING_REGISTER = enum(u8) { |
| 4113 | pub const IORING_REGISTER = enum(u32) { |
| 4057 | 4114 | REGISTER_BUFFERS, |
| 4058 | 4115 | UNREGISTER_BUFFERS, |
| 4059 | 4116 | REGISTER_FILES, |
| ... | ... | @@ -4069,41 +4126,93 @@ pub const IORING_REGISTER = enum(u8) { |
| 4069 | 4126 | REGISTER_ENABLE_RINGS, |
| 4070 | 4127 | |
| 4071 | 4128 | // extended with tagging |
| 4072 | | IORING_REGISTER_FILES2, |
| 4073 | | IORING_REGISTER_FILES_UPDATE2, |
| 4074 | | IORING_REGISTER_BUFFERS2, |
| 4075 | | IORING_REGISTER_BUFFERS_UPDATE, |
| 4129 | REGISTER_FILES2, |
| 4130 | REGISTER_FILES_UPDATE2, |
| 4131 | REGISTER_BUFFERS2, |
| 4132 | REGISTER_BUFFERS_UPDATE, |
| 4076 | 4133 | |
| 4077 | 4134 | // set/clear io-wq thread affinities |
| 4078 | | IORING_REGISTER_IOWQ_AFF, |
| 4079 | | IORING_UNREGISTER_IOWQ_AFF, |
| 4135 | REGISTER_IOWQ_AFF, |
| 4136 | UNREGISTER_IOWQ_AFF, |
| 4080 | 4137 | |
| 4081 | 4138 | // set/get max number of io-wq workers |
| 4082 | | IORING_REGISTER_IOWQ_MAX_WORKERS, |
| 4139 | REGISTER_IOWQ_MAX_WORKERS, |
| 4083 | 4140 | |
| 4084 | 4141 | // register/unregister io_uring fd with the ring |
| 4085 | | IORING_REGISTER_RING_FDS, |
| 4086 | | IORING_UNREGISTER_RING_FDS, |
| 4142 | REGISTER_RING_FDS, |
| 4143 | NREGISTER_RING_FDS, |
| 4087 | 4144 | |
| 4088 | 4145 | // register ring based provide buffer group |
| 4089 | | IORING_REGISTER_PBUF_RING, |
| 4090 | | IORING_UNREGISTER_PBUF_RING, |
| 4146 | REGISTER_PBUF_RING, |
| 4147 | UNREGISTER_PBUF_RING, |
| 4091 | 4148 | |
| 4092 | 4149 | // sync cancelation API |
| 4093 | | IORING_REGISTER_SYNC_CANCEL, |
| 4150 | REGISTER_SYNC_CANCEL, |
| 4094 | 4151 | |
| 4095 | 4152 | // register a range of fixed file slots for automatic slot allocation |
| 4096 | | IORING_REGISTER_FILE_ALLOC_RANGE, |
| 4153 | REGISTER_FILE_ALLOC_RANGE, |
| 4154 | |
| 4155 | // flag added to the opcode to use a registered ring fd |
| 4156 | IORING_REGISTER_USE_REGISTERED_RING = 1 << 31, |
| 4097 | 4157 | |
| 4098 | 4158 | _, |
| 4099 | 4159 | }; |
| 4100 | 4160 | |
| 4161 | /// io_uring_restriction->opcode values |
| 4162 | pub const IOWQ_CATEGORIES = enum(u8) { |
| 4163 | BOUND, |
| 4164 | UNBOUND, |
| 4165 | }; |
| 4166 | |
| 4167 | /// deprecated, see struct io_uring_rsrc_update |
| 4101 | 4168 | pub const io_uring_files_update = extern struct { |
| 4102 | 4169 | offset: u32, |
| 4103 | 4170 | resv: u32, |
| 4104 | 4171 | fds: u64, |
| 4105 | 4172 | }; |
| 4106 | 4173 | |
| 4174 | /// Register a fully sparse file space, rather than pass in an array of all -1 file descriptors. |
| 4175 | pub const IORING_RSRC_REGISTER_SPARSE = 1 << 0; |
| 4176 | |
| 4177 | pub const io_uring_rsrc_register = extern struct { |
| 4178 | nr: u32, |
| 4179 | flags: u32, |
| 4180 | resv2: u64, |
| 4181 | data: u64, |
| 4182 | tags: u64, |
| 4183 | }; |
| 4184 | |
| 4185 | pub const io_uring_rsrc_update = extern struct { |
| 4186 | offset: u32, |
| 4187 | resv: u32, |
| 4188 | data: u64, |
| 4189 | }; |
| 4190 | |
| 4191 | pub const io_uring_rsrc_update2 = extern struct { |
| 4192 | offset: u32, |
| 4193 | resv: u32, |
| 4194 | data: u64, |
| 4195 | tags: u64, |
| 4196 | nr: u32, |
| 4197 | resv2: u32, |
| 4198 | }; |
| 4199 | |
| 4200 | pub const io_uring_notification_slot = extern struct { |
| 4201 | tag: u64, |
| 4202 | resv: [3]u64, |
| 4203 | }; |
| 4204 | |
| 4205 | pub const io_uring_notification_register = extern struct { |
| 4206 | nr_slots: u32, |
| 4207 | resv: u32, |
| 4208 | resv2: u64, |
| 4209 | data: u64, |
| 4210 | resv3: u64, |
| 4211 | }; |
| 4212 | |
| 4213 | /// Skip updating fd indexes set to this value in the fd table */ |
| 4214 | pub const IORING_REGISTER_FILES_SKIP = -2; |
| 4215 | |
| 4107 | 4216 | pub const IO_URING_OP_SUPPORTED = 1 << 0; |
| 4108 | 4217 | |
| 4109 | 4218 | pub const io_uring_probe_op = extern struct { |
| ... | ... | @@ -4131,7 +4240,7 @@ pub const io_uring_probe = extern struct { |
| 4131 | 4240 | }; |
| 4132 | 4241 | |
| 4133 | 4242 | pub const io_uring_restriction = extern struct { |
| 4134 | | opcode: u16, |
| 4243 | opcode: IORING_RESTRICTION, |
| 4135 | 4244 | arg: extern union { |
| 4136 | 4245 | /// IORING_RESTRICTION_REGISTER_OP |
| 4137 | 4246 | register_op: IORING_REGISTER, |
| ... | ... | @@ -4147,7 +4256,7 @@ pub const io_uring_restriction = extern struct { |
| 4147 | 4256 | }; |
| 4148 | 4257 | |
| 4149 | 4258 | /// io_uring_restriction->opcode values |
| 4150 | | pub const IORING_RESTRICTION = enum(u8) { |
| 4259 | pub const IORING_RESTRICTION = enum(u16) { |
| 4151 | 4260 | /// Allow an io_uring_register(2) opcode |
| 4152 | 4261 | REGISTER_OP = 0, |
| 4153 | 4262 | |
| ... | ... | @@ -4163,6 +4272,56 @@ pub const IORING_RESTRICTION = enum(u8) { |
| 4163 | 4272 | _, |
| 4164 | 4273 | }; |
| 4165 | 4274 | |
| 4275 | pub const io_uring_buf = extern struct { |
| 4276 | addr: u64, |
| 4277 | len: u32, |
| 4278 | bid: u16, |
| 4279 | resv: u16, |
| 4280 | }; |
| 4281 | |
| 4282 | // io_uring_buf_ring struct omitted |
| 4283 | // it's a io_uring_buf array with the resv of the first item used as a "tail" field. |
| 4284 | |
| 4285 | /// argument for IORING_(UN)REGISTER_PBUF_RING |
| 4286 | pub const io_uring_buf_reg = extern struct { |
| 4287 | ring_addr: u64, |
| 4288 | ring_entries: u32, |
| 4289 | bgid: u16, |
| 4290 | pad: u16, |
| 4291 | resv: [3]u64, |
| 4292 | }; |
| 4293 | |
| 4294 | pub const io_uring_getevents_arg = extern struct { |
| 4295 | sigmask: u64, |
| 4296 | sigmask_sz: u32, |
| 4297 | pad: u32, |
| 4298 | ts: u64, |
| 4299 | }; |
| 4300 | |
| 4301 | /// Argument for IORING_REGISTER_SYNC_CANCEL |
| 4302 | pub const io_uring_sync_cancel_reg = extern struct { |
| 4303 | addr: u64, |
| 4304 | fd: i32, |
| 4305 | flags: u32, |
| 4306 | timeout: kernel_timespec, |
| 4307 | pad: [4]u64, |
| 4308 | }; |
| 4309 | |
| 4310 | /// Argument for IORING_REGISTER_FILE_ALLOC_RANGE |
| 4311 | /// The range is specified as [off, off + len) |
| 4312 | pub const io_uring_file_index_range = extern struct { |
| 4313 | off: u32, |
| 4314 | len: u32, |
| 4315 | resv: u64, |
| 4316 | }; |
| 4317 | |
| 4318 | pub const io_uring_recvmsg_out = extern struct { |
| 4319 | namelen: u32, |
| 4320 | controllen: u32, |
| 4321 | payloadlen: u32, |
| 4322 | flags: u32, |
| 4323 | }; |
| 4324 | |
| 4166 | 4325 | pub const utsname = extern struct { |
| 4167 | 4326 | sysname: [64:0]u8, |
| 4168 | 4327 | nodename: [64:0]u8, |