blob: 841668a60fcd4dae5d16e6ff3c011012949b51ef [file] [log] [blame]
use linux_raw_sys::general::membarrier_cmd;
/// A command for use with [`membarrier`] and [`membarrier_cpu`].
///
/// For `MEMBARRIER_CMD_QUERY`, see [`membarrier_query`].
///
/// [`membarrier`]: crate::process::membarrier
/// [`membarrier_cpu`]: crate::process::membarrier_cpu
/// [`membarrier_query`]: crate::process::membarrier_query
#[derive(Copy, Clone, Eq, PartialEq, Debug)]
#[repr(u32)]
pub enum MembarrierCommand {
/// `MEMBARRIER_CMD_GLOBAL`
#[doc(alias = "Shared")]
#[doc(alias = "MEMBARRIER_CMD_SHARED")]
Global = membarrier_cmd::MEMBARRIER_CMD_GLOBAL as _,
/// `MEMBARRIER_CMD_GLOBAL_EXPEDITED`
GlobalExpedited = membarrier_cmd::MEMBARRIER_CMD_GLOBAL_EXPEDITED as _,
/// `MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED`
RegisterGlobalExpedited = membarrier_cmd::MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED as _,
/// `MEMBARRIER_CMD_PRIVATE_EXPEDITED`
PrivateExpedited = membarrier_cmd::MEMBARRIER_CMD_PRIVATE_EXPEDITED as _,
/// `MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED`
RegisterPrivateExpedited = membarrier_cmd::MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED as _,
/// `MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE`
PrivateExpeditedSyncCore = membarrier_cmd::MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE as _,
/// `MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE`
RegisterPrivateExpeditedSyncCore =
membarrier_cmd::MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE as _,
/// `MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ` (since Linux 5.10)
PrivateExpeditedRseq = membarrier_cmd::MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ as _,
/// `MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ` (since Linux 5.10)
RegisterPrivateExpeditedRseq =
membarrier_cmd::MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ as _,
}
/// A resource value for use with [`getrlimit`], [`setrlimit`], and
/// [`prlimit`].
///
/// [`getrlimit`]: crate::process::getrlimit
/// [`setrlimit`]: crate::process::setrlimit
/// [`prlimit`]: crate::process::prlimit
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[repr(u32)]
pub enum Resource {
/// `RLIMIT_CPU`
Cpu = linux_raw_sys::general::RLIMIT_CPU,
/// `RLIMIT_FSIZE`
Fsize = linux_raw_sys::general::RLIMIT_FSIZE,
/// `RLIMIT_DATA`
Data = linux_raw_sys::general::RLIMIT_DATA,
/// `RLIMIT_STACK`
Stack = linux_raw_sys::general::RLIMIT_STACK,
/// `RLIMIT_CORE`
Core = linux_raw_sys::general::RLIMIT_CORE,
/// `RLIMIT_RSS`
Rss = linux_raw_sys::general::RLIMIT_RSS,
/// `RLIMIT_NPROC`
Nproc = linux_raw_sys::general::RLIMIT_NPROC,
/// `RLIMIT_NOFILE`
Nofile = linux_raw_sys::general::RLIMIT_NOFILE,
/// `RLIMIT_MEMLOCK`
Memlock = linux_raw_sys::general::RLIMIT_MEMLOCK,
/// `RLIMIT_AS`
As = linux_raw_sys::general::RLIMIT_AS,
/// `RLIMIT_LOCKS`
Locks = linux_raw_sys::general::RLIMIT_LOCKS,
/// `RLIMIT_SIGPENDING`
Sigpending = linux_raw_sys::general::RLIMIT_SIGPENDING,
/// `RLIMIT_MSGQUEUE`
Msgqueue = linux_raw_sys::general::RLIMIT_MSGQUEUE,
/// `RLIMIT_NICE`
Nice = linux_raw_sys::general::RLIMIT_NICE,
/// `RLIMIT_RTPRIO`
Rtprio = linux_raw_sys::general::RLIMIT_RTPRIO,
/// `RLIMIT_RTTIME`
Rttime = linux_raw_sys::general::RLIMIT_RTTIME,
}
/// A CPU identifier as a raw integer.
pub type RawCpuid = u32;
#[repr(C)]
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub(crate) struct RawCpuSet {
#[cfg(all(target_pointer_width = "32", not(target_arch = "x86_64")))]
pub(crate) bits: [u32; 32],
#[cfg(not(all(target_pointer_width = "32", not(target_arch = "x86_64"))))]
pub(crate) bits: [u64; 16],
}
#[inline]
pub(crate) fn raw_cpu_set_new() -> RawCpuSet {
#[cfg(all(target_pointer_width = "32", not(target_arch = "x86_64")))]
{
RawCpuSet { bits: [0; 32] }
}
#[cfg(not(all(target_pointer_width = "32", not(target_arch = "x86_64"))))]
{
RawCpuSet { bits: [0; 16] }
}
}
pub(crate) const CPU_SETSIZE: usize = 8 * core::mem::size_of::<RawCpuSet>();