//! linux_raw syscalls supporting `rustix::io_uring`. //! //! # Safety //! //! See the `rustix::backend::syscalls` module documentation for details. #![allow(unsafe_code, clippy::undocumented_unsafe_blocks)] use crate::backend::conv::{by_mut, c_uint, pass_usize, ret_c_uint, ret_owned_fd}; use crate::fd::{BorrowedFd, OwnedFd}; use crate::io; use crate::io_uring::{io_uring_params, IoringEnterFlags, IoringRegisterOp}; use core::ffi::c_void; #[inline] pub(crate) fn io_uring_setup(entries: u32, params: &mut io_uring_params) -> io::Result { unsafe { ret_owned_fd(syscall!( __NR_io_uring_setup, c_uint(entries), by_mut(params) )) } } #[inline] pub(crate) unsafe fn io_uring_register( fd: BorrowedFd<'_>, opcode: IoringRegisterOp, arg: *const c_void, nr_args: u32, ) -> io::Result { ret_c_uint(syscall_readonly!( __NR_io_uring_register, fd, c_uint(opcode as u32), arg, c_uint(nr_args) )) } #[inline] pub(crate) unsafe fn io_uring_enter( fd: BorrowedFd<'_>, to_submit: u32, min_complete: u32, flags: IoringEnterFlags, arg: *const c_void, size: usize, ) -> io::Result { // This is not `_readonly` because `io_uring_enter` waits for I/O to // complete, and I/O could involve writing to memory buffers, which // could be a side effect depended on by the caller. ret_c_uint(syscall!( __NR_io_uring_enter, fd, c_uint(to_submit), c_uint(min_complete), flags, arg, pass_usize(size) )) }