From f05be859668878d8f5f508c5069fd876c06bb9cb Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sun, 7 Sep 2025 12:02:16 +0200 Subject: [PATCH] Use cfg!() rather than #[cfg] for controlling multi_core --- src/arch/aarch64/ipi.rs | 22 ++++++++++++---------- src/arch/riscv64/ipi.rs | 22 ++++++++++++---------- src/arch/x86_shared/ipi.rs | 18 ++++++++---------- src/percpu.rs | 8 ++++---- 4 files changed, 36 insertions(+), 34 deletions(-) diff --git a/src/arch/aarch64/ipi.rs b/src/arch/aarch64/ipi.rs index 340159f6a5..624209b175 100644 --- a/src/arch/aarch64/ipi.rs +++ b/src/arch/aarch64/ipi.rs @@ -11,18 +11,20 @@ pub enum IpiTarget { Other = 3, } -#[cfg(not(feature = "multi_core"))] #[inline(always)] -pub fn ipi(_kind: IpiKind, _target: IpiTarget) {} +pub fn ipi(_kind: IpiKind, _target: IpiTarget) { + if cfg!(not(feature = "multi_core")) { + return; + } -#[cfg(feature = "multi_core")] -#[inline(always)] -pub fn ipi(_kind: IpiKind, _target: IpiTarget) {} + // FIXME implement +} -#[cfg(not(feature = "multi_core"))] #[inline(always)] -pub fn ipi_single(_kind: IpiKind, _target: &crate::percpu::PercpuBlock) {} +pub fn ipi_single(_kind: IpiKind, _target: &crate::percpu::PercpuBlock) { + if cfg!(not(feature = "multi_core")) { + return; + } -#[cfg(feature = "multi_core")] -#[inline(always)] -pub fn ipi_single(_kind: IpiKind, _target: &crate::percpu::PercpuBlock) {} + // FIXME implement +} diff --git a/src/arch/riscv64/ipi.rs b/src/arch/riscv64/ipi.rs index 70ad6cc7c0..3917398c82 100644 --- a/src/arch/riscv64/ipi.rs +++ b/src/arch/riscv64/ipi.rs @@ -15,18 +15,20 @@ pub enum IpiTarget { Other = 3, } -#[cfg(not(feature = "multi_core"))] #[inline(always)] -pub fn ipi(_kind: IpiKind, _target: IpiTarget) {} +pub fn ipi(_kind: IpiKind, _target: IpiTarget) { + if cfg!(not(feature = "multi_core")) { + return; + } -#[cfg(feature = "multi_core")] -#[inline(always)] -pub fn ipi(_kind: IpiKind, _target: IpiTarget) {} + // FIXME implement +} -#[cfg(not(feature = "multi_core"))] #[inline(always)] -pub fn ipi_single(_kind: IpiKind, _target: &crate::percpu::PercpuBlock) {} +pub fn ipi_single(_kind: IpiKind, _target: &crate::percpu::PercpuBlock) { + if cfg!(not(feature = "multi_core")) { + return; + } -#[cfg(feature = "multi_core")] -#[inline(always)] -pub fn ipi_single(_kind: IpiKind, _target: &crate::percpu::PercpuBlock) {} + // FIXME implement +} diff --git a/src/arch/x86_shared/ipi.rs b/src/arch/x86_shared/ipi.rs index c1ef1c6c90..c482a18f9a 100644 --- a/src/arch/x86_shared/ipi.rs +++ b/src/arch/x86_shared/ipi.rs @@ -18,15 +18,14 @@ pub enum IpiTarget { Other = 3, } -#[cfg(not(feature = "multi_core"))] -#[inline(always)] -pub fn ipi(_kind: IpiKind, _target: IpiTarget) {} - -#[cfg(feature = "multi_core")] #[inline(always)] pub fn ipi(kind: IpiKind, target: IpiTarget) { use crate::device::local_apic::the_local_apic; + if cfg!(not(feature = "multi_core")) { + return; + } + #[cfg(feature = "profiling")] if matches!(kind, IpiKind::Profile) { let icr = (target as u64) << 18 | 1 << 14 | 0b100 << 8; @@ -38,18 +37,17 @@ pub fn ipi(kind: IpiKind, target: IpiTarget) { unsafe { the_local_apic().set_icr(icr) }; } -#[cfg(feature = "multi_core")] #[inline(always)] pub fn ipi_single(kind: IpiKind, target: &crate::percpu::PercpuBlock) { use crate::device::local_apic::the_local_apic; + if cfg!(not(feature = "multi_core")) { + return; + } + if let Some(apic_id) = target.misc_arch_info.apic_id_opt.get() { unsafe { the_local_apic().ipi(apic_id, kind); } } } - -#[cfg(not(feature = "multi_core"))] -#[inline(always)] -pub fn ipi_single(_kind: IpiKind, _target: &crate::percpu::PercpuBlock) {} diff --git a/src/percpu.rs b/src/percpu.rs index 474e591d18..0c13a227f5 100644 --- a/src/percpu.rs +++ b/src/percpu.rs @@ -77,11 +77,11 @@ pub fn get_all_stats() -> Vec<(LogicalCpuId, CpuStatsData)> { // PercpuBlock::current() is implemented somewhere in the arch-specific modules -#[cfg(not(feature = "multi_core"))] -pub fn shootdown_tlb_ipi(_target: Option) {} - -#[cfg(feature = "multi_core")] pub fn shootdown_tlb_ipi(target: Option) { + if cfg!(not(feature = "multi_core")) { + return; + } + if let Some(target) = target { let my_percpublock = PercpuBlock::current(); assert_ne!(target, my_percpublock.cpu_id);