diff options
author | Daniel Verkamp <dverkamp@chromium.org> | 2019-10-31 17:05:49 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-11-06 22:20:43 +0000 |
commit | 081ad6b6cdf3b345ada2623cf513b25a2b6c074a (patch) | |
tree | 3bde09525ba29d5adfaad726bb8679e2c85dd391 /devices/src | |
parent | 0a517b31795b2ab8c70b3d5dcc5565da6e6cc53e (diff) | |
download | crosvm-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')
-rw-r--r-- | devices/src/virtio/interrupt.rs | 6 |
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; } } |