blob: 5688ddb47401c2116a77d5f53836e36c5d4007da (
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 crate::controlregs::{cr3, cr3_write};
cr3_write(cr3())
}
|