• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //! linux_raw syscalls supporting `rustix::io_uring`.
2 //!
3 //! # Safety
4 //!
5 //! See the `rustix::backend::syscalls` module documentation for details.
6 #![allow(unsafe_code)]
7 #![allow(clippy::undocumented_unsafe_blocks)]
8 
9 use super::super::conv::{by_mut, c_uint, pass_usize, ret, ret_c_uint, ret_owned_fd};
10 use crate::fd::{BorrowedFd, OwnedFd};
11 use crate::io;
12 use crate::io_uring::{io_uring_params, IoringEnterFlags, IoringRegisterOp};
13 use core::ffi::c_void;
14 
15 #[inline]
io_uring_setup(entries: u32, params: &mut io_uring_params) -> io::Result<OwnedFd>16 pub(crate) fn io_uring_setup(entries: u32, params: &mut io_uring_params) -> io::Result<OwnedFd> {
17     unsafe {
18         ret_owned_fd(syscall!(
19             __NR_io_uring_setup,
20             c_uint(entries),
21             by_mut(params)
22         ))
23     }
24 }
25 
26 #[inline]
io_uring_register( fd: BorrowedFd<'_>, opcode: IoringRegisterOp, arg: *const c_void, nr_args: u32, ) -> io::Result<()>27 pub(crate) unsafe fn io_uring_register(
28     fd: BorrowedFd<'_>,
29     opcode: IoringRegisterOp,
30     arg: *const c_void,
31     nr_args: u32,
32 ) -> io::Result<()> {
33     ret(syscall_readonly!(
34         __NR_io_uring_register,
35         fd,
36         c_uint(opcode as u32),
37         arg,
38         c_uint(nr_args)
39     ))
40 }
41 
42 #[inline]
io_uring_enter( fd: BorrowedFd<'_>, to_submit: u32, min_complete: u32, flags: IoringEnterFlags, arg: *const c_void, size: usize, ) -> io::Result<u32>43 pub(crate) unsafe fn io_uring_enter(
44     fd: BorrowedFd<'_>,
45     to_submit: u32,
46     min_complete: u32,
47     flags: IoringEnterFlags,
48     arg: *const c_void,
49     size: usize,
50 ) -> io::Result<u32> {
51     // This is not `_readonly` because `io_uring_enter` waits for I/O to
52     // complete, and I/O could involve writing to memory buffers, which
53     // could be a side effect depended on by the caller.
54     ret_c_uint(syscall!(
55         __NR_io_uring_enter,
56         fd,
57         c_uint(to_submit),
58         c_uint(min_complete),
59         flags,
60         arg,
61         pass_usize(size)
62     ))
63 }
64