rustix/backend/libc/thread/
types.rs

1#[cfg(all(
2    any(freebsdlike, linux_kernel, target_os = "fuchsia"),
3    not(any(target_os = "espidf", target_os = "vita"))
4))]
5use crate::backend::c;
6
7/// A command for use with [`membarrier`] and [`membarrier_cpu`].
8///
9/// For `MEMBARRIER_CMD_QUERY`, see [`membarrier_query`].
10///
11/// [`membarrier`]: crate::thread::membarrier
12/// [`membarrier_cpu`]: crate::thread::membarrier_cpu
13/// [`membarrier_query`]: crate::thread::membarrier_query
14#[cfg(linux_kernel)]
15#[derive(Copy, Clone, Eq, PartialEq, Debug)]
16#[repr(u32)]
17#[non_exhaustive]
18pub enum MembarrierCommand {
19    /// `MEMBARRIER_CMD_GLOBAL`
20    #[doc(alias = "Shared")]
21    #[doc(alias = "MEMBARRIER_CMD_SHARED")]
22    Global = c::MEMBARRIER_CMD_GLOBAL as u32,
23    /// `MEMBARRIER_CMD_GLOBAL_EXPEDITED`
24    GlobalExpedited = c::MEMBARRIER_CMD_GLOBAL_EXPEDITED as u32,
25    /// `MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED`
26    RegisterGlobalExpedited = c::MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED as u32,
27    /// `MEMBARRIER_CMD_PRIVATE_EXPEDITED`
28    PrivateExpedited = c::MEMBARRIER_CMD_PRIVATE_EXPEDITED as u32,
29    /// `MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED`
30    RegisterPrivateExpedited = c::MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED as u32,
31    /// `MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE`
32    PrivateExpeditedSyncCore = c::MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE as u32,
33    /// `MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE`
34    RegisterPrivateExpeditedSyncCore =
35        c::MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE as u32,
36    /// `MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ` (since Linux 5.10)
37    PrivateExpeditedRseq = c::MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ as u32,
38    /// `MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ` (since Linux 5.10)
39    RegisterPrivateExpeditedRseq = c::MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ as u32,
40}
41
42/// A CPU identifier as a raw integer.
43#[cfg(linux_kernel)]
44pub type RawCpuid = u32;
45
46#[cfg(any(linux_kernel, target_os = "fuchsia"))]
47pub(crate) type RawCpuSet = c::cpu_set_t;
48#[cfg(freebsdlike)]
49pub(crate) type RawCpuSet = c::cpuset_t;
50
51#[cfg(any(freebsdlike, linux_kernel, target_os = "fuchsia"))]
52#[inline]
53pub(crate) fn raw_cpu_set_new() -> RawCpuSet {
54    let mut set = unsafe { core::mem::zeroed() };
55    super::cpu_set::CPU_ZERO(&mut set);
56    set
57}
58
59#[cfg(any(freebsdlike, linux_kernel, target_os = "fuchsia"))]
60pub(crate) const CPU_SETSIZE: usize = c::CPU_SETSIZE as usize;