Merge "Add assignable devices to vm info" into main
diff --git a/virtualizationservice/src/aidl.rs b/virtualizationservice/src/aidl.rs
index 2e667d4..dab5e86 100644
--- a/virtualizationservice/src/aidl.rs
+++ b/virtualizationservice/src/aidl.rs
@@ -42,7 +42,7 @@
use std::io::{Read, Write};
use std::os::unix::fs::PermissionsExt;
use std::os::unix::raw::{pid_t, uid_t};
-use std::path::PathBuf;
+use std::path::{Path, PathBuf};
use std::sync::{Arc, Mutex, Weak};
use tombstoned_client::{DebuggerdDumpType, TombstonedConnection};
use vsock::{VsockListener, VsockStream};
@@ -177,10 +177,12 @@
check_use_custom_virtual_machine()?;
// TODO(b/291191362): read VM DTBO to find assignable devices.
- Ok(vec![AssignableDevice {
- kind: "eh".to_owned(),
- node: "/sys/bus/platform/devices/16d00000.eh".to_owned(),
- }])
+ let mut devices = Vec::new();
+ let eh_path = "/sys/bus/platform/devices/16d00000.eh";
+ if Path::new(eh_path).exists() {
+ devices.push(AssignableDevice { kind: "eh".to_owned(), node: eh_path.to_owned() });
+ }
+ Ok(devices)
}
fn bindDevicesToVfioDriver(
diff --git a/virtualizationservice/vfio_handler/src/aidl.rs b/virtualizationservice/vfio_handler/src/aidl.rs
index f082aba..9952496 100644
--- a/virtualizationservice/vfio_handler/src/aidl.rs
+++ b/virtualizationservice/vfio_handler/src/aidl.rs
@@ -132,12 +132,15 @@
Some(format!("invalid filename {device:?}")),
));
};
- write(path.join("driver/unbind"), device_str.as_bytes()).map_err(|e| {
- Status::new_exception_str(
- ExceptionCode::SERVICE_SPECIFIC,
- Some(format!("could not unbind {device_str}: {e:?}")),
- )
- })?;
+ let unbind_path = path.join("driver/unbind");
+ if unbind_path.exists() {
+ write(&unbind_path, device_str.as_bytes()).map_err(|e| {
+ Status::new_exception_str(
+ ExceptionCode::SERVICE_SPECIFIC,
+ Some(format!("could not unbind {device_str}: {e:?}")),
+ )
+ })?;
+ }
// bind to VFIO
write(path.join("driver_override"), b"vfio-platform").map_err(|e| {