blob: f99604f7ec9f8248ac1f53a52c66bf7e74128632 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
//! Functions to flush the translation lookaside buffer (TLB).
/// Invalidate the given address in the TLB using the `invlpg` instruction.
///
/// # Safety
/// This function is unsafe as it causes a general protection fault (GP) if the current privilege
/// level is not 0.
pub unsafe fn flush(addr: usize) {
asm!("invlpg ($0)" :: "r" (addr) : "memory");
}
/// Invalidate the TLB completely by reloading the CR3 register.
///
/// # Safety
/// This function is unsafe as it causes a general protection fault (GP) if the current privilege
/// level is not 0.
pub unsafe fn flush_all() {
use shared::control_regs::{cr3, cr3_write};
cr3_write(cr3())
}
|