From 760610a4328cfb94586ce6bda5a44090b9a769bb Mon Sep 17 00:00:00 2001 From: Rob Bradford Date: Sun, 26 Apr 2026 11:51:34 +0100 Subject: [PATCH] virtio-devices: pci_device: Remove Option<..> from msix_config Since this is always created there is no need to make it an Option type simplifying the code. Historically it was an Option to support INTx based virtio but that was removed long ago. Signed-off-by: Rob Bradford --- virtio-devices/src/transport/pci_device.rs | 84 ++++++++++------------ 1 file changed, 36 insertions(+), 48 deletions(-) diff --git a/virtio-devices/src/transport/pci_device.rs b/virtio-devices/src/transport/pci_device.rs index 2c2620940..be8d61138 100644 --- a/virtio-devices/src/transport/pci_device.rs +++ b/virtio-devices/src/transport/pci_device.rs @@ -348,7 +348,7 @@ pub struct VirtioPciDevice { common_config: VirtioPciCommonConfig, // MSI-X config - msix_config: Option>>, + msix_config: Arc>, // Number of MSI-X vectors msix_num: u16, @@ -596,7 +596,7 @@ impl VirtioPciDevice { id, configuration, common_config, - msix_config: Some(msix_config), + msix_config, msix_num, device, device_activated: Arc::new(AtomicBool::new(device_activated)), @@ -615,14 +615,12 @@ impl VirtioPciDevice { pending_activations, }; - if let Some(msix_config) = &virtio_pci_device.msix_config { - virtio_pci_device.virtio_interrupt = Some(Arc::new(VirtioInterruptMsix::new( - 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(), - ))); - } + 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 // this point the virtqueues are in the right state and the device is @@ -739,18 +737,16 @@ impl VirtioPciDevice { + VIRTIO_PCI_CAP_OFFSET; self.cap_pci_cfg_info.cap = configuration_cap; - if self.msix_config.is_some() { - let msix_cap = MsixCap::new( - settings_bar, - self.msix_num, - MSIX_TABLE_BAR_OFFSET as u32, - settings_bar, - MSIX_PBA_BAR_OFFSET as u32, - ); - self.configuration - .add_capability(&msix_cap) - .map_err(PciDeviceError::CapabilitiesSetup)?; - } + let msix_cap = MsixCap::new( + settings_bar, + self.msix_num, + MSIX_TABLE_BAR_OFFSET as u32, + settings_bar, + MSIX_PBA_BAR_OFFSET as u32, + ); + self.configuration + .add_capability(&msix_cap) + .map_err(PciDeviceError::CapabilitiesSetup)?; self.settings_bar = settings_bar; Ok(()) @@ -1163,20 +1159,16 @@ impl PciDevice for VirtioPciDevice { // Handled with ioeventfds. } o if (MSIX_TABLE_BAR_OFFSET..MSIX_TABLE_BAR_OFFSET + MSIX_TABLE_SIZE).contains(&o) => { - if let Some(msix_config) = &self.msix_config { - msix_config - .lock() - .unwrap() - .read_table(o - MSIX_TABLE_BAR_OFFSET, data); - } + self.msix_config + .lock() + .unwrap() + .read_table(o - MSIX_TABLE_BAR_OFFSET, data); } o if (MSIX_PBA_BAR_OFFSET..MSIX_PBA_BAR_OFFSET + MSIX_PBA_SIZE).contains(&o) => { - if let Some(msix_config) = &self.msix_config { - msix_config - .lock() - .unwrap() - .read_pba(o - MSIX_PBA_BAR_OFFSET, data); - } + self.msix_config + .lock() + .unwrap() + .read_pba(o - MSIX_PBA_BAR_OFFSET, data); } _ => (), } @@ -1215,20 +1207,16 @@ impl PciDevice for VirtioPciDevice { error!("Unexpected write to notification BAR: offset = 0x{o:x}"); } o if (MSIX_TABLE_BAR_OFFSET..MSIX_TABLE_BAR_OFFSET + MSIX_TABLE_SIZE).contains(&o) => { - if let Some(msix_config) = &self.msix_config { - msix_config - .lock() - .unwrap() - .write_table(o - MSIX_TABLE_BAR_OFFSET, data); - } + self.msix_config + .lock() + .unwrap() + .write_table(o - MSIX_TABLE_BAR_OFFSET, data); } o if (MSIX_PBA_BAR_OFFSET..MSIX_PBA_BAR_OFFSET + MSIX_PBA_SIZE).contains(&o) => { - if let Some(msix_config) = &self.msix_config { - msix_config - .lock() - .unwrap() - .write_pba(o - MSIX_PBA_BAR_OFFSET, data); - } + self.msix_config + .lock() + .unwrap() + .write_pba(o - MSIX_PBA_BAR_OFFSET, data); } _ => (), } @@ -1309,8 +1297,8 @@ impl Snapshottable for VirtioPciDevice { .add_snapshot(self.common_config.id(), self.common_config.snapshot()?); // Snapshot MSI-X - if let Some(msix_config) = &self.msix_config { - let mut msix_config = msix_config.lock().unwrap(); + { + let mut msix_config = self.msix_config.lock().unwrap(); virtio_pci_dev_snapshot.add_snapshot(msix_config.id(), msix_config.snapshot()?); }