use crate::sched::task::current_fast;
const PREEMPT_BITS: usize = 8;
const HARDIRQ_BITS: usize = 4;
const NMI_BITS: usize = 1;
const PREEMPT_SHIFT: usize = 0;
const HARDIRQ_SHIFT: usize = PREEMPT_SHIFT + PREEMPT_BITS;
const NMI_SHIFT: usize = HARDIRQ_SHIFT + HARDIRQ_BITS;
const fn preempt_mask(bits: usize) -> usize {
(1 << bits) - 1
}
#[allow(unused)]
const PREEMPT_MASK: usize = preempt_mask(PREEMPT_BITS) << PREEMPT_SHIFT;
#[allow(unused)]
const HARDIRQ_MASK: usize = preempt_mask(HARDIRQ_BITS) << HARDIRQ_SHIFT;
#[allow(unused)]
const NMI_MASK: usize = preempt_mask(NMI_BITS) << NMI_SHIFT;
pub(crate) const PREEMPT_OFFSET: usize = 1 << PREEMPT_SHIFT;
pub(crate) const HARDIRQ_OFFSET: usize = 1 << HARDIRQ_SHIFT;
#[allow(unused)]
pub(crate) const NMI_OFFSET: usize = 1 << NMI_SHIFT;
#[inline(always)]
pub(crate) fn preempt_count_add(val: u32) {
current_fast().preempt_add(val);
}
#[inline(always)]
pub(crate) fn preempt_count_sub(val: u32) {
current_fast().preempt_sub(val);
}
#[inline(always)]
pub fn preempt_enable() {
preempt_count_sub(PREEMPT_OFFSET as u32);
}
#[inline(always)]
pub fn preempt_disable() {
preempt_count_add(PREEMPT_OFFSET as u32);
}
pub fn preempt_count() -> u32 {
current_fast().preempt()
}
#[inline(always)]
pub fn in_atomic_preempt_off() -> bool {
preempt_count() != PREEMPT_OFFSET as u32
}