From f2de4d03158f9a712a2bc62742668c22f6b215e6 Mon Sep 17 00:00:00 2001 From: Samuel Ortiz Date: Fri, 27 Sep 2019 10:39:56 +0200 Subject: [PATCH] vmm: config: Make the cmdline config serializable The linux_loader crate Cmdline struct is not serializable. Instead of forcing the upstream create to carry a serde dependency, we simply use a String for the passed command line and build the actual CmdLine when we need it (in vm::new()). Also, the cmdline offset is not a configuration knob, so we remove it. Signed-off-by: Samuel Ortiz --- vmm/src/config.rs | 7 ++----- vmm/src/vm.rs | 7 +++++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/vmm/src/config.rs b/vmm/src/config.rs index 87726b624..cc656a790 100644 --- a/vmm/src/config.rs +++ b/vmm/src/config.rs @@ -5,7 +5,6 @@ extern crate vm_virtio; -use linux_loader::cmdline::Cmdline; use net_util::MacAddr; use std::convert::From; use std::net::AddrParseError; @@ -180,16 +179,14 @@ pub struct KernelConfig { #[derive(Clone)] pub struct CmdlineConfig { - pub args: Cmdline, + pub args: String, } impl CmdlineConfig { pub fn parse(cmdline: Option<&str>) -> Result { - let cmdline_str = cmdline + let args = cmdline .map(std::string::ToString::to_string) .unwrap_or_else(String::new); - let mut args = Cmdline::new(arch::CMDLINE_MAX_SIZE); - args.insert_str(cmdline_str).unwrap(); Ok(CmdlineConfig { args }) } diff --git a/vmm/src/vm.rs b/vmm/src/vm.rs index f975396cc..2e2f81974 100755 --- a/vmm/src/vm.rs +++ b/vmm/src/vm.rs @@ -33,6 +33,7 @@ use kvm_bindings::{ }; use kvm_ioctls::*; use libc::{c_void, siginfo_t}; +use linux_loader::cmdline::Cmdline; use linux_loader::loader::KernelLoader; use signal_hook::{iterator::Signals, SIGWINCH}; use std::ffi::CString; @@ -677,7 +678,10 @@ impl Vm { } fn load_kernel(&mut self) -> Result { - let mut cmdline = self.config.cmdline.args.clone(); + let mut cmdline = Cmdline::new(arch::CMDLINE_MAX_SIZE); + cmdline + .insert_str(self.config.cmdline.args.clone()) + .map_err(|_| Error::CmdLine)?; for entry in self.devices.cmdline_additions() { cmdline.insert_str(entry).map_err(|_| Error::CmdLine)?; } @@ -709,7 +713,6 @@ impl Vm { &cmdline_cstring, ) .map_err(|_| Error::CmdLine)?; - let vcpu_count = u8::from(&self.config.cpus); let end_of_range = GuestAddress((1 << get_host_cpu_phys_bits()) - 1); match entry_addr.setup_header {