diff --git a/vmm/src/device_manager.rs b/vmm/src/device_manager.rs index 93999e1be..4ee580de6 100644 --- a/vmm/src/device_manager.rs +++ b/vmm/src/device_manager.rs @@ -4147,14 +4147,19 @@ impl Pausable for DeviceManager { .get_gic_device() .unwrap(), ); - gic_device + if let Some(gicv3_its) = gic_device .lock() .unwrap() .as_any_concrete_mut() .downcast_mut::() - .unwrap() - .pause()?; - } + { + gicv3_its.pause()?; + } else { + return Err(MigratableError::Pause(anyhow!( + "GicDevice downcast to KvmGicV3Its failed when pausing device manager!" + ))); + }; + }; Ok(()) } diff --git a/vmm/src/vm.rs b/vmm/src/vm.rs index e7b963eab..b6c1216a3 100644 --- a/vmm/src/vm.rs +++ b/vmm/src/vm.rs @@ -2027,13 +2027,18 @@ impl Vm { .set_gicr_typers(&saved_vcpu_states); vm_snapshot.add_snapshot( - gic_device + if let Some(gicv3_its) = gic_device .lock() .unwrap() .as_any_concrete_mut() .downcast_mut::() - .unwrap() - .snapshot()?, + { + gicv3_its.snapshot()? + } else { + return Err(MigratableError::Snapshot(anyhow!( + "GicDevice downcast to KvmGicV3Its failed when snapshotting VM!" + ))); + }, ); Ok(()) @@ -2071,13 +2076,18 @@ impl Vm { // Restore GIC states. if let Some(gicv3_its_snapshot) = vm_snapshot.snapshots.get(GIC_V3_ITS_SNAPSHOT_ID) { - gic_device + if let Some(gicv3_its) = gic_device .lock() .unwrap() .as_any_concrete_mut() .downcast_mut::() - .unwrap() - .restore(*gicv3_its_snapshot.clone())?; + { + gicv3_its.restore(*gicv3_its_snapshot.clone())?; + } else { + return Err(MigratableError::Restore(anyhow!( + "GicDevice downcast to KvmGicV3Its failed when restoring VM!" + ))); + }; } else { return Err(MigratableError::Restore(anyhow!( "Missing GicV3Its snapshot"