Skip to content

Commit b7d041f

Browse files
committed
refactor: remove SharedDeviceType
This wrapper was only used in the `update_from_restored_device` function which was instantly unwrapping the value and just adding device to the VmResources. Instead of this round trip just add devices directly since fields are public. This also removes the check for the addition of balloon device, but this check is not needed anyway, since snapshot should not contain conflicting configs. Signed-off-by: Egor Lazarchuk <yegorlz@amazon.co.uk>
1 parent 66abeb1 commit b7d041f

File tree

3 files changed

+26
-95
lines changed

3 files changed

+26
-95
lines changed

src/vmm/src/device_manager/pci_mngr.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use event_manager::{MutEventSubscriber, SubscriberOps};
1010
use log::{debug, error, warn};
1111
use serde::{Deserialize, Serialize};
1212

13-
use super::persist::{MmdsState, SharedDeviceType};
13+
use super::persist::MmdsState;
1414
use crate::devices::pci::PciSegment;
1515
use crate::devices::virtio::balloon::Balloon;
1616
use crate::devices::virtio::balloon::persist::{BalloonConstructorArgs, BalloonState};
@@ -431,8 +431,8 @@ impl<'a> Persist<'a> for PciDevices {
431431

432432
constructor_args
433433
.vm_resources
434-
.update_from_restored_device(SharedDeviceType::Balloon(device.clone()))
435-
.unwrap();
434+
.balloon
435+
.set_device(device.clone());
436436

437437
pci_devices
438438
.restore_pci_device(
@@ -456,8 +456,8 @@ impl<'a> Persist<'a> for PciDevices {
456456

457457
constructor_args
458458
.vm_resources
459-
.update_from_restored_device(SharedDeviceType::VirtioBlock(device.clone()))
460-
.unwrap();
459+
.block
460+
.add_virtio_device(device.clone());
461461

462462
pci_devices
463463
.restore_pci_device(
@@ -506,8 +506,8 @@ impl<'a> Persist<'a> for PciDevices {
506506

507507
constructor_args
508508
.vm_resources
509-
.update_from_restored_device(SharedDeviceType::Network(device.clone()))
510-
.unwrap();
509+
.net_builder
510+
.add_device(device.clone());
511511

512512
pci_devices
513513
.restore_pci_device(
@@ -539,8 +539,8 @@ impl<'a> Persist<'a> for PciDevices {
539539

540540
constructor_args
541541
.vm_resources
542-
.update_from_restored_device(SharedDeviceType::Vsock(device.clone()))
543-
.unwrap();
542+
.vsock
543+
.set_device(device.clone());
544544

545545
pci_devices
546546
.restore_pci_device(
@@ -562,8 +562,8 @@ impl<'a> Persist<'a> for PciDevices {
562562

563563
constructor_args
564564
.vm_resources
565-
.update_from_restored_device(SharedDeviceType::Entropy(device.clone()))
566-
.unwrap();
565+
.entropy
566+
.set_device(device.clone());
567567

568568
pci_devices
569569
.restore_pci_device(
@@ -590,8 +590,8 @@ impl<'a> Persist<'a> for PciDevices {
590590

591591
constructor_args
592592
.vm_resources
593-
.update_from_restored_device(SharedDeviceType::Pmem(device.clone()))
594-
.unwrap();
593+
.pmem
594+
.add_device(device.clone());
595595

596596
pci_devices
597597
.restore_pci_device(

src/vmm/src/device_manager/persist.rs

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ use crate::devices::virtio::vsock::persist::{
4444
};
4545
use crate::devices::virtio::vsock::{Vsock, VsockError, VsockUnixBackend, VsockUnixBackendError};
4646
use crate::mmds::data_store::MmdsVersion;
47-
use crate::resources::{ResourcesError, VmResources};
47+
use crate::resources::VmResources;
4848
use crate::snapshot::Persist;
4949
use crate::vmm_config::mmds::MmdsConfigError;
5050
use crate::vstate::bus::BusError;
@@ -79,8 +79,6 @@ pub enum DevicePersistError {
7979
Entropy(#[from] EntropyError),
8080
/// Pmem: {0}
8181
Pmem(#[from] PmemError),
82-
/// Resource misconfiguration: {0}. Is the snapshot file corrupted?
83-
ResourcesError(#[from] ResourcesError),
8482
/// Could not activate device: {0}
8583
DeviceActivation(#[from] ActivateError),
8684
}
@@ -136,18 +134,6 @@ pub struct DeviceStates {
136134
pub pmem_devices: Vec<VirtioDeviceState<PmemState>>,
137135
}
138136

139-
/// A type used to extract the concrete `Arc<Mutex<T>>` for each of the device
140-
/// types when restoring from a snapshot.
141-
#[derive(Debug)]
142-
pub enum SharedDeviceType {
143-
VirtioBlock(Arc<Mutex<Block>>),
144-
Network(Arc<Mutex<Net>>),
145-
Balloon(Arc<Mutex<Balloon>>),
146-
Vsock(Arc<Mutex<Vsock<VsockUnixBackend>>>),
147-
Entropy(Arc<Mutex<Entropy>>),
148-
Pmem(Arc<Mutex<Pmem>>),
149-
}
150-
151137
pub struct MMIODevManagerConstructorArgs<'a> {
152138
pub mem: &'a GuestMemoryMmap,
153139
pub vm: &'a Arc<Vm>,
@@ -437,7 +423,8 @@ impl<'a> Persist<'a> for MMIODeviceManager {
437423

438424
constructor_args
439425
.vm_resources
440-
.update_from_restored_device(SharedDeviceType::Balloon(device.clone()))?;
426+
.balloon
427+
.set_device(device.clone());
441428

442429
restore_helper(
443430
device.clone(),
@@ -459,7 +446,8 @@ impl<'a> Persist<'a> for MMIODeviceManager {
459446

460447
constructor_args
461448
.vm_resources
462-
.update_from_restored_device(SharedDeviceType::VirtioBlock(device.clone()))?;
449+
.block
450+
.add_virtio_device(device.clone());
463451

464452
restore_helper(
465453
device.clone(),
@@ -498,7 +486,8 @@ impl<'a> Persist<'a> for MMIODeviceManager {
498486

499487
constructor_args
500488
.vm_resources
501-
.update_from_restored_device(SharedDeviceType::Network(device.clone()))?;
489+
.net_builder
490+
.add_device(device.clone());
502491

503492
restore_helper(
504493
device.clone(),
@@ -527,7 +516,8 @@ impl<'a> Persist<'a> for MMIODeviceManager {
527516

528517
constructor_args
529518
.vm_resources
530-
.update_from_restored_device(SharedDeviceType::Vsock(device.clone()))?;
519+
.vsock
520+
.set_device(device.clone());
531521

532522
restore_helper(
533523
device.clone(),
@@ -551,7 +541,8 @@ impl<'a> Persist<'a> for MMIODeviceManager {
551541

552542
constructor_args
553543
.vm_resources
554-
.update_from_restored_device(SharedDeviceType::Entropy(device.clone()))?;
544+
.entropy
545+
.set_device(device.clone());
555546

556547
restore_helper(
557548
device.clone(),
@@ -576,7 +567,8 @@ impl<'a> Persist<'a> for MMIODeviceManager {
576567

577568
constructor_args
578569
.vm_resources
579-
.update_from_restored_device(SharedDeviceType::Pmem(device.clone()))?;
570+
.pmem
571+
.add_device(device.clone());
580572

581573
restore_helper(
582574
device.clone(),

src/vmm/src/resources.rs

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ use serde::{Deserialize, Serialize};
99
use vm_memory::GuestAddress;
1010

1111
use crate::cpu_config::templates::CustomCpuTemplate;
12-
use crate::device_manager::persist::SharedDeviceType;
1312
use crate::logger::info;
1413
use crate::mmds;
1514
use crate::mmds::data_store::{Mmds, MmdsVersion};
@@ -230,40 +229,6 @@ impl VmResources {
230229
Ok(mmds.lock().expect("Poisoned lock"))
231230
}
232231

233-
/// Updates the resources from a restored device (used for configuring resources when
234-
/// restoring from a snapshot).
235-
pub fn update_from_restored_device(
236-
&mut self,
237-
device: SharedDeviceType,
238-
) -> Result<(), ResourcesError> {
239-
match device {
240-
SharedDeviceType::VirtioBlock(block) => {
241-
self.block.add_virtio_device(block);
242-
}
243-
SharedDeviceType::Network(network) => {
244-
self.net_builder.add_device(network);
245-
}
246-
SharedDeviceType::Balloon(balloon) => {
247-
self.balloon.set_device(balloon);
248-
249-
if self.machine_config.huge_pages != HugePageConfig::None {
250-
return Err(ResourcesError::BalloonDevice(BalloonConfigError::HugePages));
251-
}
252-
}
253-
SharedDeviceType::Vsock(vsock) => {
254-
self.vsock.set_device(vsock);
255-
}
256-
SharedDeviceType::Entropy(entropy) => {
257-
self.entropy.set_device(entropy);
258-
}
259-
SharedDeviceType::Pmem(pmem) => {
260-
self.pmem.add_device(pmem);
261-
}
262-
}
263-
264-
Ok(())
265-
}
266-
267232
/// Add a custom CPU template to the VM resources
268233
/// to configure vCPUs.
269234
pub fn set_custom_cpu_template(&mut self, cpu_template: CustomCpuTemplate) {
@@ -563,7 +528,6 @@ mod tests {
563528
use crate::HTTP_MAX_PAYLOAD_SIZE;
564529
use crate::cpu_config::templates::test_utils::TEST_TEMPLATE_JSON;
565530
use crate::cpu_config::templates::{CpuTemplateType, StaticCpuTemplate};
566-
use crate::devices::virtio::balloon::Balloon;
567531
use crate::devices::virtio::block::virtio::VirtioBlockError;
568532
use crate::devices::virtio::block::{BlockError, CacheType};
569533
use crate::devices::virtio::vsock::VSOCK_DEV_ID;
@@ -1539,31 +1503,6 @@ mod tests {
15391503
.unwrap_err();
15401504
}
15411505

1542-
#[test]
1543-
fn test_negative_restore_balloon_device_with_huge_pages() {
1544-
let mut vm_resources = default_vm_resources();
1545-
vm_resources.balloon = BalloonBuilder::new();
1546-
vm_resources
1547-
.update_machine_config(&MachineConfigUpdate {
1548-
huge_pages: Some(HugePageConfig::Hugetlbfs2M),
1549-
..Default::default()
1550-
})
1551-
.unwrap();
1552-
let err = vm_resources
1553-
.update_from_restored_device(SharedDeviceType::Balloon(Arc::new(Mutex::new(
1554-
Balloon::new(128, false, 0).unwrap(),
1555-
))))
1556-
.unwrap_err();
1557-
assert!(
1558-
matches!(
1559-
err,
1560-
ResourcesError::BalloonDevice(BalloonConfigError::HugePages)
1561-
),
1562-
"{:?}",
1563-
err
1564-
);
1565-
}
1566-
15671506
#[test]
15681507
fn test_set_entropy_device() {
15691508
let mut vm_resources = default_vm_resources();

0 commit comments

Comments
 (0)