rustix/backend/linux_raw/process/
types.rs

1use linux_raw_sys::general::membarrier_cmd;
2
3/// A command for use with [`membarrier`] and [`membarrier_cpu`].
4///
5/// For `MEMBARRIER_CMD_QUERY`, see [`membarrier_query`].
6///
7/// [`membarrier`]: crate::process::membarrier
8/// [`membarrier_cpu`]: crate::process::membarrier_cpu
9/// [`membarrier_query`]: crate::process::membarrier_query
10#[derive(Copy, Clone, Eq, PartialEq, Debug)]
11#[repr(u32)]
12pub enum MembarrierCommand {
13    /// `MEMBARRIER_CMD_GLOBAL`
14    #[doc(alias = "Shared")]
15    #[doc(alias = "MEMBARRIER_CMD_SHARED")]
16    Global = membarrier_cmd::MEMBARRIER_CMD_GLOBAL as _,
17    /// `MEMBARRIER_CMD_GLOBAL_EXPEDITED`
18    GlobalExpedited = membarrier_cmd::MEMBARRIER_CMD_GLOBAL_EXPEDITED as _,
19    /// `MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED`
20    RegisterGlobalExpedited = membarrier_cmd::MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED as _,
21    /// `MEMBARRIER_CMD_PRIVATE_EXPEDITED`
22    PrivateExpedited = membarrier_cmd::MEMBARRIER_CMD_PRIVATE_EXPEDITED as _,
23    /// `MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED`
24    RegisterPrivateExpedited = membarrier_cmd::MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED as _,
25    /// `MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE`
26    PrivateExpeditedSyncCore = membarrier_cmd::MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE as _,
27    /// `MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE`
28    RegisterPrivateExpeditedSyncCore =
29        membarrier_cmd::MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE as _,
30    /// `MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ` (since Linux 5.10)
31    PrivateExpeditedRseq = membarrier_cmd::MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ as _,
32    /// `MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ` (since Linux 5.10)
33    RegisterPrivateExpeditedRseq =
34        membarrier_cmd::MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ as _,
35}
36
37/// A resource value for use with [`getrlimit`], [`setrlimit`], and
38/// [`prlimit`].
39///
40/// [`getrlimit`]: crate::process::getrlimit
41/// [`setrlimit`]: crate::process::setrlimit
42/// [`prlimit`]: crate::process::prlimit
43#[derive(Copy, Clone, Debug, Eq, PartialEq)]
44#[repr(u32)]
45pub enum Resource {
46    /// `RLIMIT_CPU`
47    Cpu = linux_raw_sys::general::RLIMIT_CPU,
48    /// `RLIMIT_FSIZE`
49    Fsize = linux_raw_sys::general::RLIMIT_FSIZE,
50    /// `RLIMIT_DATA`
51    Data = linux_raw_sys::general::RLIMIT_DATA,
52    /// `RLIMIT_STACK`
53    Stack = linux_raw_sys::general::RLIMIT_STACK,
54    /// `RLIMIT_CORE`
55    Core = linux_raw_sys::general::RLIMIT_CORE,
56    /// `RLIMIT_RSS`
57    Rss = linux_raw_sys::general::RLIMIT_RSS,
58    /// `RLIMIT_NPROC`
59    Nproc = linux_raw_sys::general::RLIMIT_NPROC,
60    /// `RLIMIT_NOFILE`
61    Nofile = linux_raw_sys::general::RLIMIT_NOFILE,
62    /// `RLIMIT_MEMLOCK`
63    Memlock = linux_raw_sys::general::RLIMIT_MEMLOCK,
64    /// `RLIMIT_AS`
65    As = linux_raw_sys::general::RLIMIT_AS,
66    /// `RLIMIT_LOCKS`
67    Locks = linux_raw_sys::general::RLIMIT_LOCKS,
68    /// `RLIMIT_SIGPENDING`
69    Sigpending = linux_raw_sys::general::RLIMIT_SIGPENDING,
70    /// `RLIMIT_MSGQUEUE`
71    Msgqueue = linux_raw_sys::general::RLIMIT_MSGQUEUE,
72    /// `RLIMIT_NICE`
73    Nice = linux_raw_sys::general::RLIMIT_NICE,
74    /// `RLIMIT_RTPRIO`
75    Rtprio = linux_raw_sys::general::RLIMIT_RTPRIO,
76    /// `RLIMIT_RTTIME`
77    Rttime = linux_raw_sys::general::RLIMIT_RTTIME,
78}
79
80/// A CPU identifier as a raw integer.
81pub type RawCpuid = u32;
82
83#[repr(C)]
84#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
85pub(crate) struct RawCpuSet {
86    #[cfg(all(target_pointer_width = "32", not(target_arch = "x86_64")))]
87    pub(crate) bits: [u32; 32],
88    #[cfg(not(all(target_pointer_width = "32", not(target_arch = "x86_64"))))]
89    pub(crate) bits: [u64; 16],
90}
91
92#[inline]
93pub(crate) fn raw_cpu_set_new() -> RawCpuSet {
94    #[cfg(all(target_pointer_width = "32", not(target_arch = "x86_64")))]
95    {
96        RawCpuSet { bits: [0; 32] }
97    }
98    #[cfg(not(all(target_pointer_width = "32", not(target_arch = "x86_64"))))]
99    {
100        RawCpuSet { bits: [0; 16] }
101    }
102}
103
104pub(crate) const CPU_SETSIZE: usize = 8 * core::mem::size_of::<RawCpuSet>();