diff --git a/lact-daemon/src/server/handler.rs b/lact-daemon/src/server/handler.rs index d1785bd..a9c71ff 100644 --- a/lact-daemon/src/server/handler.rs +++ b/lact-daemon/src/server/handler.rs @@ -173,16 +173,22 @@ impl<'a> Handler { } } - pub fn set_power_limit(&'a self, id: &str, limit: f64) -> anyhow::Result<()> { - self.controller_by_id(id)? + pub fn set_power_cap(&'a self, id: &str, maybe_cap: Option) -> anyhow::Result<()> { + let hw_mon = self + .controller_by_id(id)? .handle .hw_monitors .first() - .context("GPU has no hardware monitor")? - .set_power_cap(limit)?; + .context("GPU has no hardware monitor")?; + + let cap = match maybe_cap { + Some(cap) => cap, + None => hw_mon.get_power_cap_default()?, + }; + hw_mon.set_power_cap(cap)?; self.edit_gpu_config(id.to_owned(), |gpu_config| { - gpu_config.power_cap = Some(limit); + gpu_config.power_cap = maybe_cap; }) } diff --git a/lact-daemon/src/server/mod.rs b/lact-daemon/src/server/mod.rs index bf6b9fa..bc447ec 100644 --- a/lact-daemon/src/server/mod.rs +++ b/lact-daemon/src/server/mod.rs @@ -86,7 +86,7 @@ async fn handle_request<'a>(request: Request<'a>, handler: &'a Handler) -> anyho Request::SetFanControl { id, enabled } => { ok_response(handler.set_fan_control(id, enabled).await?) } - Request::SetPowerLimit { id, limit } => ok_response(handler.set_power_limit(id, limit)?), + Request::SetPowerCap { id, cap } => ok_response(handler.set_power_cap(id, cap)?), } } diff --git a/lact-schema/src/request.rs b/lact-schema/src/request.rs index 96e2573..4129c82 100644 --- a/lact-schema/src/request.rs +++ b/lact-schema/src/request.rs @@ -8,5 +8,5 @@ pub enum Request<'a> { DeviceInfo { id: &'a str }, DeviceStats { id: &'a str }, SetFanControl { id: &'a str, enabled: bool }, - SetPowerLimit { id: &'a str, limit: f64 }, + SetPowerCap { id: &'a str, cap: Option }, }