diff options
author | Sonny Rao <sonnyrao@chromium.org> | 2018-03-27 17:12:58 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-03-29 13:32:59 -0700 |
commit | 6ce158fb86b034c8a12bee4d65baba452ef42d6a (patch) | |
tree | d48c6a77d23078fd685bb42cb554a479e95a8c51 /kvm/src/lib.rs | |
parent | 62a4063aa6c28d1f73e93fd0e7da2135d4d46d02 (diff) | |
download | crosvm-6ce158fb86b034c8a12bee4d65baba452ef42d6a.tar crosvm-6ce158fb86b034c8a12bee4d65baba452ef42d6a.tar.gz crosvm-6ce158fb86b034c8a12bee4d65baba452ef42d6a.tar.bz2 crosvm-6ce158fb86b034c8a12bee4d65baba452ef42d6a.tar.lz crosvm-6ce158fb86b034c8a12bee4d65baba452ef42d6a.tar.xz crosvm-6ce158fb86b034c8a12bee4d65baba452ef42d6a.tar.zst crosvm-6ce158fb86b034c8a12bee4d65baba452ef42d6a.zip |
crosvm: support VM shutdown via SystemEvent
ARM systems don't have an exit event fd like x86, instead one of the Vcpus will exit with the SystemEvent reason and put a code into the kvm run union of either shutdown, reboot, or crash. We currently don't handle reboot or crash differently but can do so in the future. BUG=chromium:797868 TEST=./build_test passes on all architectures TEST=crosvm runs on kevin - manually test shutdown via maitred Change-Id: I455cbe1ac653f61a1e9eae1ce22922d14cff4e3c Reviewed-on: https://chromium-review.googlesource.com/982531 Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com> Tested-by: Sonny Rao <sonnyrao@chromium.org> Reviewed-by: Dylan Reid <dgreid@chromium.org>
Diffstat (limited to 'kvm/src/lib.rs')
-rw-r--r-- | kvm/src/lib.rs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/kvm/src/lib.rs b/kvm/src/lib.rs index de938b6..04810b2 100644 --- a/kvm/src/lib.rs +++ b/kvm/src/lib.rs @@ -696,7 +696,9 @@ pub enum VcpuExit<'a> { Watchdog, S390Tsch, Epr, - SystemEvent, + /// The cpu triggered a system level event which is specified by the type field. + /// The possible events are shutdown, reset, or crash. + SystemEvent(u32 /* event_type*/, u64 /* flags */), } /// A wrapper around creating and using a VCPU. @@ -803,7 +805,13 @@ impl Vcpu { KVM_EXIT_WATCHDOG => Ok(VcpuExit::Watchdog), KVM_EXIT_S390_TSCH => Ok(VcpuExit::S390Tsch), KVM_EXIT_EPR => Ok(VcpuExit::Epr), - KVM_EXIT_SYSTEM_EVENT => Ok(VcpuExit::SystemEvent), + KVM_EXIT_SYSTEM_EVENT => { + // Safe because we know the exit reason told us this union + // field is valid + let event_type = unsafe { run.__bindgen_anon_1.system_event.type_ }; + let event_flags = unsafe { run.__bindgen_anon_1.system_event.flags }; + Ok(VcpuExit::SystemEvent(event_type, event_flags)) + }, r => panic!("unknown kvm exit reason: {}", r), } } else { |