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]
io_uring_setup(entries: u32, params: &mut io_uring_params) -> io::Result<OwnedFd>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]
io_uring_register( fd: BorrowedFd<'_>, opcode: IoringRegisterOp, arg: *const c::c_void, nr_args: u32, ) -> io::Result<()>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]
io_uring_enter( fd: BorrowedFd<'_>, to_submit: u32, min_complete: u32, flags: IoringEnterFlags, arg: *const c::c_void, size: usize, ) -> io::Result<u32>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