diff --git a/vmm/src/cpu.rs b/vmm/src/cpu.rs index 4e693f98d..cd0489f5f 100644 --- a/vmm/src/cpu.rs +++ b/vmm/src/cpu.rs @@ -2082,10 +2082,9 @@ impl Snapshottable for CpuManager { fn restore(&mut self, snapshot: Snapshot) -> std::result::Result<(), MigratableError> { for (cpu_id, snapshot) in snapshot.snapshots.iter() { + let cpu_id = cpu_id.parse::().unwrap(); info!("Restoring VCPU {}", cpu_id); - let vcpu = self - .create_vcpu(cpu_id.parse::().unwrap()) - .map_err(|e| MigratableError::Restore(anyhow!("Could not create vCPU {:?}", e)))?; + let vcpu = self.vcpus[cpu_id].clone(); self.configure_vcpu(vcpu, None, Some(*snapshot.clone())) .map_err(|e| { MigratableError::Restore(anyhow!("Could not configure vCPU {:?}", e)) diff --git a/vmm/src/vm.rs b/vmm/src/vm.rs index 7d7273c51..4e2455a15 100644 --- a/vmm/src/vm.rs +++ b/vmm/src/vm.rs @@ -538,6 +538,12 @@ impl Vm { ) .map_err(Error::CpuManager)?; + cpu_manager + .lock() + .unwrap() + .create_boot_vcpus() + .map_err(Error::CpuManager)?; + #[cfg(feature = "tdx")] let dynamic = !tdx_enabled; #[cfg(not(feature = "tdx"))]