]> git.proxmox.com Git - rustc.git/blame - vendor/rustix/src/backend/linux_raw/process/cpu_set.rs
New upstream version 1.69.0+dfsg1
[rustc.git] / vendor / rustix / src / backend / linux_raw / process / cpu_set.rs
CommitLineData
064997fb
FG
1#![allow(non_snake_case)]
2
3use super::types::RawCpuSet;
4use core::mem::size_of_val;
5
6#[inline]
7pub(crate) fn CPU_SET(cpu: usize, cpuset: &mut RawCpuSet) {
8 let size_in_bits = 8 * size_of_val(&cpuset.bits[0]); // 32, 64 etc
9 let (idx, offset) = (cpu / size_in_bits, cpu % size_in_bits);
10 cpuset.bits[idx] |= 1 << offset
11}
12
13#[inline]
14pub(crate) fn CPU_ZERO(cpuset: &mut RawCpuSet) {
15 // TODO: With, Rust 1.50, use `cpuset.bits.fill(0)` instead.
16 for element in &mut cpuset.bits {
17 *element = 0;
18 }
19}
20
21#[inline]
22pub(crate) fn CPU_CLR(cpu: usize, cpuset: &mut RawCpuSet) {
23 let size_in_bits = 8 * size_of_val(&cpuset.bits[0]); // 32, 64 etc
24 let (idx, offset) = (cpu / size_in_bits, cpu % size_in_bits);
25 cpuset.bits[idx] &= !(1 << offset)
26}
27
28#[inline]
29pub(crate) fn CPU_ISSET(cpu: usize, cpuset: &RawCpuSet) -> bool {
30 let size_in_bits = 8 * size_of_val(&cpuset.bits[0]);
31 let (idx, offset) = (cpu / size_in_bits, cpu % size_in_bits);
32 (cpuset.bits[idx] & (1 << offset)) != 0
33}
34
35#[inline]
36pub(crate) fn CPU_COUNT_S(size_in_bytes: usize, cpuset: &RawCpuSet) -> u32 {
37 let size_of_mask = size_of_val(&cpuset.bits[0]);
38 let idx = size_in_bytes / size_of_mask;
39 cpuset.bits[..idx]
40 .iter()
41 .fold(0, |acc, i| acc + i.count_ones())
42}
43
44#[inline]
45pub(crate) fn CPU_COUNT(cpuset: &RawCpuSet) -> u32 {
46 CPU_COUNT_S(core::mem::size_of::<RawCpuSet>(), cpuset)
47}