vmm: device_manager: Refactor make_virtio_pmem_devices

Split it into a method that creates a single device which is called by
the multiple device version so this can be used when dynamically adding
a device.

Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
Rob Bradford 2020-03-13 09:38:42 +00:00 committed by Sebastien Boeuf
parent a7296bbb52
commit 8c3ea8cd76

View File

@ -14,7 +14,7 @@ extern crate vm_device;
use crate::config::ConsoleOutputMode; use crate::config::ConsoleOutputMode;
#[cfg(feature = "pci_support")] #[cfg(feature = "pci_support")]
use crate::config::DeviceConfig; use crate::config::DeviceConfig;
use crate::config::{DiskConfig, NetConfig, VmConfig}; use crate::config::{DiskConfig, NetConfig, PmemConfig, VmConfig};
use crate::interrupt::{ use crate::interrupt::{
KvmLegacyUserspaceInterruptManager, KvmMsiInterruptManager, KvmRoutingEntry, KvmLegacyUserspaceInterruptManager, KvmMsiInterruptManager, KvmRoutingEntry,
}; };
@ -1377,11 +1377,10 @@ impl DeviceManager {
Ok(devices) Ok(devices)
} }
fn make_virtio_pmem_devices(&mut self) -> DeviceManagerResult<Vec<(VirtioDeviceArc, bool)>> { fn make_virtio_pmem_device(
let mut devices = Vec::new(); &mut self,
// Add virtio-pmem if required pmem_cfg: &PmemConfig,
if let Some(pmem_list_cfg) = &self.config.lock().unwrap().pmem { ) -> DeviceManagerResult<(VirtioDeviceArc, bool)> {
for pmem_cfg in pmem_list_cfg.iter() {
let size = pmem_cfg.size; let size = pmem_cfg.size;
// The memory needs to be 2MiB aligned in order to support // The memory needs to be 2MiB aligned in order to support
@ -1450,13 +1449,22 @@ impl DeviceManager {
.map_err(DeviceManagerError::CreateVirtioPmem)?, .map_err(DeviceManagerError::CreateVirtioPmem)?,
)); ));
devices.push((
Arc::clone(&virtio_pmem_device) as Arc<Mutex<dyn vm_virtio::VirtioDevice>>,
false,
));
self.migratable_devices self.migratable_devices
.push(Arc::clone(&virtio_pmem_device) as Arc<Mutex<dyn Migratable>>); .push(Arc::clone(&virtio_pmem_device) as Arc<Mutex<dyn Migratable>>);
Ok((
Arc::clone(&virtio_pmem_device) as Arc<Mutex<dyn vm_virtio::VirtioDevice>>,
false,
))
}
fn make_virtio_pmem_devices(&mut self) -> DeviceManagerResult<Vec<(VirtioDeviceArc, bool)>> {
let mut devices = Vec::new();
// Add virtio-pmem if required
let pmem_devices = self.config.lock().unwrap().pmem.clone();
if let Some(pmem_list_cfg) = &pmem_devices {
for pmem_cfg in pmem_list_cfg.iter() {
devices.push(self.make_virtio_pmem_device(pmem_cfg)?);
} }
} }