Skip to content

Commit bd6e460

Browse files
committed
scx_arena: use libbpf-rs BPF streams instead of using libbpf_sys directly
Signed-off-by: Emil Tsalapatis <[email protected]>
1 parent 6e9093a commit bd6e460

File tree

1 file changed

+13
-26
lines changed
  • rust/scx_arena/selftests/src

1 file changed

+13
-26
lines changed

rust/scx_arena/selftests/src/main.rs

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ use anyhow::Context;
1212
use anyhow::Result;
1313

1414
use std::ffi::c_ulong;
15-
use std::ffi::c_void;
1615

1716
use std::os::fd::AsFd;
1817
use std::os::fd::AsRawFd;
@@ -26,15 +25,11 @@ use scx_utils::NR_CPU_IDS;
2625

2726
use simplelog::{ColorChoice, Config as SimplelogConfig, TermLogger, TerminalMode};
2827

29-
use libbpf_rs::libbpf_sys;
30-
3128
use libbpf_rs::skel::OpenSkel;
3229
use libbpf_rs::skel::SkelBuilder;
3330
use libbpf_rs::PrintLevel;
3431
use libbpf_rs::ProgramInput;
35-
36-
const BPF_STDOUT: u32 = 1;
37-
const BPF_STDERR: u32 = 2;
32+
use libbpf_rs::Stream;
3833

3934
fn setup_arenas(skel: &mut BpfSkel<'_>) -> Result<()> {
4035
const STATIC_ALLOC_PAGES_GRANULARITY: c_ulong = 512;
@@ -164,35 +159,27 @@ fn setup_topology(skel: &mut BpfSkel<'_>) -> Result<()> {
164159
}
165160

166161
fn print_stream(skel: &mut BpfSkel<'_>, stream_id: u32) -> () {
167-
let mut buf = vec![0u8; 4096];
168-
let name = if stream_id == 1 { "OUTPUT" } else { "ERROR" };
162+
let name = if stream_id == libbpf_rs::BPF_STDOUT { "OUTPUT" } else { "ERROR" };
169163
let mut started = false;
170164

165+
let fd = skel.progs.arena_selftest.as_fd().as_raw_fd();
166+
let stream = Stream::new(fd, stream_id);
171167
loop {
172-
let ret = unsafe {
173-
libbpf_sys::bpf_prog_stream_read(
174-
skel.progs.arena_selftest.as_fd().as_raw_fd(),
175-
stream_id,
176-
buf.as_mut_ptr() as *mut c_void,
177-
buf.len() as u32,
178-
std::ptr::null_mut(),
179-
)
168+
let output = match stream.read() {
169+
Ok(out) => out,
170+
Err(_) => { eprintln!("STREAM {} UNAVAILABLE (REQUIRES >= v6.17)", name); return; }
180171
};
181-
if ret < 0 {
182-
eprintln!("STREAM {} UNAVAILABLE (REQUIRES >= v6.17)", name);
183-
return;
184-
}
185172

186173
if !started {
187174
println!("===BEGIN STREAM {}===", name);
188175
started = true;
189176
}
190177

191-
if ret == 0 {
192-
break;
193-
}
178+
match output {
179+
Some(string) => print!("{}", string),
180+
None => break,
181+
};
194182

195-
print!("{}", String::from_utf8_lossy(&buf[..ret as usize]));
196183
}
197184

198185
println!("\n====END STREAM {}====", name);
@@ -239,6 +226,6 @@ fn main() {
239226
println!("Selftest successful.");
240227
}
241228

242-
print_stream(&mut skel, BPF_STDOUT);
243-
print_stream(&mut skel, BPF_STDERR);
229+
print_stream(&mut skel, libbpf_rs::BPF_STDOUT);
230+
print_stream(&mut skel, libbpf_rs::BPF_STDERR);
244231
}

0 commit comments

Comments
 (0)