summary refs log tree commit diff
diff options
context:
space:
mode:
authorDaniel Verkamp <dverkamp@chromium.org>2019-10-03 15:42:56 -0700
committerCommit Bot <commit-bot@chromium.org>2019-10-08 01:57:20 +0000
commit04e9c03f03f4c5e479d13c5f318d3b89d784ad7f (patch)
treec11c3b71bee8f46f288bf2ac59f1f47f9db81142
parentbf67203f972215ce0119a1588ac900068c86fb33 (diff)
downloadcrosvm-04e9c03f03f4c5e479d13c5f318d3b89d784ad7f.tar
crosvm-04e9c03f03f4c5e479d13c5f318d3b89d784ad7f.tar.gz
crosvm-04e9c03f03f4c5e479d13c5f318d3b89d784ad7f.tar.bz2
crosvm-04e9c03f03f4c5e479d13c5f318d3b89d784ad7f.tar.lz
crosvm-04e9c03f03f4c5e479d13c5f318d3b89d784ad7f.tar.xz
crosvm-04e9c03f03f4c5e479d13c5f318d3b89d784ad7f.tar.zst
crosvm-04e9c03f03f4c5e479d13c5f318d3b89d784ad7f.zip
devices: ac97: fix interrupt triggering logic
Do not write to the irq_evt eventfd when interrupt_high is false; the
value written to the eventfd is ignored, so despite the '0' in the call,
this would re-trigger the interrupt even when it should not have been
asserted.  Since ac97 is a PCI device, its interrupt is level triggered,
and re-asserting it on EOI is handled by the irq_resample_thread code.

BUG=None
TEST=`aplay /dev/urandom` from Crostini on nami

Change-Id: I6ad8e40b818e0495ad58b6902d88dd61103aed9d
Signed-off-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1838762
Reviewed-by: Dylan Reid <dgreid@chromium.org>
Reviewed-by: Chih-Yang Hsia <paulhsia@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
-rw-r--r--devices/src/pci/ac97_bus_master.rs6
1 files changed, 0 insertions, 6 deletions
diff --git a/devices/src/pci/ac97_bus_master.rs b/devices/src/pci/ac97_bus_master.rs
index 7cfdc4a..12a4f74 100644
--- a/devices/src/pci/ac97_bus_master.rs
+++ b/devices/src/pci/ac97_bus_master.rs
@@ -772,12 +772,6 @@ fn update_sr(regs: &mut Ac97BusMasterRegs, func: Ac97Function, val: u16) {
         }
     } else {
         regs.glob_sta &= !int_mask;
-        if regs.glob_sta & (GS_PIINT | GS_POINT | GS_MINT) == 0 {
-            if let Some(irq_evt) = regs.irq_evt.as_ref() {
-                // Ignore write failure, nothing can be done about it from here.
-                let _ = irq_evt.write(0);
-            }
-        }
     }
 }