diff options
author | Xiong Zhang <xiong.y.zhang@intel.corp-partner.google.com> | 2019-11-08 17:43:53 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-02-12 14:16:39 +0000 |
commit | c13648b444a77ea850adc7da25859696a4b20578 (patch) | |
tree | bc4181d7718915b593175f683bd16566957fe535 /devices/src/virtio/virtio_pci_device.rs | |
parent | 17cdcf5deacf82c3e91213121907abd3690d1720 (diff) | |
download | crosvm-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.rs | 5 |
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, |