virtio-devices: pci_device: Remove Option<..> around VirtioInterrupt

The VirtioInterrupt is now always created so the Option<..> can always
be removed.

As a side effect the interrupt_source_group can also be removed from the
struct.

Signed-off-by: Rob Bradford <rbradford@meta.com>
This commit is contained in:
Rob Bradford
2026-04-26 11:55:06 +01:00
parent 760610a432
commit b59501e041
+10 -12
View File
@@ -359,8 +359,7 @@ pub struct VirtioPciDevice {
// PCI interrupts. // PCI interrupts.
interrupt_status: Arc<AtomicUsize>, interrupt_status: Arc<AtomicUsize>,
virtio_interrupt: Option<Arc<dyn VirtioInterrupt>>, virtio_interrupt: Arc<dyn VirtioInterrupt>,
interrupt_source_group: MaybeMutInterruptSourceGroup,
// virtio queues // virtio queues
queues: Vec<Queue>, queues: Vec<Queue>,
@@ -592,6 +591,13 @@ impl VirtioPciDevice {
// prevents from a subtle deadlock. // prevents from a subtle deadlock.
std::mem::drop(locked_device); std::mem::drop(locked_device);
let virtio_interrupt = Arc::new(VirtioInterruptMsix::new(
msix_config.clone(),
common_config.msix_config.clone(),
common_config.msix_queues.clone(),
interrupt_source_group.clone(),
));
let mut virtio_pci_device = VirtioPciDevice { let mut virtio_pci_device = VirtioPciDevice {
id, id,
configuration, configuration,
@@ -601,13 +607,12 @@ impl VirtioPciDevice {
device, device,
device_activated: Arc::new(AtomicBool::new(device_activated)), device_activated: Arc::new(AtomicBool::new(device_activated)),
interrupt_status: Arc::new(AtomicUsize::new(interrupt_status)), interrupt_status: Arc::new(AtomicUsize::new(interrupt_status)),
virtio_interrupt: None, virtio_interrupt,
queues, queues,
queue_evts, queue_evts,
memory, memory,
settings_bar: 0, settings_bar: 0,
use_64bit_bar, use_64bit_bar,
interrupt_source_group: interrupt_source_group.clone(),
cap_pci_cfg_info, cap_pci_cfg_info,
bar_regions: vec![], bar_regions: vec![],
activate_evt, activate_evt,
@@ -615,13 +620,6 @@ impl VirtioPciDevice {
pending_activations, pending_activations,
}; };
virtio_pci_device.virtio_interrupt = Some(Arc::new(VirtioInterruptMsix::new(
virtio_pci_device.msix_config.clone(),
virtio_pci_device.common_config.msix_config.clone(),
virtio_pci_device.common_config.msix_queues.clone(),
virtio_pci_device.interrupt_source_group.clone(),
)));
// In case of a restore, we can activate the device, as we know at // In case of a restore, we can activate the device, as we know at
// this point the virtqueues are in the right state and the device is // this point the virtqueues are in the right state and the device is
// ready to be activated, which will spawn each virtio worker thread. // ready to be activated, which will spawn each virtio worker thread.
@@ -820,7 +818,7 @@ impl VirtioPciDevice {
} }
VirtioPciDeviceActivator { VirtioPciDeviceActivator {
interrupt: self.virtio_interrupt.as_ref().unwrap().clone(), interrupt: self.virtio_interrupt.clone(),
memory: Some(self.memory.clone()), memory: Some(self.memory.clone()),
device: self.device.clone(), device: self.device.clone(),
queues: Some(queues), queues: Some(queues),