From f3bfe77712e4e5d6fd4dd7ae0a1bb0b263fbf238 Mon Sep 17 00:00:00 2001 From: Samuel Dai Date: Wed, 7 May 2025 23:23:10 +0800 Subject: [PATCH] fix(boot): won't fail to boot when kvm not available (#1152) * fix(boot): won't fail to boot when kvm not available * feat(kvm): add additional debug message on kvm init fail --- kernel/src/arch/x86_64/vm/vmx/mod.rs | 6 +++++- kernel/src/init/init.rs | 6 +++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/kernel/src/arch/x86_64/vm/vmx/mod.rs b/kernel/src/arch/x86_64/vm/vmx/mod.rs index e6e361c7..90360950 100644 --- a/kernel/src/arch/x86_64/vm/vmx/mod.rs +++ b/kernel/src/arch/x86_64/vm/vmx/mod.rs @@ -3743,8 +3743,12 @@ pub static L1TF_VMX_MITIGATION: RwLock = RwLock::new(VmxL1dFlu pub fn vmx_init() -> Result<(), SystemError> { let cpuid = CpuId::new(); - let cpu_feat = cpuid.get_feature_info().ok_or(SystemError::ENOSYS)?; + let cpu_feat = cpuid.get_feature_info().ok_or_else(|| { + log::warn!("Failed to get CPU feature info, perhaps not AMD or Intel CPU"); + SystemError::ENOSYS + })?; if !cpu_feat.has_vmx() { + log::warn!("VMX not supported or enabled"); return Err(SystemError::ENOSYS); } diff --git a/kernel/src/init/init.rs b/kernel/src/init/init.rs index bdb81276..ec826be6 100644 --- a/kernel/src/init/init.rs +++ b/kernel/src/init/init.rs @@ -93,10 +93,10 @@ fn do_start_kernel() { 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(); #[cfg(all(target_arch = "x86_64", feature = "kvm"))] - crate::arch::vm::vmx::vmx_init().unwrap(); + if crate::arch::vm::vmx::vmx_init().is_err() { + log::warn!("vmx init failed, will not be enabled"); + } } /// 在内存管理初始化之前,执行的初始化