Skip to content

Commit 89e83be

Browse files
committed
fix: update dep
Signed-off-by: Godones <chenlinfeng25@outlook.com>
1 parent 1e34ef3 commit 89e83be

5 files changed

Lines changed: 36 additions & 27 deletions

File tree

Cargo.lock

Lines changed: 6 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ gdb-client:
250250
riscv64-unknown-elf-gdb -ex 'file kernel-qemu' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234'
251251

252252
kernel_asm:
253-
@riscv64-unknown-elf-objdump -d target/riscv64gc-unknown-none-elf/release/kernel > kernel.asm
253+
@riscv64-unknown-elf-objdump -d $(KERNEL_FILE) > kernel.asm
254254
@vim kernel.asm
255255
@rm kernel.asm
256256

kernel/Cargo.toml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,7 @@ shim = { path = "../subsystems/shim", features = ["kernel"] }
2727
kprobe = { git = "https://github.com/Godones/ext_ebpf" }
2828
bpf-basic = { git = "https://github.com/Godones/ext_ebpf" }
2929
ksym = { git = "https://github.com/Godones/ext_ebpf" }
30-
# kprobe = { path = "../../os-modules/ext_ebpf/kprobe" }
31-
# bpf-basic = { path = "../../os-modules/ext_ebpf/bpf-basic" }
32-
# ksym = { path = "../../os-modules/ext_ebpf/ksym" }
33-
rbpf = { path = "../../os-modules/ext_ebpf/rbpf", default-features = false, features = [
34-
"skip_mem_check",
35-
] }
30+
rbpf = { git = "https://github.com/qmonnet/rbpf.git", default-features = false }
3631

3732

3833
riscv = "0.10"

kernel/src/perf/ebpf.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ impl PerfEventOps for BpfPerfEvent {
3838

3939
pub fn perf_event_open_bpf(args: PerfProbeArgs) -> BpfPerfEvent {
4040
// For bpf prog output
41-
assert_eq!(args.config, perf_sw_ids::PERF_COUNT_SW_BPF_OUTPUT);
41+
// assert_eq!(
42+
// args.config,
43+
// PerfProbeConfig::PerfSwIds(perf_sw_ids::PERF_COUNT_SW_BPF_OUTPUT)
44+
// );
4245
assert_eq!(
4346
args.sample_type,
4447
Some(perf_event_sample_format::PERF_SAMPLE_RAW)

kernel/src/perf/kprobe.rs

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
use alloc::{boxed::Box, sync::Arc};
2-
use core::any::Any;
1+
use alloc::{boxed::Box, sync::Arc, vec::Vec};
2+
use core::{any::Any, sync::atomic::AtomicU32};
33

44
use bpf_basic::perf::PerfProbeArgs;
55
use kprobe::{CallBackFunc, KprobeBuilder, ProbeArgs};
@@ -17,10 +17,24 @@ use crate::{
1717
pub struct KprobePerfEvent {
1818
_args: PerfProbeArgs,
1919
kprobe: Arc<KernelKprobe>,
20+
callback_list: Vec<u32>,
21+
}
22+
23+
impl KprobePerfEvent {
24+
pub fn new(args: PerfProbeArgs, kprobe: Arc<KernelKprobe>) -> Self {
25+
KprobePerfEvent {
26+
_args: args,
27+
kprobe,
28+
callback_list: Vec::new(),
29+
}
30+
}
2031
}
2132

2233
impl Drop for KprobePerfEvent {
2334
fn drop(&mut self) {
35+
for callback_id in &self.callback_list {
36+
self.kprobe.unregister_event_callback(*callback_id);
37+
}
2438
unregister_kprobe(self.kprobe.clone());
2539
}
2640
}
@@ -92,10 +106,16 @@ impl KprobePerfEvent {
92106
for (key, value) in BPF_HELPER_FUN_SET.iter() {
93107
vm.register_helper(*key, *value).unwrap();
94108
}
109+
110+
static CALLBACK_ID: AtomicU32 = AtomicU32::new(0);
111+
112+
let id = CALLBACK_ID.fetch_add(1, core::sync::atomic::Ordering::Relaxed);
113+
95114
// create a callback to execute the ebpf prog
96115
let callback = Box::new(KprobePerfCallBack::new(bpf_prog, vm));
97116
// update callback for kprobe
98-
self.kprobe.update_event_callback(callback);
117+
self.kprobe.register_event_callback(id, callback);
118+
self.callback_list.push(id);
99119
Ok(())
100120
}
101121
}
@@ -115,8 +135,5 @@ pub fn perf_event_open_kprobe(args: PerfProbeArgs) -> KprobePerfEvent {
115135
let builder = perf_probe_arg_to_kprobe_builder(&args);
116136
let kprobe = register_kprobe(builder);
117137
println_color!(32, "create kprobe ok");
118-
KprobePerfEvent {
119-
_args: args,
120-
kprobe,
121-
}
138+
KprobePerfEvent::new(args, kprobe)
122139
}

0 commit comments

Comments
 (0)