Skip to content

Commit c214d42

Browse files
committed
vendor aarch64 sys.rs
1 parent 5e332f3 commit c214d42

File tree

9 files changed

+6045
-3014
lines changed

9 files changed

+6045
-3014
lines changed

.github/workflows/ci.yml

+28-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
- name: Bench
3232
run: cargo bench --package io-uring-bench
3333

34-
check-x86_64:
34+
check-vendor:
3535
runs-on: ubuntu-latest
3636

3737
strategy:
@@ -44,6 +44,7 @@ jobs:
4444
target:
4545
- x86_64-unknown-linux-gnu
4646
- x86_64-unknown-linux-musl
47+
- aarch64-unknown-linux-gnu
4748

4849
steps:
4950
- uses: actions/checkout@v4
@@ -68,7 +69,6 @@ jobs:
6869
- "1.63"
6970
target:
7071
- i686-unknown-linux-gnu
71-
- aarch64-unknown-linux-gnu
7272

7373
steps:
7474
- uses: actions/checkout@v4
@@ -83,6 +83,32 @@ jobs:
8383
RUSTFLAGS: --cfg=io_uring_skip_arch_check
8484
run: cargo clippy --target ${{ matrix.target }}
8585

86+
check-own:
87+
runs-on: ubuntu-latest
88+
89+
strategy:
90+
fail-fast: false
91+
92+
matrix:
93+
toolchain:
94+
- stable
95+
target:
96+
- x86_64-unknown-linux-gnu
97+
98+
steps:
99+
- uses: actions/checkout@v4
100+
- uses: dtolnay/rust-toolchain@stable
101+
with:
102+
toolchain: ${{ matrix.toolchain }}
103+
target: ${{ matrix.target }}
104+
components: clippy
105+
override: true
106+
- name: Lint
107+
env:
108+
RUSTFLAGS: --cfg=io_uring_use_own_sys
109+
IO_URING_OWN_SYS_BINDING: src/sys/sys_aarch64.rs
110+
run: cargo check --target ${{ matrix.target }}
111+
86112
fmt:
87113
name: fmt
88114
runs-on: ubuntu-latest

Cargo.lock

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ io_safety = []
2323

2424
[dependencies]
2525
bitflags = "2"
26+
cfg-if = "1"
2627

2728
libc = { version = "0.2.98", default-features = false }
2829
sc = { version = "0.2", optional = true }

build.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ fn main() {
33
build();
44

55
println!("cargo::rustc-check-cfg=cfg(io_uring_skip_arch_check)");
6+
println!("cargo::rustc-check-cfg=cfg(io_uring_use_own_sys)");
67
}
78

89
#[cfg(feature = "bindgen")]
@@ -26,6 +27,8 @@ fn build() {
2627
#[cfg(feature = "overwrite")]
2728
let outdir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()).join("src/sys");
2829

30+
let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap();
31+
2932
let mut builder = bindgen::Builder::default();
3033

3134
if let Some(path) = env::var("BUILD_IO_URING_INCLUDE_FILE")
@@ -37,6 +40,8 @@ fn build() {
3740
builder = builder.header_contents("include-file.h", INCLUDE);
3841
}
3942

43+
let target_file = outdir.join(format!("sys_{}.rs", target_arch));
44+
4045
builder
4146
.ctypes_prefix("libc")
4247
.prepend_enum_name(false)
@@ -47,6 +52,6 @@ fn build() {
4752
.allowlist_var("__NR_io_uring.*|IOSQE_.*|IORING_.*|IO_URING_.*|SPLICE_F_FD_IN_FIXED")
4853
.generate()
4954
.unwrap()
50-
.write_to_file(outdir.join("sys.rs"))
55+
.write_to_file(target_file)
5156
.unwrap();
5257
}

io-uring-test/src/tests/fs.rs

+2
Original file line numberDiff line numberDiff line change
@@ -744,6 +744,8 @@ pub fn test_file_direct_write_read<S: squeue::EntryMarker, C: cqueue::EntryMarke
744744

745745
assert_eq!(cqes.len(), 1);
746746
assert_eq!(cqes[0].user_data(), 0x03);
747+
748+
// when fs does not support Direct IO, it may fallback to buffered IO.
747749
assert_eq_warn!(cqes[0].result(), -libc::EINVAL);
748750

749751
Ok(())

src/sys/mod.rs

+28-27
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,9 @@ use std::io;
1515

1616
use libc::*;
1717

18-
#[cfg(feature = "direct-syscall")]
19-
fn to_result(ret: c_int) -> io::Result<c_int> {
20-
if ret >= 0 {
21-
Ok(ret)
22-
} else {
23-
Err(io::Error::from_raw_os_error(-ret))
24-
}
25-
}
26-
27-
#[cfg(not(feature = "direct-syscall"))]
28-
fn to_result(ret: c_int) -> io::Result<c_int> {
29-
if ret >= 0 {
30-
Ok(ret)
31-
} else {
32-
Err(io::Error::last_os_error())
33-
}
34-
}
35-
3618
#[cfg(all(
3719
not(feature = "bindgen"),
38-
not(target_arch = "x86_64"),
20+
not(any(target_arch = "x86_64", target_arch = "aarch64")),
3921
not(io_uring_skip_arch_check)
4022
))]
4123
compile_error!(
@@ -44,14 +26,15 @@ please use bindgen feature to generate new `sys.rs` of your arch
4426
or use `--cfg=io_uring_skip_arch_check` to skip the check."
4527
);
4628

47-
#[cfg(all(feature = "bindgen", not(feature = "overwrite")))]
48-
include!(concat!(env!("OUT_DIR"), "/sys.rs"));
49-
50-
#[cfg(any(
51-
not(feature = "bindgen"),
52-
all(feature = "bindgen", feature = "overwrite")
53-
))]
54-
include!("sys.rs");
29+
cfg_if::cfg_if!{
30+
if #[cfg(io_uring_use_own_sys)] {
31+
include!(env!("IO_URING_OWN_SYS_BINDING"));
32+
} else if #[cfg(all(feature = "bindgen", not(feature = "overwrite")))] {
33+
include!(concat!(env!("OUT_DIR"), "/sys.rs"));
34+
} else {
35+
include!("sys.rs");
36+
}
37+
}
5538

5639
#[cfg(feature = "bindgen")]
5740
const SYSCALL_REGISTER: c_long = __NR_io_uring_register as _;
@@ -71,6 +54,24 @@ const SYSCALL_ENTER: c_long = __NR_io_uring_enter as _;
7154
#[cfg(not(feature = "bindgen"))]
7255
const SYSCALL_ENTER: c_long = libc::SYS_io_uring_enter;
7356

57+
#[cfg(feature = "direct-syscall")]
58+
fn to_result(ret: c_int) -> io::Result<c_int> {
59+
if ret >= 0 {
60+
Ok(ret)
61+
} else {
62+
Err(io::Error::from_raw_os_error(-ret))
63+
}
64+
}
65+
66+
#[cfg(not(feature = "direct-syscall"))]
67+
fn to_result(ret: c_int) -> io::Result<c_int> {
68+
if ret >= 0 {
69+
Ok(ret)
70+
} else {
71+
Err(io::Error::last_os_error())
72+
}
73+
}
74+
7475
#[cfg(not(feature = "direct-syscall"))]
7576
pub unsafe fn io_uring_register(
7677
fd: c_int,

0 commit comments

Comments
 (0)