From 2344c958642eb7d6ebe8b038533b4a8f58d18b1b Mon Sep 17 00:00:00 2001 From: David Carlier Date: Sun, 2 Feb 2025 17:27:01 +0000 Subject: [PATCH] scx_utils: addressing #1282 concerns on 32 bits packing the value by high and low bits with an always even sized Vec. --- rust/scx_utils/src/gpu.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/rust/scx_utils/src/gpu.rs b/rust/scx_utils/src/gpu.rs index 7d8ab96c1..7ff0bde91 100644 --- a/rust/scx_utils/src/gpu.rs +++ b/rust/scx_utils/src/gpu.rs @@ -1,7 +1,7 @@ #![cfg(feature = "gpu-topology")] use crate::misc::read_file_usize; -use crate::{Cpumask, NR_CPUS_POSSIBLE}; +use crate::{Cpumask, NR_CPU_IDS}; use nvml_wrapper::bitmasks::InitFlags; use nvml_wrapper::enum_wrappers::device::Clock; use nvml_wrapper::Nvml; @@ -50,10 +50,13 @@ pub fn create_gpus() -> BTreeMap> { continue; }; - let cpu_mask = if let Ok(cpu_affinity) = nvidia_gpu.cpu_affinity(*NR_CPUS_POSSIBLE) { + let cpu_mask = if let Ok(cpu_affinity) = nvidia_gpu.cpu_affinity(*NR_CPU_IDS) { // Note: nvml returns it as an arch dependent array of integrals #[cfg(target_pointer_width = "32")] - let cpu_affinity = cpu_affinity.into_iter().map(|aff| aff as u64).collect(); + let cpu_affinity: Vec = cpu_affinity + .chunks_exact(2) + .map(|pair| (pair[1] as u64) << 32 | pair[0] as u64) + .collect(); Cpumask::from_vec(cpu_affinity) } else { Cpumask::new()