Merge "Make the vm_payload API look more NDK-like"
diff --git a/virtualizationservice/aidl/android/system/virtualizationservice/DeathReason.aidl b/virtualizationservice/aidl/android/system/virtualizationservice/DeathReason.aidl
index dceabf1..416eb7b 100644
--- a/virtualizationservice/aidl/android/system/virtualizationservice/DeathReason.aidl
+++ b/virtualizationservice/aidl/android/system/virtualizationservice/DeathReason.aidl
@@ -54,4 +54,6 @@
MICRODROID_UNKNOWN_RUNTIME_ERROR = 15,
/** The VM killed due to hangup */
HANGUP = 16,
+ /** The VCPU stalled */
+ WATCHDOG_REBOOT = 17,
}
diff --git a/virtualizationservice/src/aidl.rs b/virtualizationservice/src/aidl.rs
index 563fab0..973bfa3 100644
--- a/virtualizationservice/src/aidl.rs
+++ b/virtualizationservice/src/aidl.rs
@@ -63,7 +63,7 @@
use std::sync::{Arc, Mutex, Weak};
use tombstoned_client::{TombstonedConnection, DebuggerdDumpType};
use vmconfig::VmConfig;
-use vsock::{SockAddr, VsockListener, VsockStream};
+use vsock::{VsockListener, VsockStream};
use zip::ZipArchive;
pub const BINDER_SERVICE_IDENTIFIER: &str = "android.system.virtualizationservice";
@@ -268,7 +268,7 @@
}
fn handle_tombstone(stream: &mut VsockStream) -> Result<()> {
- if let Ok(SockAddr::Vsock(addr)) = stream.peer_addr() {
+ if let Ok(addr) = stream.peer_addr() {
info!("Vsock Stream connected to cid={} for tombstones", addr.cid());
}
let tb_connection =
@@ -499,7 +499,7 @@
}
Ok(s) => s,
};
- if let Ok(SockAddr::Vsock(addr)) = stream.peer_addr() {
+ if let Ok(addr) = stream.peer_addr() {
let cid = addr.cid();
let port = addr.port();
info!("payload stream connected from cid={}, port={}", cid, port);
diff --git a/virtualizationservice/src/crosvm.rs b/virtualizationservice/src/crosvm.rs
index ff1116a..54cdeb6 100644
--- a/virtualizationservice/src/crosvm.rs
+++ b/virtualizationservice/src/crosvm.rs
@@ -58,6 +58,8 @@
const CROSVM_REBOOT_STATUS: i32 = 32;
/// The exit status which crosvm returns when it crashes due to an error.
const CROSVM_CRASH_STATUS: i32 = 33;
+/// The exit status which crosvm returns when vcpu is stalled.
+const CROSVM_WATCHDOG_REBOOT_STATUS: i32 = 36;
lazy_static! {
/// If the VM doesn't move to the Started state within this amount time, a hang-up error is
@@ -247,7 +249,14 @@
let result = child.wait();
match &result {
Err(e) => error!("Error waiting for crosvm({}) instance to die: {}", child.id(), e),
- Ok(status) => info!("crosvm({}) exited with status {}", child.id(), status),
+ Ok(status) => {
+ info!("crosvm({}) exited with status {}", child.id(), status);
+ if let Some(exit_status_code) = status.code() {
+ if exit_status_code == CROSVM_WATCHDOG_REBOOT_STATUS {
+ info!("detected vcpu stall on crosvm");
+ }
+ }
+ }
}
let mut vm_state = self.vm_state.lock().unwrap();
@@ -421,6 +430,7 @@
Some(CROSVM_ERROR_STATUS) => DeathReason::ERROR,
Some(CROSVM_REBOOT_STATUS) => DeathReason::REBOOT,
Some(CROSVM_CRASH_STATUS) => DeathReason::CRASH,
+ Some(CROSVM_WATCHDOG_REBOOT_STATUS) => DeathReason::WATCHDOG_REBOOT,
Some(_) => DeathReason::UNKNOWN,
}
} else {