• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use 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)]
12 pub 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)]
45 pub 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.
81 pub type RawCpuid = u32;
82 
83 #[repr(C)]
84 #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
85 pub(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]
raw_cpu_set_new() -> RawCpuSet93 pub(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 
104 pub(crate) const CPU_SETSIZE: usize = 8 * core::mem::size_of::<RawCpuSet>();
105