From d57c9964851020dc431761d88bc955ac96ff7de1 Mon Sep 17 00:00:00 2001 From: Oliver Anderson Date: Wed, 17 Jun 2026 13:52:12 +0200 Subject: [PATCH] vmm: Set vCPU MSR config updates when creating vCPUs Vcpus need to be configured according to the selected CPU profile. We thus store the computed vCPU MSR config update in the CPU manager and use it whenever a vCPU is created. Signed-off-by: Oliver Anderson On-behalf-of: SAP oliver.anderson@sap.com --- vmm/src/cpu.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/vmm/src/cpu.rs b/vmm/src/cpu.rs index 21301e9fe..5d9499878 100644 --- a/vmm/src/cpu.rs +++ b/vmm/src/cpu.rs @@ -234,6 +234,9 @@ pub enum Error { #[error("Error enabling core scheduling")] CoreScheduling(#[source] io::Error), + + #[error("Error generating MSR configuration update")] + MsrConfigurationUpdate(#[source] arch::Error), } pub type Result = result::Result; @@ -709,6 +712,8 @@ pub struct CpuManager { interrupt_controller: Option>>, #[cfg(target_arch = "x86_64")] cpuid: Vec, + #[cfg(target_arch = "x86_64")] + msr_config_update: Option, #[cfg_attr(target_arch = "aarch64", allow(dead_code))] vm: Arc, vcpus_kill_signalled: Arc, @@ -932,11 +937,22 @@ impl CpuManager { .map_err(Error::CommonCpuId)? }; + #[cfg(target_arch = "x86_64")] + let msr_config_update = arch::x86_64::generate_required_msr_updates( + hypervisor.as_ref(), + config.profile, + config.kvm_hyperv, + config.nested, + ) + .map_err(Error::MsrConfigurationUpdate)?; + Ok(Arc::new(Mutex::new(CpuManager { config: config.clone(), interrupt_controller: None, #[cfg(target_arch = "x86_64")] cpuid, + #[cfg(target_arch = "x86_64")] + msr_config_update, vm, vcpus_kill_signalled: Arc::new(AtomicBool::new(false)), vcpus_pause_signalled: Arc::new(AtomicBool::new(false)), @@ -986,7 +1002,7 @@ impl CpuManager { #[cfg(target_arch = "x86_64")] self.hypervisor.get_cpu_vendor(), #[cfg(target_arch = "x86_64")] - Default::default(), + self.msr_config_update.clone(), )?; if let Some(snapshot) = snapshot {