Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
google
GitHub Repository: google/crosvm
Path: blob/main/io_uring/src/syscalls.rs
5394 views
1
// Copyright 2020 The ChromiumOS Authors
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
use std::io::Error;
6
use std::os::unix::io::RawFd;
7
use std::ptr::null_mut;
8
9
use libc::c_int;
10
use libc::c_long;
11
use libc::c_uint;
12
use libc::c_void;
13
use libc::syscall;
14
use libc::SYS_io_uring_enter;
15
use libc::SYS_io_uring_register;
16
use libc::SYS_io_uring_setup;
17
18
use crate::bindings::*;
19
20
/// Returns the system error as the result;
21
pub type Result<T> = std::result::Result<T, c_int>;
22
23
pub unsafe fn io_uring_setup(num_entries: usize, params: &io_uring_params) -> Result<RawFd> {
24
let ret = syscall(
25
SYS_io_uring_setup as c_long,
26
num_entries as c_int,
27
params as *const _,
28
);
29
if ret < 0 {
30
return Err(Error::last_os_error().raw_os_error().unwrap());
31
}
32
Ok(ret as RawFd)
33
}
34
35
pub unsafe fn io_uring_enter(fd: RawFd, to_submit: u64, to_wait: u64, flags: u32) -> Result<()> {
36
let ret = syscall(
37
SYS_io_uring_enter as c_long,
38
fd,
39
to_submit as c_int,
40
to_wait as c_int,
41
flags as c_int,
42
null_mut::<*mut c_void>(),
43
);
44
if ret < 0 {
45
return Err(Error::last_os_error().raw_os_error().unwrap());
46
}
47
Ok(())
48
}
49
50
pub unsafe fn io_uring_register(
51
fd: RawFd,
52
opcode: u32,
53
args: *const c_void,
54
nr_args: u32,
55
) -> Result<()> {
56
let ret = syscall(
57
SYS_io_uring_register as c_long,
58
fd,
59
opcode as c_uint,
60
args,
61
nr_args as c_uint,
62
);
63
if ret < 0 {
64
return Err(Error::last_os_error().raw_os_error().unwrap());
65
}
66
Ok(())
67
}
68
69