#![allow(unsafe_code)]
use crate::process::Cpuid;
use crate::{backend, io};
pub use backend::process::types::MembarrierCommand;
#[cfg(linux_kernel)]
bitflags::bitflags! {
pub struct MembarrierQuery: u32 {
#[doc(alias = "SHARED")]
#[doc(alias = "MEMBARRIER_CMD_SHARED")]
const GLOBAL = MembarrierCommand::Global as _;
const GLOBAL_EXPEDITED = MembarrierCommand::GlobalExpedited as _;
const REGISTER_GLOBAL_EXPEDITED = MembarrierCommand::RegisterGlobalExpedited as _;
const PRIVATE_EXPEDITED = MembarrierCommand::PrivateExpedited as _;
const REGISTER_PRIVATE_EXPEDITED = MembarrierCommand::RegisterPrivateExpedited as _;
const PRIVATE_EXPEDITED_SYNC_CORE = MembarrierCommand::PrivateExpeditedSyncCore as _;
const REGISTER_PRIVATE_EXPEDITED_SYNC_CORE = MembarrierCommand::RegisterPrivateExpeditedSyncCore as _;
const PRIVATE_EXPEDITED_RSEQ = MembarrierCommand::PrivateExpeditedRseq as _;
const REGISTER_PRIVATE_EXPEDITED_RSEQ = MembarrierCommand::RegisterPrivateExpeditedRseq as _;
}
}
#[cfg(linux_kernel)]
impl MembarrierQuery {
#[inline]
pub fn contains_command(self, cmd: MembarrierCommand) -> bool {
self.contains(unsafe { Self::from_bits_unchecked(cmd as _) })
}
}
#[inline]
#[doc(alias = "MEMBARRIER_CMD_QUERY")]
pub fn membarrier_query() -> MembarrierQuery {
backend::process::syscalls::membarrier_query()
}
#[inline]
pub fn membarrier(cmd: MembarrierCommand) -> io::Result<()> {
backend::process::syscalls::membarrier(cmd)
}
#[inline]
pub fn membarrier_cpu(cmd: MembarrierCommand, cpu: Cpuid) -> io::Result<()> {
backend::process::syscalls::membarrier_cpu(cmd, cpu)
}