1#![cfg_attr(not(test), no_std)]
2#![doc = include_str!("../README.md")]
3
4#[cfg(any(test, doctest))]
5extern crate std;
6
7mod base;
8use ax_kernel_guard::{NoOp, NoPreempt, NoPreemptIrqSave};
9#[cfg(feature = "lockdep")]
10pub mod lockdep;
11
12pub use self::base::{BaseSpinLock, BaseSpinLockGuard};
13
14pub fn set_lockdep_trace_enabled(enabled: bool) {
16 #[cfg(feature = "lockdep")]
17 {
18 ax_lockdep::set_trace_enabled(enabled);
19 }
20
21 #[cfg(not(feature = "lockdep"))]
22 {
23 let _ = enabled;
24 }
25}
26
27pub fn dump_lockdep_trace() {
29 #[cfg(feature = "lockdep")]
30 {
31 ax_lockdep::dump_trace_buffer();
32 }
33}
34
35pub type SpinNoPreempt<T> = BaseSpinLock<NoPreempt, T>;
41
42pub type SpinNoPreemptGuard<'a, T> = BaseSpinLockGuard<'a, NoPreempt, T>;
44
45pub type SpinNoIrq<T> = BaseSpinLock<NoPreemptIrqSave, T>;
50
51pub type SpinNoIrqGuard<'a, T> = BaseSpinLockGuard<'a, NoPreemptIrqSave, T>;
53
54pub type SpinRaw<T> = BaseSpinLock<NoOp, T>;
59
60pub type SpinRawGuard<'a, T> = BaseSpinLockGuard<'a, NoOp, T>;