1 //! libc syscalls supporting `rustix::io_uring`.
2
3 use crate::backend::c;
4 use crate::backend::conv::{borrowed_fd, ret_owned_fd, ret_u32};
5 use crate::fd::{BorrowedFd, OwnedFd};
6 use crate::io;
7 use crate::io_uring::{io_uring_params, IoringEnterFlags, IoringRegisterOp};
8
9 #[inline]
io_uring_setup(entries: u32, params: &mut io_uring_params) -> io::Result<OwnedFd>10 pub(crate) fn io_uring_setup(entries: u32, params: &mut io_uring_params) -> io::Result<OwnedFd> {
11 syscall! {
12 fn io_uring_setup(
13 entries: u32,
14 params: *mut io_uring_params
15 ) via SYS_io_uring_setup -> c::c_int
16 }
17 unsafe { ret_owned_fd(io_uring_setup(entries, params)) }
18 }
19
20 #[inline]
io_uring_register( fd: BorrowedFd<'_>, opcode: IoringRegisterOp, arg: *const c::c_void, nr_args: u32, ) -> io::Result<u32>21 pub(crate) unsafe fn io_uring_register(
22 fd: BorrowedFd<'_>,
23 opcode: IoringRegisterOp,
24 arg: *const c::c_void,
25 nr_args: u32,
26 ) -> io::Result<u32> {
27 syscall! {
28 fn io_uring_register(
29 fd: c::c_uint,
30 opcode: c::c_uint,
31 arg: *const c::c_void,
32 nr_args: c::c_uint
33 ) via SYS_io_uring_register -> c::c_int
34 }
35 ret_u32(io_uring_register(
36 borrowed_fd(fd) as _,
37 opcode as u32,
38 arg,
39 nr_args,
40 ))
41 }
42
43 #[inline]
io_uring_enter( fd: BorrowedFd<'_>, to_submit: u32, min_complete: u32, flags: IoringEnterFlags, arg: *const c::c_void, size: usize, ) -> io::Result<u32>44 pub(crate) unsafe fn io_uring_enter(
45 fd: BorrowedFd<'_>,
46 to_submit: u32,
47 min_complete: u32,
48 flags: IoringEnterFlags,
49 arg: *const c::c_void,
50 size: usize,
51 ) -> io::Result<u32> {
52 syscall! {
53 fn io_uring_enter2(
54 fd: c::c_uint,
55 to_submit: c::c_uint,
56 min_complete: c::c_uint,
57 flags: c::c_uint,
58 arg: *const c::c_void,
59 size: usize
60 ) via SYS_io_uring_enter -> c::c_int
61 }
62 ret_u32(io_uring_enter2(
63 borrowed_fd(fd) as _,
64 to_submit,
65 min_complete,
66 bitflags_bits!(flags),
67 arg,
68 size,
69 ))
70 }
71