summary refs log tree commit diff
path: root/devices/src/virtio
diff options
context:
space:
mode:
authorDaniel Verkamp <dverkamp@chromium.org>2019-10-31 17:05:49 -0700
committerCommit Bot <commit-bot@chromium.org>2019-11-06 22:20:43 +0000
commit081ad6b6cdf3b345ada2623cf513b25a2b6c074a (patch)
tree3bde09525ba29d5adfaad726bb8679e2c85dd391 /devices/src/virtio
parent0a517b31795b2ab8c70b3d5dcc5565da6e6cc53e (diff)
downloadcrosvm-081ad6b6cdf3b345ada2623cf513b25a2b6c074a.tar
crosvm-081ad6b6cdf3b345ada2623cf513b25a2b6c074a.tar.gz
crosvm-081ad6b6cdf3b345ada2623cf513b25a2b6c074a.tar.bz2
crosvm-081ad6b6cdf3b345ada2623cf513b25a2b6c074a.tar.lz
crosvm-081ad6b6cdf3b345ada2623cf513b25a2b6c074a.tar.xz
crosvm-081ad6b6cdf3b345ada2623cf513b25a2b6c074a.tar.zst
crosvm-081ad6b6cdf3b345ada2623cf513b25a2b6c074a.zip
devices: virtio: do not trigger MSI-X with no vector
The virtio specification allows the driver to configure a queue's MSI-X
vector to the magic NO_VECTOR value (0xffff); in this case, if MSI-X is
enabled, no interrupt should be delivered (neither MSI-X nor INTx).

BUG=chromium:854765
TEST=./build_test.py

Change-Id: Icb5e82bf9a57ded60fc8c022c4d8630b5ab70dcf
Signed-off-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1898266
Reviewed-by: Zide Chen <zide.chen@intel.corp-partner.google.com>
Reviewed-by: Zach Reizner <zachr@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Diffstat (limited to 'devices/src/virtio')
-rw-r--r--devices/src/virtio/interrupt.rs6
1 files changed, 4 insertions, 2 deletions
diff --git a/devices/src/virtio/interrupt.rs b/devices/src/virtio/interrupt.rs
index dd17ba7..2715d12 100644
--- a/devices/src/virtio/interrupt.rs
+++ b/devices/src/virtio/interrupt.rs
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-use super::{INTERRUPT_STATUS_CONFIG_CHANGED, INTERRUPT_STATUS_USED_RING};
+use super::{INTERRUPT_STATUS_CONFIG_CHANGED, INTERRUPT_STATUS_USED_RING, VIRTIO_MSI_NO_VECTOR};
 use crate::pci::MsixConfig;
 use std::sync::atomic::{AtomicUsize, Ordering};
 use std::sync::Arc;
@@ -40,7 +40,9 @@ impl Interrupt {
         if let Some(msix_config) = &self.msix_config {
             let mut msix_config = msix_config.lock();
             if msix_config.enabled() {
-                msix_config.trigger(vector);
+                if vector != VIRTIO_MSI_NO_VECTOR {
+                    msix_config.trigger(vector);
+                }
                 return;
             }
         }