From c1ebbd1ce86afce2995a31b0cc1205fae72425c3 Mon Sep 17 00:00:00 2001 From: "NGnius (Graham)" Date: Sat, 20 Jul 2024 18:06:50 -0400 Subject: [PATCH] Add setter validation for pp_dpm_* --- .../procbox/src/combo/amdgpu/pp_dpm_star.rs | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/crates/procbox/src/combo/amdgpu/pp_dpm_star.rs b/crates/procbox/src/combo/amdgpu/pp_dpm_star.rs index 48827dd..df6d5c9 100644 --- a/crates/procbox/src/combo/amdgpu/pp_dpm_star.rs +++ b/crates/procbox/src/combo/amdgpu/pp_dpm_star.rs @@ -1,5 +1,5 @@ use powerbox::primitives::{GetSet, ClockFrequency, Value, ValueMap, Selectable, SpacedList}; -use powerbox::{Power, PowerOp}; +use powerbox::{Power, PowerOp, RatifiedPower}; use sysfuss::SysEntityAttributesExt; use crate::gpu::{GpuPower, GpuPowerOp}; @@ -172,6 +172,34 @@ macro_rules! get_set_gen_impl { } } + impl RatifiedPower<$setter> for AmdGpu { + fn is_possible(&self, op: &$setter) -> bool { + if let Ok(val_map) = self.act($getter) { + let allowed: std::collections::HashSet<_> = val_map.0.keys().collect(); + op.0.iter().all(|key| allowed.contains(key)) + } else { + false + } + } + + fn clamp(&self, op: &mut $setter) -> bool { + if let Ok(val_map) = self.act($getter) { + let allowed: std::collections::HashSet<_> = val_map.0.keys().collect(); + let mut i = 0; + while i < op.0.len() { + if allowed.contains(&op.0[i]) { + i += 1; + } else { + op.0.remove(i); + } + } + true + } else { + false + } + } + } + impl GpuPower<$setter, ()> for AmdGpu {} impl core::convert::Into<$alias> for $setter {