devices/ac97: keep irq event descriptors
Fix to preserve ac97 event/resample events handles for minijail.
Broken by crrev/c/3143586
BUG=b:198773299
TEST=arcvm audio access, record/play.
Change-Id: I34d85a9f9355257c98e0c5c28e87d1e289117ed0
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3144532
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-by: Kazuhiro Inaba <kinaba@chromium.org>
Commit-Queue: Tomasz Jeznach <tjeznach@chromium.org>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
diff --git a/devices/src/pci/ac97.rs b/devices/src/pci/ac97.rs
index aad8db2..e03e918 100644
--- a/devices/src/pci/ac97.rs
+++ b/devices/src/pci/ac97.rs
@@ -7,7 +7,7 @@
use std::str::FromStr;
use audio_streams::shm_streams::{NullShmStreamSource, ShmStreamSource};
-use base::{error, Event, RawDescriptor};
+use base::{error, AsRawDescriptor, Event, RawDescriptor};
#[cfg(feature = "audio_cras")]
use libcras::{CrasClient, CrasClientType, CrasSocketType, CrasSysError};
use remain::sorted;
@@ -373,11 +373,17 @@
}
fn keep_rds(&self) -> Vec<RawDescriptor> {
- if let Some(server_fds) = self.bus_master.keep_rds() {
- server_fds
- } else {
- Vec::new()
+ let mut rds = Vec::new();
+ if let Some(mut server_fds) = self.bus_master.keep_rds() {
+ rds.append(&mut server_fds);
}
+ if let Some(irq_evt) = &self.irq_evt {
+ rds.push(irq_evt.as_raw_descriptor());
+ }
+ if let Some(irq_resample_evt) = &self.irq_resample_evt {
+ rds.push(irq_resample_evt.as_raw_descriptor());
+ }
+ rds
}
fn read_bar(&mut self, addr: u64, data: &mut [u8]) {