mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
cli: Accept K,M,G suffixes for size parameters
For every parameter dealing with a size as option, such as memory or virtio-pmem, the CLI can now parse sizes with the suffixes K, M or G. Fixes #70 Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
committed by
Rob Bradford
parent
2bb0b22cc1
commit
a2947f9a9f
+22
-8
@@ -22,8 +22,6 @@ const CMDLINE_OFFSET: GuestAddress = GuestAddress(0x20000);
|
||||
pub enum Error<'a> {
|
||||
/// Failed parsing cpus parameters.
|
||||
ParseCpusParams(std::num::ParseIntError),
|
||||
/// Failed parsing memory size parameter.
|
||||
ParseMemorySizeParam(std::num::ParseIntError),
|
||||
/// Failed parsing memory file parameter.
|
||||
ParseMemoryFileParam,
|
||||
/// Failed parsing kernel parameters.
|
||||
@@ -50,8 +48,8 @@ pub enum Error<'a> {
|
||||
ParseFsQueueSizeParam(std::num::ParseIntError),
|
||||
/// Failed parsing persitent memory file parameter.
|
||||
ParsePmemFileParam,
|
||||
/// Failed parsing persitent memory size parameter.
|
||||
ParsePmemSizeParam(std::num::ParseIntError),
|
||||
/// Failed parsing size parameter.
|
||||
ParseSizeParam(std::num::ParseIntError),
|
||||
}
|
||||
pub type Result<'a, T> = result::Result<T, Error<'a>>;
|
||||
|
||||
@@ -67,6 +65,24 @@ pub struct VmParams<'a> {
|
||||
pub pmem: Option<Vec<&'a str>>,
|
||||
}
|
||||
|
||||
fn parse_size(size: &str) -> Result<u64> {
|
||||
let s = size.trim();
|
||||
|
||||
let shift = if s.ends_with('K') {
|
||||
10
|
||||
} else if s.ends_with('M') {
|
||||
20
|
||||
} else if s.ends_with('G') {
|
||||
30
|
||||
} else {
|
||||
0
|
||||
};
|
||||
|
||||
let s = s.trim_end_matches(|c| c == 'K' || c == 'M' || c == 'G');
|
||||
let res = s.parse::<u64>().map_err(Error::ParseSizeParam)?;
|
||||
Ok(res << shift)
|
||||
}
|
||||
|
||||
pub struct CpusConfig(pub u8);
|
||||
|
||||
impl CpusConfig {
|
||||
@@ -117,9 +133,7 @@ impl<'a> MemoryConfig<'a> {
|
||||
};
|
||||
|
||||
Ok(MemoryConfig {
|
||||
size: size_str
|
||||
.parse::<u64>()
|
||||
.map_err(Error::ParseMemorySizeParam)?,
|
||||
size: parse_size(size_str)?,
|
||||
file,
|
||||
})
|
||||
}
|
||||
@@ -323,7 +337,7 @@ impl<'a> PmemConfig<'a> {
|
||||
|
||||
Ok(PmemConfig {
|
||||
file: Path::new(file_str),
|
||||
size: size_str.parse::<u64>().map_err(Error::ParsePmemSizeParam)?,
|
||||
size: parse_size(size_str)?,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -924,7 +924,7 @@ impl<'a> Vm<'a> {
|
||||
let fd = Arc::new(fd);
|
||||
|
||||
// Init guest memory
|
||||
let arch_mem_regions = arch::arch_memory_regions(config.memory.size << 20);
|
||||
let arch_mem_regions = arch::arch_memory_regions(config.memory.size);
|
||||
|
||||
let guest_memory = match config.memory.file {
|
||||
Some(file) => {
|
||||
|
||||
Reference in New Issue
Block a user