use crate::thread::Cpuid;
use crate::{backend, io};
pub use backend::thread::types::MembarrierCommand;
#[cfg(linux_kernel)]
bitflags::bitflags! {
#[repr(transparent)]
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
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 _;
const _ = !0;
}
}
#[cfg(linux_kernel)]
impl MembarrierQuery {
#[inline]
pub fn contains_command(self, cmd: MembarrierCommand) -> bool {
self.contains(Self::from_bits_retain(cmd as _))
}
}
#[inline]
#[doc(alias = "MEMBARRIER_CMD_QUERY")]
pub fn membarrier_query() -> MembarrierQuery {
backend::thread::syscalls::membarrier_query()
}
#[inline]
pub fn membarrier(cmd: MembarrierCommand) -> io::Result<()> {
backend::thread::syscalls::membarrier(cmd)
}
#[inline]
pub fn membarrier_cpu(cmd: MembarrierCommand, cpu: Cpuid) -> io::Result<()> {
backend::thread::syscalls::membarrier_cpu(cmd, cpu)
}