#![cfg_attr(not(test), no_std)]
#![doc = include_str!("../README.md")]
#[cfg(any(test, doctest))]
extern crate std;
mod base;
#[cfg(feature = "lock_api")]
mod raw;
mod rwlock;
use ax_kernel_guard::{NoOp, NoPreempt, NoPreemptIrqSave};
#[cfg(feature = "lockdep")]
pub mod lockdep;
#[cfg(feature = "lock_api")]
pub use self::raw::{BaseRawSpinLock, RawSpinNoIrq};
pub use self::{
base::{BaseSpinLock, BaseSpinLockGuard},
rwlock::{BaseSpinRwLock, BaseSpinRwLockReadGuard, BaseSpinRwLockWriteGuard},
};
pub fn set_lockdep_trace_enabled(enabled: bool) {
#[cfg(feature = "lockdep")]
{
ax_lockdep::set_trace_enabled(enabled);
}
#[cfg(not(feature = "lockdep"))]
{
let _ = enabled;
}
}
pub fn dump_lockdep_trace() {
#[cfg(feature = "lockdep")]
{
ax_lockdep::dump_trace_buffer();
}
}
pub type SpinNoPreempt<T> = BaseSpinLock<NoPreempt, T>;
pub type SpinNoPreemptGuard<'a, T> = BaseSpinLockGuard<'a, NoPreempt, T>;
pub type SpinRwLock<T> = BaseSpinRwLock<NoOp, T>;
pub type SpinRwLockReadGuard<'a, T> = BaseSpinRwLockReadGuard<'a, NoOp, T>;
pub type SpinRwLockWriteGuard<'a, T> = BaseSpinRwLockWriteGuard<'a, NoOp, T>;
pub type SpinNoIrq<T> = BaseSpinLock<NoPreemptIrqSave, T>;
pub type SpinNoIrqGuard<'a, T> = BaseSpinLockGuard<'a, NoPreemptIrqSave, T>;
pub type SpinNoIrqRwLock<T> = BaseSpinRwLock<NoPreemptIrqSave, T>;
pub type SpinNoIrqRwLockReadGuard<'a, T> = BaseSpinRwLockReadGuard<'a, NoPreemptIrqSave, T>;
pub type SpinNoIrqRwLockWriteGuard<'a, T> = BaseSpinRwLockWriteGuard<'a, NoPreemptIrqSave, T>;
pub type SpinRaw<T> = BaseSpinLock<NoOp, T>;
pub type SpinRawGuard<'a, T> = BaseSpinLockGuard<'a, NoOp, T>;
pub type SpinRawRwLock<T> = BaseSpinRwLock<NoOp, T>;
pub type SpinRawRwLockReadGuard<'a, T> = BaseSpinRwLockReadGuard<'a, NoOp, T>;
pub type SpinRawRwLockWriteGuard<'a, T> = BaseSpinRwLockWriteGuard<'a, NoOp, T>;
#[cfg(all(axtest, feature = "axtest"))]
pub mod axtest;