diff --git a/rmm/src/arch/mod.rs b/rmm/src/arch/mod.rs index a5f92a80bc..cf5c4f4a76 100644 --- a/rmm/src/arch/mod.rs +++ b/rmm/src/arch/mod.rs @@ -79,17 +79,9 @@ pub trait Arch: Clone + Copy { } unsafe fn invalidate(address: VirtualAddress); - - #[inline(always)] - unsafe fn invalidate_all() { - unsafe { - //TODO: this stub only works on x86_64, maybe make the arch implement this? - Self::set_table(TableKind::User, Self::table(TableKind::User)); - } - } + unsafe fn invalidate_all(); unsafe fn table(table_kind: TableKind) -> PhysicalAddress; - unsafe fn set_table(table_kind: TableKind, address: PhysicalAddress); #[inline(always)] diff --git a/rmm/src/arch/x86.rs b/rmm/src/arch/x86.rs index 85d6c736df..91d73c3be0 100644 --- a/rmm/src/arch/x86.rs +++ b/rmm/src/arch/x86.rs @@ -36,6 +36,11 @@ impl Arch for X86Arch { unsafe { asm!("invlpg [{0}]", in(reg) address.data()) }; } + #[inline(always)] + unsafe fn invalidate_all() { + unsafe { Self::set_table(TableKind::User, Self::table(TableKind::User)) }; + } + #[inline(always)] unsafe fn table(_table_kind: TableKind) -> PhysicalAddress { let address: usize; diff --git a/rmm/src/arch/x86_64.rs b/rmm/src/arch/x86_64.rs index 7b3d8ad95c..10b6dbd8ee 100644 --- a/rmm/src/arch/x86_64.rs +++ b/rmm/src/arch/x86_64.rs @@ -35,6 +35,11 @@ impl Arch for X8664Arch { unsafe { asm!("invlpg [{0}]", in(reg) address.data()) }; } + #[inline(always)] + unsafe fn invalidate_all() { + unsafe { Self::set_table(TableKind::User, Self::table(TableKind::User)) }; + } + #[inline(always)] unsafe fn table(_table_kind: TableKind) -> PhysicalAddress { let address: usize;