mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
vmm: simplify VM creation API
Create HypervisorVmConfig early and pass the struct to VM creation API in the vmm crate. Getting rid of multiple conditional parameter. Signed-off-by: Muminul Islam <muislam@microsoft.com>
This commit is contained in:
committed by
Rob Bradford
parent
6897c2a462
commit
deaf660a52
+15
-6
@@ -210,6 +210,20 @@ pub enum Error {
|
|||||||
#[error("Error applying landlock")]
|
#[error("Error applying landlock")]
|
||||||
ApplyLandlock(#[source] LandlockError),
|
ApplyLandlock(#[source] LandlockError),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<&VmConfig> for hypervisor::HypervisorVmConfig {
|
||||||
|
fn from(_value: &VmConfig) -> Self {
|
||||||
|
hypervisor::HypervisorVmConfig {
|
||||||
|
#[cfg(feature = "tdx")]
|
||||||
|
tdx_enabled: _value.platform.as_ref().map(|p| p.tdx).unwrap_or(false),
|
||||||
|
#[cfg(feature = "sev_snp")]
|
||||||
|
sev_snp_enabled: _value.is_sev_snp_enabled(),
|
||||||
|
#[cfg(feature = "sev_snp")]
|
||||||
|
mem_size: _value.memory.total_size(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub type Result<T> = result::Result<T, Error>;
|
pub type Result<T> = result::Result<T, Error>;
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
@@ -1006,12 +1020,7 @@ impl Vmm {
|
|||||||
|
|
||||||
let vm = Vm::create_hypervisor_vm(
|
let vm = Vm::create_hypervisor_vm(
|
||||||
self.hypervisor.as_ref(),
|
self.hypervisor.as_ref(),
|
||||||
#[cfg(feature = "tdx")]
|
(&*self.vm_config.as_ref().unwrap().lock().unwrap()).into(),
|
||||||
false,
|
|
||||||
#[cfg(feature = "sev_snp")]
|
|
||||||
false,
|
|
||||||
#[cfg(feature = "sev_snp")]
|
|
||||||
config.lock().unwrap().memory.total_size(),
|
|
||||||
)
|
)
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
MigratableError::MigrateReceive(anyhow!(
|
MigratableError::MigrateReceive(anyhow!(
|
||||||
|
|||||||
+2
-24
@@ -1009,21 +1009,9 @@ impl Vm {
|
|||||||
vm_config.lock().unwrap().is_tdx_enabled()
|
vm_config.lock().unwrap().is_tdx_enabled()
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(feature = "sev_snp")]
|
|
||||||
let sev_snp_enabled = if snapshot.is_some() {
|
|
||||||
false
|
|
||||||
} else {
|
|
||||||
vm_config.lock().unwrap().is_sev_snp_enabled()
|
|
||||||
};
|
|
||||||
|
|
||||||
let vm = Self::create_hypervisor_vm(
|
let vm = Self::create_hypervisor_vm(
|
||||||
hypervisor.as_ref(),
|
hypervisor.as_ref(),
|
||||||
#[cfg(feature = "tdx")]
|
vm_config.as_ref().lock().unwrap().deref().into(),
|
||||||
tdx_enabled,
|
|
||||||
#[cfg(feature = "sev_snp")]
|
|
||||||
sev_snp_enabled,
|
|
||||||
#[cfg(feature = "sev_snp")]
|
|
||||||
vm_config.lock().unwrap().memory.total_size(),
|
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
#[cfg(all(feature = "kvm", target_arch = "x86_64"))]
|
#[cfg(all(feature = "kvm", target_arch = "x86_64"))]
|
||||||
@@ -1083,19 +1071,9 @@ impl Vm {
|
|||||||
|
|
||||||
pub fn create_hypervisor_vm(
|
pub fn create_hypervisor_vm(
|
||||||
hypervisor: &dyn hypervisor::Hypervisor,
|
hypervisor: &dyn hypervisor::Hypervisor,
|
||||||
#[cfg(feature = "tdx")] tdx_enabled: bool,
|
config: HypervisorVmConfig,
|
||||||
#[cfg(feature = "sev_snp")] sev_snp_enabled: bool,
|
|
||||||
#[cfg(feature = "sev_snp")] mem_size: u64,
|
|
||||||
) -> Result<Arc<dyn hypervisor::Vm>> {
|
) -> Result<Arc<dyn hypervisor::Vm>> {
|
||||||
hypervisor.check_required_extensions().unwrap();
|
hypervisor.check_required_extensions().unwrap();
|
||||||
let config = HypervisorVmConfig {
|
|
||||||
#[cfg(feature = "tdx")]
|
|
||||||
tdx_enabled,
|
|
||||||
#[cfg(feature = "sev_snp")]
|
|
||||||
sev_snp_enabled,
|
|
||||||
#[cfg(feature = "sev_snp")]
|
|
||||||
mem_size,
|
|
||||||
};
|
|
||||||
|
|
||||||
let vm = hypervisor.create_vm(config).unwrap();
|
let vm = hypervisor.create_vm(config).unwrap();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user