summary refs log tree commit diff
path: root/src/linux.rs
diff options
context:
space:
mode:
authorDaniel Verkamp <dverkamp@chromium.org>2019-11-19 09:47:33 -0800
committerCommit Bot <commit-bot@chromium.org>2019-12-06 01:45:44 +0000
commitbb712d649f82f623d9d2ed25f9ab758fa4343e19 (patch)
treedbee8a3200cda942f78f324846e72b0515ff3996 /src/linux.rs
parent277ea5f4b4e2e2fed0b07f68451514cef521a95a (diff)
downloadcrosvm-bb712d649f82f623d9d2ed25f9ab758fa4343e19.tar
crosvm-bb712d649f82f623d9d2ed25f9ab758fa4343e19.tar.gz
crosvm-bb712d649f82f623d9d2ed25f9ab758fa4343e19.tar.bz2
crosvm-bb712d649f82f623d9d2ed25f9ab758fa4343e19.tar.lz
crosvm-bb712d649f82f623d9d2ed25f9ab758fa4343e19.tar.xz
crosvm-bb712d649f82f623d9d2ed25f9ab758fa4343e19.tar.zst
crosvm-bb712d649f82f623d9d2ed25f9ab758fa4343e19.zip
devices: virtio: enable MSI-X for all devices
All virtio devices can use the same generic calculation for number of
MSI-X vectors required: number of queues plus one for configuration
changes.  Move this calculation to the VirtioPciDevice implementation
and remove the Option to unconditionally enable MSI-X support for all
PCI virtio devices.

BUG=chromium:854765
TEST=Verify all virtio interrupts in /proc/interrupts are PCI-MSI

Change-Id: I5905ab52840e7617b0b342ec6ca3f75dccd16e4d
Signed-off-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1925169
Reviewed-by: Zide Chen <zide.chen@intel.com>
Reviewed-by: Dylan Reid <dgreid@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Diffstat (limited to 'src/linux.rs')
-rw-r--r--src/linux.rs16
1 files changed, 5 insertions, 11 deletions
diff --git a/src/linux.rs b/src/linux.rs
index a3df995..9b984d1 100644
--- a/src/linux.rs
+++ b/src/linux.rs
@@ -1044,17 +1044,11 @@ fn create_devices(
     let mut pci_devices = Vec::new();
 
     for stub in stubs {
-        let dev = if stub.dev.msix_vectors() > 0 {
-            let (msi_host_socket, msi_device_socket) =
-                msg_socket::pair::<VmIrqResponse, VmIrqRequest>().map_err(Error::CreateSocket)?;
-            control_sockets.push(TaggedControlSocket::VmIrq(msi_host_socket));
-
-            VirtioPciDevice::new(mem.clone(), stub.dev, Some(msi_device_socket))
-                .map_err(Error::VirtioPciDev)?
-        } else {
-            VirtioPciDevice::new(mem.clone(), stub.dev, None).map_err(Error::VirtioPciDev)?
-        };
-
+        let (msi_host_socket, msi_device_socket) =
+            msg_socket::pair::<VmIrqResponse, VmIrqRequest>().map_err(Error::CreateSocket)?;
+        control_sockets.push(TaggedControlSocket::VmIrq(msi_host_socket));
+        let dev = VirtioPciDevice::new(mem.clone(), stub.dev, msi_device_socket)
+            .map_err(Error::VirtioPciDev)?;
         let dev = Box::new(dev) as Box<dyn PciDevice>;
         pci_devices.push((dev, stub.jail));
     }