kernel_guard 0.2.0

RAII wrappers to create a critical section with local IRQs or preemption disabled
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use core::arch::asm;

#[inline]
pub fn local_irq_save_and_disable() -> usize {
    let flags: usize;
    // save `DAIF` flags, mask `I` bit (disable IRQs)
    unsafe { asm!("mrs {}, daif; msr daifset, #2", out(reg) flags) };
    flags
}

#[inline]
pub fn local_irq_restore(flags: usize) {
    unsafe { asm!("msr daif, {}", in(reg) flags) };
}