summary refs log tree commit diff
path: root/devices/src/virtio/virtio_pci_device.rs
diff options
context:
space:
mode:
authorXiong Zhang <xiong.y.zhang@intel.corp-partner.google.com>2019-11-08 17:43:53 +0800
committerCommit Bot <commit-bot@chromium.org>2020-02-12 14:16:39 +0000
commitc13648b444a77ea850adc7da25859696a4b20578 (patch)
treebc4181d7718915b593175f683bd16566957fe535 /devices/src/virtio/virtio_pci_device.rs
parent17cdcf5deacf82c3e91213121907abd3690d1720 (diff)
downloadcrosvm-c13648b444a77ea850adc7da25859696a4b20578.tar
crosvm-c13648b444a77ea850adc7da25859696a4b20578.tar.gz
crosvm-c13648b444a77ea850adc7da25859696a4b20578.tar.bz2
crosvm-c13648b444a77ea850adc7da25859696a4b20578.tar.lz
crosvm-c13648b444a77ea850adc7da25859696a4b20578.tar.xz
crosvm-c13648b444a77ea850adc7da25859696a4b20578.tar.zst
crosvm-c13648b444a77ea850adc7da25859696a4b20578.zip
Vfio: Create Msix capability for vfio device
Loop vfio device config register, then find out the msi and msix
pci capability.

both msi and msix need IrqRequestSocket for adding its routing info
into kvm routing table, but vfio device has one IrqRequestSocket only,
and only msi or msix is enabled at runtime, so Arc is used to let msi
and msix share one device IrqRequestSocket.

BUG=chromium:992270
TEST=pass a device with msix capability to guest, and check device msix
function in guest

Change-Id: I008ccd0e98507dc4d587418fbe00aa23029bdbad
Signed-off-by: Xiong Zhang <xiong.y.zhang@intel.corp-partner.google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1987812
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Diffstat (limited to 'devices/src/virtio/virtio_pci_device.rs')
-rw-r--r--devices/src/virtio/virtio_pci_device.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/devices/src/virtio/virtio_pci_device.rs b/devices/src/virtio/virtio_pci_device.rs
index 4b161d4..c6d6786 100644
--- a/devices/src/virtio/virtio_pci_device.rs
+++ b/devices/src/virtio/virtio_pci_device.rs
@@ -252,7 +252,10 @@ impl VirtioPciDevice {
 
         // One MSI-X vector per queue plus one for configuration changes.
         let msix_num = u16::try_from(num_queues + 1).map_err(|_| sys_util::Error::new(ERANGE))?;
-        let msix_config = Arc::new(Mutex::new(MsixConfig::new(msix_num, msi_device_socket)));
+        let msix_config = Arc::new(Mutex::new(MsixConfig::new(
+            msix_num,
+            Arc::new(msi_device_socket),
+        )));
 
         let config_regs = PciConfiguration::new(
             VIRTIO_PCI_VENDOR_ID,