mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2025-01-09 06:15:19 +00:00
vmm: config: Move max vCPUs > boot vCPUs check to validate()
This allows the validation of this requirement for both command line booted VMs and those booted via the API. Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
parent
12edb24678
commit
eeb7e2529d
@ -26,8 +26,6 @@ pub const DEFAULT_QUEUE_SIZE_VUBLK: u16 = 128;
|
|||||||
/// Errors associated with VM configuration parameters.
|
/// Errors associated with VM configuration parameters.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
/// Max is less than boot
|
|
||||||
ParseCpusMaxLowerThanBoot,
|
|
||||||
/// Both socket and path specified
|
/// Both socket and path specified
|
||||||
ParseDiskSocketAndPath,
|
ParseDiskSocketAndPath,
|
||||||
/// Filesystem tag is missing
|
/// Filesystem tag is missing
|
||||||
@ -84,6 +82,8 @@ pub enum ValidationError {
|
|||||||
KernelMissing,
|
KernelMissing,
|
||||||
/// Missing file value for console
|
/// Missing file value for console
|
||||||
ConsoleFileMissing,
|
ConsoleFileMissing,
|
||||||
|
/// Max is less than boot
|
||||||
|
CpusMaxLowerThanBoot,
|
||||||
}
|
}
|
||||||
|
|
||||||
type ValidationResult<T> = std::result::Result<T, ValidationError>;
|
type ValidationResult<T> = std::result::Result<T, ValidationError>;
|
||||||
@ -95,6 +95,7 @@ impl fmt::Display for ValidationError {
|
|||||||
DoubleTtyMode => write!(f, "Console mode tty specified for both serial and console"),
|
DoubleTtyMode => write!(f, "Console mode tty specified for both serial and console"),
|
||||||
KernelMissing => write!(f, "No kernel specified"),
|
KernelMissing => write!(f, "No kernel specified"),
|
||||||
ConsoleFileMissing => write!(f, "Path missing when using file console mode"),
|
ConsoleFileMissing => write!(f, "Path missing when using file console mode"),
|
||||||
|
CpusMaxLowerThanBoot => write!(f, "Max CPUs greater than boot CPUs"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -108,9 +109,7 @@ impl fmt::Display for Error {
|
|||||||
write!(f, "Error parsing --console: invalid console mode given")
|
write!(f, "Error parsing --console: invalid console mode given")
|
||||||
}
|
}
|
||||||
ParseCpus(o) => write!(f, "Error parsing --cpus: {}", o),
|
ParseCpus(o) => write!(f, "Error parsing --cpus: {}", o),
|
||||||
ParseCpusMaxLowerThanBoot => {
|
|
||||||
write!(f, "Error parsing --cpus: max CPUs greater than boot CPUs")
|
|
||||||
}
|
|
||||||
ParseDevice(o) => write!(f, "Error parsing --device: {}", o),
|
ParseDevice(o) => write!(f, "Error parsing --device: {}", o),
|
||||||
ParseDevicePathMissing => write!(f, "Error parsing --device: path missing"),
|
ParseDevicePathMissing => write!(f, "Error parsing --device: path missing"),
|
||||||
ParseDiskSocketAndPath => write!(
|
ParseDiskSocketAndPath => write!(
|
||||||
@ -415,10 +414,6 @@ impl CpusConfig {
|
|||||||
.map_err(Error::ParseCpus)?
|
.map_err(Error::ParseCpus)?
|
||||||
.unwrap_or(boot_vcpus);
|
.unwrap_or(boot_vcpus);
|
||||||
|
|
||||||
if max_vcpus < boot_vcpus {
|
|
||||||
return Err(Error::ParseCpusMaxLowerThanBoot);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(CpusConfig {
|
Ok(CpusConfig {
|
||||||
boot_vcpus,
|
boot_vcpus,
|
||||||
max_vcpus,
|
max_vcpus,
|
||||||
@ -1208,6 +1203,10 @@ impl VmConfig {
|
|||||||
return Err(ValidationError::ConsoleFileMissing);
|
return Err(ValidationError::ConsoleFileMissing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if self.cpus.max_vcpus < self.cpus.boot_vcpus {
|
||||||
|
return Err(ValidationError::CpusMaxLowerThanBoot);
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1382,7 +1381,6 @@ mod tests {
|
|||||||
max_vcpus: 2,
|
max_vcpus: 2,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
assert!(CpusConfig::parse("boot=2,max=1").is_err());
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1869,6 +1867,11 @@ mod tests {
|
|||||||
invalid_config.serial.file = None;
|
invalid_config.serial.file = None;
|
||||||
assert!(invalid_config.validate().is_err());
|
assert!(invalid_config.validate().is_err());
|
||||||
|
|
||||||
|
let mut invalid_config = valid_config.clone();
|
||||||
|
invalid_config.cpus.max_vcpus = 16;
|
||||||
|
invalid_config.cpus.boot_vcpus = 32;
|
||||||
|
assert!(invalid_config.validate().is_err());
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user