From e6aa792c014e4f71e9b1813de90ecffc885e0e0b Mon Sep 17 00:00:00 2001 From: Sebastien Boeuf Date: Fri, 22 Apr 2022 11:14:25 +0200 Subject: [PATCH] pci: Store legacy interrupt manager in VfioCommon Extend VfioCommon structure to own the legacy interrupt manager. This will be useful for implementing the restore code path. Signed-off-by: Sebastien Boeuf --- pci/src/vfio.rs | 7 ++++--- pci/src/vfio_user.rs | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pci/src/vfio.rs b/pci/src/vfio.rs index e2404f0d3..f2dd5e67f 100644 --- a/pci/src/vfio.rs +++ b/pci/src/vfio.rs @@ -356,6 +356,7 @@ pub(crate) struct VfioCommon { pub(crate) mmio_regions: Vec, pub(crate) interrupt: Interrupt, pub(crate) msi_interrupt_manager: Arc>, + pub(crate) legacy_interrupt_group: Option>, } impl VfioCommon { @@ -757,7 +758,6 @@ impl VfioCommon { pub(crate) fn initialize_legacy_interrupt( &mut self, - legacy_interrupt_group: Option>, wrapper: &dyn Vfio, ) -> Result<(), VfioPciError> { if let Some(irq_info) = wrapper.get_irq_info(VFIO_PCI_INTX_IRQ_INDEX) { @@ -768,7 +768,7 @@ impl VfioCommon { } } - if let Some(interrupt_source_group) = legacy_interrupt_group { + if let Some(interrupt_source_group) = self.legacy_interrupt_group.clone() { self.interrupt.intx = Some(VfioIntx { interrupt_source_group, enabled: false, @@ -1028,10 +1028,11 @@ impl VfioPciDevice { msix: None, }, msi_interrupt_manager, + legacy_interrupt_group, }; common.parse_capabilities(&vfio_wrapper, bdf); - common.initialize_legacy_interrupt(legacy_interrupt_group, &vfio_wrapper)?; + common.initialize_legacy_interrupt(&vfio_wrapper)?; let vfio_pci_device = VfioPciDevice { id, diff --git a/pci/src/vfio_user.rs b/pci/src/vfio_user.rs index 3c7695cd8..65ef30011 100644 --- a/pci/src/vfio_user.rs +++ b/pci/src/vfio_user.rs @@ -105,11 +105,12 @@ impl VfioUserPciDevice { msix: None, }, msi_interrupt_manager, + legacy_interrupt_group, }; common.parse_capabilities(&vfio_wrapper, bdf); common - .initialize_legacy_interrupt(legacy_interrupt_group, &vfio_wrapper) + .initialize_legacy_interrupt(&vfio_wrapper) .map_err(VfioUserPciDeviceError::InitializeLegacyInterrupts)?; Ok(Self {