• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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