From 0358c9c775cc046f4a757ad9d3fe335cc959fe64 Mon Sep 17 00:00:00 2001 From: Ariadne Conill Date: Tue, 13 Aug 2024 01:22:05 -0700 Subject: [PATCH] fix(power-trap-eacces): gracefully handle hypercall errors in power management (#325) * daemon: reenable built-in power management policy * xenruntime: gracefully handle power management errors --- crates/daemon/src/lib.rs | 12 ++++++------ crates/runtime/src/power.rs | 11 +++++++++-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/crates/daemon/src/lib.rs b/crates/daemon/src/lib.rs index 1e9f85b..9da5b6a 100644 --- a/crates/daemon/src/lib.rs +++ b/crates/daemon/src/lib.rs @@ -141,12 +141,12 @@ impl Daemon { // TODO: Create a way of abstracting early init tasks in kratad. // TODO: Make initial power management policy configurable. - // FIXME: Power management hypercalls fail when running as an L1 hypervisor. - // let power = runtime.power_management_context().await?; - // power.set_smt_policy(true).await?; - // power - // .set_scheduler_policy("performance".to_string()) - // .await?; + let power = runtime.power_management_context().await?; + power.set_smt_policy(true).await?; + power + .set_scheduler_policy("performance".to_string()) + .await?; + info!("power management initialized"); info!("krata daemon initialized"); Ok(Self { diff --git a/crates/runtime/src/power.rs b/crates/runtime/src/power.rs index 40f3236..6dafbde 100644 --- a/crates/runtime/src/power.rs +++ b/crates/runtime/src/power.rs @@ -1,5 +1,6 @@ use anyhow::Result; use indexmap::IndexMap; +use log::info; use xencall::sys::{CpuId, SysctlCputopo}; use crate::RuntimeContext; @@ -151,7 +152,10 @@ impl PowerManagementContext { .xen .call .set_turbo_mode(CpuId::All, enable) - .await?; + .await + .unwrap_or_else(|error| { + info!("non-fatal error while setting SMT policy: {:?}", error); + }); Ok(()) } @@ -161,7 +165,10 @@ impl PowerManagementContext { .xen .call .set_cpufreq_gov(CpuId::All, policy) - .await?; + .await + .unwrap_or_else(|error| { + info!("non-fatal error while setting scheduler policy: {:?}", error); + }); Ok(()) } }