blob: e3c9f8630bae5e9e8af9dfccc30930540d9f86e8 [file] [log] [blame]
// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use std::io::Error;
use std::os::unix::io::RawFd;
use std::ptr::null_mut;
use libc::{c_int, c_long, c_void};
use syscall_defines::linux::LinuxSyscall::*;
use crate::bindings::*;
/// Returns the system error as the result;
pub type Result<T> = std::result::Result<T, c_int>;
pub unsafe fn io_uring_setup(num_entries: usize, params: &io_uring_params) -> Result<RawFd> {
let ret = libc::syscall(
SYS_io_uring_setup as c_long,
num_entries as c_int,
params as *const _,
);
if ret < 0 {
return Err(Error::last_os_error().raw_os_error().unwrap());
}
Ok(ret as RawFd)
}
pub unsafe fn io_uring_enter(fd: RawFd, to_submit: u64, to_wait: u64, flags: u32) -> Result<()> {
let ret = libc::syscall(
SYS_io_uring_enter as c_long,
fd,
to_submit as c_int,
to_wait as c_int,
flags as c_int,
null_mut::<*mut c_void>(),
);
if ret < 0 {
return Err(Error::last_os_error().raw_os_error().unwrap());
}
Ok(())
}