From 57a1ecc59dd0c3c73b730969930ddce165ecf51c Mon Sep 17 00:00:00 2001 From: Sergio Lopez Date: Fri, 4 Apr 2025 06:59:16 -0400 Subject: [PATCH] vmm/linux/vstate: support KVM SystemEvents On aarch64, we receive the shutdown/reset signals as KVM SystemEvents. Let's identify them properly to avoid printing an error on exit. Signed-off-by: Sergio Lopez --- src/vmm/src/linux/vstate.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/vmm/src/linux/vstate.rs b/src/vmm/src/linux/vstate.rs index 462d6e364..0e25478c2 100644 --- a/src/vmm/src/linux/vstate.rs +++ b/src/vmm/src/linux/vstate.rs @@ -40,7 +40,9 @@ use kvm_bindings::{ KVM_CLOCK_TSC_STABLE, KVM_IRQCHIP_IOAPIC, KVM_IRQCHIP_PIC_MASTER, KVM_IRQCHIP_PIC_SLAVE, KVM_MAX_CPUID_ENTRIES, }; -use kvm_bindings::{kvm_userspace_memory_region, KVM_API_VERSION}; +use kvm_bindings::{ + kvm_userspace_memory_region, KVM_API_VERSION, KVM_SYSTEM_EVENT_RESET, KVM_SYSTEM_EVENT_SHUTDOWN, +}; use kvm_ioctls::*; use utils::eventfd::EventFd; use utils::signal::{register_signal_handler, sigrtmin, Killable}; @@ -1129,6 +1131,14 @@ impl Vcpu { error!("Received KVM_EXIT_INTERNAL_ERROR signal"); Err(Error::VcpuUnhandledKvmExit) } + VcpuExit::SystemEvent(event, _reason) => { + match event { + KVM_SYSTEM_EVENT_SHUTDOWN => info!("Received KVM_SYSTEM_EVENT_SHUTDOWN"), + KVM_SYSTEM_EVENT_RESET => info!("Received KVM_SYSTEM_EVENT_RESET"), + _ => error!("Received an unexpected System Event: {event}"), + } + Ok(VcpuEmulation::Stopped) + } r => { // TODO: Are we sure we want to finish running a vcpu upon // receiving a vm exit that is not necessarily an error?