vmm: Make VsockConfig owned

Convert Path to PathBuf and remove the associated lifetime.
Now we can remove the VmConfig associated lifetime.

Fixes #298

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
Samuel Ortiz 2019-09-23 19:46:35 +02:00 committed by Rob Bradford
parent 3dc7aff00e
commit acc60b0ad5
2 changed files with 13 additions and 13 deletions

View File

@ -10,7 +10,7 @@ use net_util::MacAddr;
use std::convert::From; use std::convert::From;
use std::net::AddrParseError; use std::net::AddrParseError;
use std::net::Ipv4Addr; use std::net::Ipv4Addr;
use std::path::{Path, PathBuf}; use std::path::PathBuf;
use std::result; use std::result;
use vm_memory::GuestAddress; use vm_memory::GuestAddress;
use vm_virtio::vhost_user::VhostUserConfig; use vm_virtio::vhost_user::VhostUserConfig;
@ -521,13 +521,13 @@ impl VhostUserNetConfig {
} }
} }
pub struct VsockConfig<'a> { pub struct VsockConfig {
pub cid: u64, pub cid: u64,
pub sock: &'a Path, pub sock: PathBuf,
} }
impl<'a> VsockConfig<'a> { impl VsockConfig {
pub fn parse(vsock: &'a str) -> Result<Self> { pub fn parse(vsock: &str) -> Result<Self> {
// Split the parameters based on the comma delimiter // Split the parameters based on the comma delimiter
let params_list: Vec<&str> = vsock.split(',').collect(); let params_list: Vec<&str> = vsock.split(',').collect();
@ -548,7 +548,7 @@ impl<'a> VsockConfig<'a> {
Ok(VsockConfig { Ok(VsockConfig {
cid: cid_str.parse::<u64>().map_err(Error::ParseVsockCidParam)?, cid: cid_str.parse::<u64>().map_err(Error::ParseVsockCidParam)?,
sock: Path::new(sock_str), sock: PathBuf::from(sock_str),
}) })
} }
} }
@ -608,7 +608,7 @@ impl VhostUserBlkConfig {
} }
} }
pub struct VmConfig<'a> { pub struct VmConfig {
pub cpus: CpusConfig, pub cpus: CpusConfig,
pub memory: MemoryConfig, pub memory: MemoryConfig,
pub kernel: KernelConfig, pub kernel: KernelConfig,
@ -623,11 +623,11 @@ pub struct VmConfig<'a> {
pub devices: Option<Vec<DeviceConfig>>, pub devices: Option<Vec<DeviceConfig>>,
pub vhost_user_net: Option<Vec<VhostUserNetConfig>>, pub vhost_user_net: Option<Vec<VhostUserNetConfig>>,
pub vhost_user_blk: Option<Vec<VhostUserBlkConfig>>, pub vhost_user_blk: Option<Vec<VhostUserBlkConfig>>,
pub vsock: Option<Vec<VsockConfig<'a>>>, pub vsock: Option<Vec<VsockConfig>>,
} }
impl<'a> VmConfig<'a> { impl VmConfig {
pub fn parse(vm_params: VmParams<'a>) -> Result<Self> { pub fn parse(vm_params: VmParams) -> Result<Self> {
let mut disks: Option<Vec<DiskConfig>> = None; let mut disks: Option<Vec<DiskConfig>> = None;
if let Some(disk_list) = &vm_params.disks { if let Some(disk_list) = &vm_params.disks {
let mut disk_config_list = Vec::new(); let mut disk_config_list = Vec::new();

View File

@ -426,7 +426,7 @@ impl Vcpu {
pub struct VmInfo<'a> { pub struct VmInfo<'a> {
pub memory: &'a Arc<RwLock<GuestMemoryMmap>>, pub memory: &'a Arc<RwLock<GuestMemoryMmap>>,
pub vm_fd: &'a Arc<VmFd>, pub vm_fd: &'a Arc<VmFd>,
pub vm_cfg: &'a VmConfig<'a>, pub vm_cfg: &'a VmConfig,
} }
#[derive(Debug, Clone, Copy, PartialEq)] #[derive(Debug, Clone, Copy, PartialEq)]
@ -507,7 +507,7 @@ pub struct Vm<'a> {
threads: Vec<thread::JoinHandle<()>>, threads: Vec<thread::JoinHandle<()>>,
devices: DeviceManager, devices: DeviceManager,
cpuid: CpuId, cpuid: CpuId,
config: &'a VmConfig<'a>, config: &'a VmConfig,
epoll: EpollContext, epoll: EpollContext,
on_tty: bool, on_tty: bool,
creation_ts: std::time::Instant, creation_ts: std::time::Instant,
@ -533,7 +533,7 @@ fn get_host_cpu_phys_bits() -> u8 {
} }
impl<'a> Vm<'a> { impl<'a> Vm<'a> {
pub fn new(kvm: &Kvm, config: &'a VmConfig<'a>) -> Result<Self> { pub fn new(kvm: &Kvm, config: &'a VmConfig) -> Result<Self> {
let kernel = File::open(&config.kernel.path).map_err(Error::KernelFile)?; let kernel = File::open(&config.kernel.path).map_err(Error::KernelFile)?;
let fd = kvm.create_vm().map_err(Error::VmCreate)?; let fd = kvm.create_vm().map_err(Error::VmCreate)?;
let fd = Arc::new(fd); let fd = Arc::new(fd);