Skip to content

Commit

Permalink
feat(debug)[WIP]: add static-keys support (#1025)
Browse files Browse the repository at this point in the history
* feat: add static-keys support
  • Loading branch information
Godones authored Nov 16, 2024
1 parent e232830 commit 750b3b5
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 1 deletion.
5 changes: 4 additions & 1 deletion kernel/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ members = [
]

[features]
default = ["backtrace", "kvm", "fatfs", "fatfs-secure"]
default = ["backtrace", "kvm", "fatfs", "fatfs-secure", "static_keys_test"]
# 内核栈回溯
backtrace = []
# kvm
Expand All @@ -27,6 +27,7 @@ driver_ps2_mouse = []

# kprobe
kprobe_test = []
static_keys_test = []

# 运行时依赖项
[dependencies]
Expand Down Expand Up @@ -67,6 +68,8 @@ lru = "0.12.3"

rbpf = { path = "crates/rbpf" }
printf-compat = { version = "0.1.1", default-features = false }
static-keys = "=0.6.1"

# target为x86_64时,使用下面的依赖
[target.'cfg(target_arch = "x86_64")'.dependencies]
mini-backtrace = { git = "https://git.mirrors.dragonos.org.cn/DragonOS-Community/mini-backtrace.git", rev = "e0b1d90940" }
Expand Down
28 changes: 28 additions & 0 deletions kernel/src/debug/jump_label.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#[cfg(feature = "static_keys_test")]
mod tests {
use static_keys::{define_static_key_false, static_branch_unlikely};
define_static_key_false!(MY_STATIC_KEY);
#[inline(always)]
fn foo() {
println!("Entering foo function");
if static_branch_unlikely!(MY_STATIC_KEY) {
println!("A branch");
} else {
println!("B branch");
}
}

pub(super) fn static_keys_test() {
foo();
unsafe {
MY_STATIC_KEY.enable();
}
foo();
}
}

pub fn static_keys_init() {
static_keys::global_init();
#[cfg(feature = "static_keys_test")]
tests::static_keys_test();
}
1 change: 1 addition & 0 deletions kernel/src/debug/mod.rs
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
pub mod jump_label;
pub mod klog;
pub mod kprobe;
2 changes: 2 additions & 0 deletions kernel/src/init/init.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ fn do_start_kernel() {

unsafe { mm_init() };

// crate::debug::jump_label::static_keys_init();
if scm_reinit().is_ok() {
if let Err(e) = textui_init() {
warn!("Failed to init textui: {:?}", e);
Expand Down Expand Up @@ -90,6 +91,7 @@ fn do_start_kernel() {
clocksource_boot_finish();
Futex::init();
crate::bpf::init_bpf_system();
crate::debug::jump_label::static_keys_init();
#[cfg(all(target_arch = "x86_64", feature = "kvm"))]
crate::virt::kvm::kvm_init();
}
Expand Down
1 change: 1 addition & 0 deletions kernel/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#![feature(sync_unsafe_cell)]
#![feature(vec_into_raw_parts)]
#![feature(c_variadic)]
#![feature(asm_goto)]
#![cfg_attr(target_os = "none", no_std)]
#![allow(static_mut_refs, non_local_definitions, internal_features)]
// clippy的配置
Expand Down

0 comments on commit 750b3b5

Please sign in to comment.