1 //! libc syscalls supporting `rustix::io_uring`. 2 3 use super::super::c; 4 use super::super::conv::{borrowed_fd, syscall_ret, syscall_ret_owned_fd, syscall_ret_u32}; 5 use crate::fd::{BorrowedFd, OwnedFd}; 6 use crate::io; 7 use crate::io_uring::{io_uring_params, IoringEnterFlags, IoringRegisterOp}; 8 use linux_raw_sys::general::{__NR_io_uring_enter, __NR_io_uring_register, __NR_io_uring_setup}; 9 10 #[inline] 11 pub(crate) fn io_uring_setup(entries: u32, params: &mut io_uring_params) -> io::Result<OwnedFd> { 12 unsafe { 13 syscall_ret_owned_fd(c::syscall( 14 __NR_io_uring_setup as _, 15 entries as usize, 16 params, 17 )) 18 } 19 } 20 21 #[inline] 22 pub(crate) unsafe fn io_uring_register( 23 fd: BorrowedFd<'_>, 24 opcode: IoringRegisterOp, 25 arg: *const c::c_void, 26 nr_args: u32, 27 ) -> io::Result<()> { 28 syscall_ret(c::syscall( 29 __NR_io_uring_register as _, 30 borrowed_fd(fd), 31 opcode as u32 as usize, 32 arg, 33 nr_args as usize, 34 )) 35 } 36 37 #[inline] 38 pub(crate) unsafe fn io_uring_enter( 39 fd: BorrowedFd<'_>, 40 to_submit: u32, 41 min_complete: u32, 42 flags: IoringEnterFlags, 43 arg: *const c::c_void, 44 size: usize, 45 ) -> io::Result<u32> { 46 syscall_ret_u32(c::syscall( 47 __NR_io_uring_enter as _, 48 borrowed_fd(fd), 49 to_submit as usize, 50 min_complete as usize, 51 flags.bits() as usize, 52 arg, 53 size, 54 )) 55 } 56