summary refs log tree commit diff
path: root/devices
diff options
context:
space:
mode:
authorDaniel Verkamp <dverkamp@chromium.org>2018-10-03 16:50:28 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-10-11 17:33:55 -0700
commit1232debf1d60d4188a3e6fe88a597f88e87eda01 (patch)
treee419b12c5654612bab71194b100de3e41d83f22b /devices
parentcf2e00e9827798de956ff564aa422e9f31983d69 (diff)
downloadcrosvm-1232debf1d60d4188a3e6fe88a597f88e87eda01.tar
crosvm-1232debf1d60d4188a3e6fe88a597f88e87eda01.tar.gz
crosvm-1232debf1d60d4188a3e6fe88a597f88e87eda01.tar.bz2
crosvm-1232debf1d60d4188a3e6fe88a597f88e87eda01.tar.lz
crosvm-1232debf1d60d4188a3e6fe88a597f88e87eda01.tar.xz
crosvm-1232debf1d60d4188a3e6fe88a597f88e87eda01.tar.zst
crosvm-1232debf1d60d4188a3e6fe88a597f88e87eda01.zip
devices: virtio: pci: reset ISR status on read
The virtio PCI spec (4.1.4.5.1 Device Requirements: ISR status
capability) says:

  "The device MUST reset ISR status to 0 on driver read."

BUG=chromium:854766
TEST=None

Change-Id: I92a1ddccfc8e44bed7f4a16e3cfd11b946629e22
Signed-off-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1260252
Reviewed-by: Dylan Reid <dgreid@chromium.org>
Diffstat (limited to 'devices')
-rw-r--r--devices/src/virtio/virtio_pci_device.rs3
1 files changed, 2 insertions, 1 deletions
diff --git a/devices/src/virtio/virtio_pci_device.rs b/devices/src/virtio/virtio_pci_device.rs
index 613418c..43d2b53 100644
--- a/devices/src/virtio/virtio_pci_device.rs
+++ b/devices/src/virtio/virtio_pci_device.rs
@@ -349,7 +349,8 @@ impl PciDevice for VirtioPciDevice {
             }
             o if ISR_CONFIG_BAR_OFFSET <= o && o < ISR_CONFIG_BAR_OFFSET + ISR_CONFIG_SIZE => {
                 if let Some(v) = data.get_mut(0) {
-                    *v = self.interrupt_status.load(Ordering::SeqCst) as u8;
+                    // Reading this register resets it to 0.
+                    *v = self.interrupt_status.swap(0, Ordering::SeqCst) as u8;
                 }
             }
             o if DEVICE_CONFIG_BAR_OFFSET <= o