pub enum FutexLockMode {
Pi,
Plain,
}Expand description
Whether WorkType::PriorityInversion uses a PI-aware mutex
or a plain futex.
Pi exercises FUTEX_LOCK_PI and the rt_mutex priority-boost
chain (kernel/futex/pi.c). When the low-priority lock holder
is preempted by a medium-priority worker, the kernel boosts
the holder to the high-priority waiter’s priority for the
duration of the hold — both unblocking high and pinning
medium from preempting it. Plain uses a non-PI futex so
the inversion is left unrepaired and the scheduler must
surface the stall.
Carried as a typed wrapper rather than a bool to avoid
positional-argument confusion at call sites and so the
failure-dump diagnostic names the choice explicitly
(“pi_mode = Pi” vs “pi_mode = Plain”) instead of a bare
boolean.
Variants§
Pi
FUTEX_LOCK_PI with rt_mutex PI chain.
Plain
Plain futex (no PI boost). The default — exercises the uncorrected inversion the workload exists to surface.
Trait Implementations§
Source§impl Clone for FutexLockMode
impl Clone for FutexLockMode
Source§fn clone(&self) -> FutexLockMode
fn clone(&self) -> FutexLockMode
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for FutexLockMode
impl Debug for FutexLockMode
Source§impl Default for FutexLockMode
impl Default for FutexLockMode
Source§fn default() -> FutexLockMode
fn default() -> FutexLockMode
Source§impl<'de> Deserialize<'de> for FutexLockMode
impl<'de> Deserialize<'de> for FutexLockMode
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for FutexLockMode
impl PartialEq for FutexLockMode
Source§impl Serialize for FutexLockMode
impl Serialize for FutexLockMode
impl Copy for FutexLockMode
impl Eq for FutexLockMode
impl StructuralPartialEq for FutexLockMode
Auto Trait Implementations§
impl Freeze for FutexLockMode
impl RefUnwindSafe for FutexLockMode
impl Send for FutexLockMode
impl Sync for FutexLockMode
impl Unpin for FutexLockMode
impl UnwindSafe for FutexLockMode
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more