Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion rust/scx_arena/scx_arena/src/arenalib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,11 @@ impl<'a> ArenaLib<'a> {
);
}

let ptr = unsafe { std::mem::transmute::<u64, &mut [u64; MAX_CPU_SUPPORTED]>(args.bitmap) };
let ptr = unsafe {
&mut *std::ptr::with_exposed_provenance_mut::<[u64; 640]>(
args.bitmap.try_into().unwrap(),
)
};

let (valid_mask, _) = ptr.split_at_mut(mask.len());
valid_mask.clone_from_slice(mask);
Expand Down
4 changes: 3 additions & 1 deletion rust/scx_arena/selftests/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,9 @@ fn setup_topology_node(skel: &mut BpfSkel<'_>, mask: &[u64]) -> Result<()> {
);
}

let ptr = unsafe { std::mem::transmute::<u64, &mut [u64; 10]>(args.bitmap) };
let ptr = unsafe {
&mut *std::ptr::with_exposed_provenance_mut::<[u64; 10]>(args.bitmap.try_into().unwrap())
};

let (valid_mask, _) = ptr.split_at_mut(mask.len());
valid_mask.clone_from_slice(mask);
Expand Down
6 changes: 5 additions & 1 deletion scheds/rust/scx_wd40/src/load_balance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,8 @@ use crate::stats::DomainStats;
use crate::stats::NodeStats;
use crate::DomainGroup;

use crate::types::dom_ctx;

const DEFAULT_WEIGHT: f64 = bpf_intf::consts_LB_DEFAULT_WEIGHT as f64;
const RAVG_FRAC_BITS: u32 = bpf_intf::ravg_consts_RAVG_FRAC_BITS;

Expand Down Expand Up @@ -629,7 +631,9 @@ impl<'a, 'b> LoadBalancer<'a, 'b> {

let types::topo_level(index) = types::topo_level::TOPO_LLC;
let ptr = self.skel.maps.bss_data.as_ref().unwrap().topo_nodes[index as usize][dom.id];
let dom_ctx = unsafe { std::mem::transmute::<u64, &mut types::dom_ctx>(ptr) };
let dom_ctx = unsafe {
&mut *std::ptr::with_exposed_provenance_mut::<dom_ctx>(ptr.try_into().unwrap())
};
let active_tasks = &mut dom_ctx.active_tasks;

let (mut ridx, widx) = (active_tasks.read_idx, active_tasks.write_idx);
Expand Down
10 changes: 8 additions & 2 deletions scheds/rust/scx_wd40/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ use scx_utils::Topology;
use scx_utils::UserExitInfo;
use scx_utils::NR_CPU_IDS;

use crate::types::dom_ctx;

const SCHEDULER_NAME: &str = "scx_wd40";
const MAX_DOMS: usize = bpf_intf::consts_MAX_DOMS as usize;
const MAX_CPUS: usize = bpf_intf::consts_MAX_CPUS as usize;
Expand Down Expand Up @@ -477,7 +479,9 @@ impl<'a> Scheduler<'a> {
for dom in node_domains.iter() {
// XXX Remove this by using the topo node's cpumask.
let ptr = bss_data.topo_nodes[index as usize][dom.id()];
let domc = unsafe { std::mem::transmute::<u64, &mut types::dom_ctx>(ptr) };
let domc = unsafe {
&mut *std::ptr::with_exposed_provenance_mut::<dom_ctx>(ptr.try_into().unwrap())
};
update_bpf_mask(domc.cpumask, &dom.mask())?;

bss_data.dom_numa_id_map[dom.id()] =
Expand All @@ -495,7 +499,9 @@ impl<'a> Scheduler<'a> {
let mut ctx = dom.ctx.lock().unwrap();

let ptr = skel.maps.bss_data.as_mut().unwrap().topo_nodes[index as usize][*id];
let domc = unsafe { std::mem::transmute::<u64, &mut types::dom_ctx>(ptr) };
let domc = unsafe {
&mut *std::ptr::with_exposed_provenance_mut::<dom_ctx>(ptr.try_into().unwrap())
};
*ctx = Some(domc);
}

Expand Down