diff options
Diffstat (limited to 'vendor/rustix/src/backend/linux_raw/io_uring')
| -rw-r--r-- | vendor/rustix/src/backend/linux_raw/io_uring/mod.rs | 1 | ||||
| -rw-r--r-- | vendor/rustix/src/backend/linux_raw/io_uring/syscalls.rs | 62 | 
2 files changed, 63 insertions, 0 deletions
diff --git a/vendor/rustix/src/backend/linux_raw/io_uring/mod.rs b/vendor/rustix/src/backend/linux_raw/io_uring/mod.rs new file mode 100644 index 0000000..ef944f0 --- /dev/null +++ b/vendor/rustix/src/backend/linux_raw/io_uring/mod.rs @@ -0,0 +1 @@ +pub(crate) mod syscalls; diff --git a/vendor/rustix/src/backend/linux_raw/io_uring/syscalls.rs b/vendor/rustix/src/backend/linux_raw/io_uring/syscalls.rs new file mode 100644 index 0000000..d10cd13 --- /dev/null +++ b/vendor/rustix/src/backend/linux_raw/io_uring/syscalls.rs @@ -0,0 +1,62 @@ +//! linux_raw syscalls supporting `rustix::io_uring`. +//! +//! # Safety +//! +//! See the `rustix::backend::syscalls` module documentation for details. +#![allow(unsafe_code, clippy::undocumented_unsafe_blocks)] + +use crate::backend::conv::{by_mut, c_uint, pass_usize, ret_c_uint, ret_owned_fd}; +use crate::fd::{BorrowedFd, OwnedFd}; +use crate::io; +use crate::io_uring::{io_uring_params, IoringEnterFlags, IoringRegisterOp}; +use core::ffi::c_void; + +#[inline] +pub(crate) fn io_uring_setup(entries: u32, params: &mut io_uring_params) -> io::Result<OwnedFd> { +    unsafe { +        ret_owned_fd(syscall!( +            __NR_io_uring_setup, +            c_uint(entries), +            by_mut(params) +        )) +    } +} + +#[inline] +pub(crate) unsafe fn io_uring_register( +    fd: BorrowedFd<'_>, +    opcode: IoringRegisterOp, +    arg: *const c_void, +    nr_args: u32, +) -> io::Result<u32> { +    ret_c_uint(syscall_readonly!( +        __NR_io_uring_register, +        fd, +        c_uint(opcode as u32), +        arg, +        c_uint(nr_args) +    )) +} + +#[inline] +pub(crate) unsafe fn io_uring_enter( +    fd: BorrowedFd<'_>, +    to_submit: u32, +    min_complete: u32, +    flags: IoringEnterFlags, +    arg: *const c_void, +    size: usize, +) -> io::Result<u32> { +    // This is not `_readonly` because `io_uring_enter` waits for I/O to +    // complete, and I/O could involve writing to memory buffers, which +    // could be a side effect depended on by the caller. +    ret_c_uint(syscall!( +        __NR_io_uring_enter, +        fd, +        c_uint(to_submit), +        c_uint(min_complete), +        flags, +        arg, +        pass_usize(size) +    )) +}  | 
