mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-12-22 13:45:20 +00:00
vmm: config: Extend 'VmConfig' with 'preserved_fds'
Preserved FDs are the ones that share the same life-time as its holding VmConfig instance, such as FDs for creating TAP devices. Preserved FDs will stay open as long as the holding VmConfig instance is valid, and will be closed when the holding VmConfig instance is destroyed. Signed-off-by: Bo Chen <chen.bo@intel.com>
This commit is contained in:
parent
ca6fe2a98e
commit
015941e294
@ -722,6 +722,7 @@ mod unit_tests {
|
|||||||
gdb: false,
|
gdb: false,
|
||||||
platform: None,
|
platform: None,
|
||||||
tpm: None,
|
tpm: None,
|
||||||
|
preserved_fds: None,
|
||||||
};
|
};
|
||||||
|
|
||||||
assert_eq!(expected_vm_config, result_vm_config);
|
assert_eq!(expected_vm_config, result_vm_config);
|
||||||
|
@ -2093,11 +2093,27 @@ impl VmConfig {
|
|||||||
gdb,
|
gdb,
|
||||||
platform,
|
platform,
|
||||||
tpm,
|
tpm,
|
||||||
|
preserved_fds: None,
|
||||||
};
|
};
|
||||||
config.validate().map_err(Error::Validation)?;
|
config.validate().map_err(Error::Validation)?;
|
||||||
Ok(config)
|
Ok(config)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// # Safety
|
||||||
|
/// To use this safely, the caller must guarantee that the input
|
||||||
|
/// fds are all valid.
|
||||||
|
pub unsafe fn add_preserved_fds(&mut self, mut fds: Vec<i32>) {
|
||||||
|
if fds.is_empty() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(preserved_fds) = &self.preserved_fds {
|
||||||
|
fds.append(&mut preserved_fds.clone());
|
||||||
|
}
|
||||||
|
|
||||||
|
self.preserved_fds = Some(fds);
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "tdx")]
|
#[cfg(feature = "tdx")]
|
||||||
pub fn is_tdx_enabled(&self) -> bool {
|
pub fn is_tdx_enabled(&self) -> bool {
|
||||||
self.platform.as_ref().map(|p| p.tdx).unwrap_or(false)
|
self.platform.as_ref().map(|p| p.tdx).unwrap_or(false)
|
||||||
@ -2714,6 +2730,7 @@ mod tests {
|
|||||||
gdb: false,
|
gdb: false,
|
||||||
platform: None,
|
platform: None,
|
||||||
tpm: None,
|
tpm: None,
|
||||||
|
preserved_fds: None,
|
||||||
};
|
};
|
||||||
|
|
||||||
assert!(valid_config.validate().is_ok());
|
assert!(valid_config.validate().is_ok());
|
||||||
|
@ -2136,6 +2136,7 @@ mod unit_tests {
|
|||||||
gdb: false,
|
gdb: false,
|
||||||
platform: None,
|
platform: None,
|
||||||
tpm: None,
|
tpm: None,
|
||||||
|
preserved_fds: None,
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -596,4 +596,10 @@ pub struct VmConfig {
|
|||||||
pub gdb: bool,
|
pub gdb: bool,
|
||||||
pub platform: Option<PlatformConfig>,
|
pub platform: Option<PlatformConfig>,
|
||||||
pub tpm: Option<TpmConfig>,
|
pub tpm: Option<TpmConfig>,
|
||||||
|
// Preseved FDs are the ones that share the same life-time as its holding
|
||||||
|
// VmConfig instance, such as FDs for creating TAP devices.
|
||||||
|
// Perserved FDs will stay open as long as the holding VmConfig instance is
|
||||||
|
// valid, and will be closed when the holding VmConfig instance is destroyed.
|
||||||
|
#[serde(skip)]
|
||||||
|
pub preserved_fds: Option<Vec<i32>>,
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user