rmm: Nicer formatting of unsafe blocks

This commit is contained in:
bjorn3
2026-03-28 22:00:43 +01:00
parent cc20bcd405
commit a913414c7f
4 changed files with 31 additions and 51 deletions
+8 -10
View File
@@ -68,18 +68,16 @@ impl Arch for AArch64Arch {
#[inline(always)]
unsafe fn table(table_kind: TableKind) -> PhysicalAddress {
unsafe {
let address: usize;
match table_kind {
TableKind::User => {
asm!("mrs {0}, ttbr0_el1", out(reg) address);
}
TableKind::Kernel => {
asm!("mrs {0}, ttbr1_el1", out(reg) address);
}
let address: usize;
match table_kind {
TableKind::User => {
unsafe { asm!("mrs {0}, ttbr0_el1", out(reg) address) };
}
TableKind::Kernel => {
unsafe { asm!("mrs {0}, ttbr1_el1", out(reg) address) };
}
PhysicalAddress::new(address)
}
PhysicalAddress::new(address)
}
#[inline(always)]
+9 -15
View File
@@ -38,34 +38,28 @@ impl Arch for RiscV64Sv39Arch {
#[inline(always)]
unsafe fn invalidate(address: VirtualAddress) {
unsafe {
asm!("sfence.vma {}", in(reg) address.data());
}
unsafe { asm!("sfence.vma {}", in(reg) address.data()) };
}
#[inline(always)]
unsafe fn invalidate_all() {
unsafe {
asm!("sfence.vma");
}
unsafe { asm!("sfence.vma") };
}
#[inline(always)]
unsafe fn table(_table_kind: TableKind) -> PhysicalAddress {
unsafe {
let satp: usize;
asm!("csrr {0}, satp", out(reg) satp);
PhysicalAddress::new(
(satp & Self::ENTRY_ADDRESS_MASK) << Self::PAGE_SHIFT, // Convert from PPN
)
}
let satp: usize;
unsafe { asm!("csrr {0}, satp", out(reg) satp) };
PhysicalAddress::new(
(satp & Self::ENTRY_ADDRESS_MASK) << Self::PAGE_SHIFT, // Convert from PPN
)
}
#[inline(always)]
unsafe fn set_table(_table_kind: TableKind, address: PhysicalAddress) {
unsafe {
let satp = (8 << 60) | // Sv39 MODE
let satp = (8 << 60) | // Sv39 MODE
(address.data() >> Self::PAGE_SHIFT); // Convert to PPN (TODO: ensure alignment)
unsafe {
asm!("csrw satp, {0}", in(reg) satp);
Self::invalidate_all();
}
+9 -15
View File
@@ -34,34 +34,28 @@ impl Arch for RiscV64Sv48Arch {
#[inline(always)]
unsafe fn invalidate(address: VirtualAddress) {
unsafe {
asm!("sfence.vma {}", in(reg) address.data());
}
unsafe { asm!("sfence.vma {}", in(reg) address.data()) };
}
#[inline(always)]
unsafe fn invalidate_all() {
unsafe {
asm!("sfence.vma");
}
unsafe { asm!("sfence.vma") };
}
#[inline(always)]
unsafe fn table(_table_kind: TableKind) -> PhysicalAddress {
unsafe {
let satp: usize;
asm!("csrr {0}, satp", out(reg) satp);
PhysicalAddress::new(
(satp & Self::ENTRY_ADDRESS_MASK) << Self::PAGE_SHIFT, // Convert from PPN
)
}
let satp: usize;
unsafe { asm!("csrr {0}, satp", out(reg) satp) };
PhysicalAddress::new(
(satp & Self::ENTRY_ADDRESS_MASK) << Self::PAGE_SHIFT, // Convert from PPN
)
}
#[inline(always)]
unsafe fn set_table(_table_kind: TableKind, address: PhysicalAddress) {
unsafe {
let satp = (9 << 60) | // Sv48 MODE
let satp = (9 << 60) | // Sv48 MODE
(address.data() >> Self::PAGE_SHIFT); // Convert to PPN (TODO: ensure alignment)
unsafe {
asm!("csrw satp, {0}", in(reg) satp);
Self::invalidate_all();
}
+5 -11
View File
@@ -32,25 +32,19 @@ impl Arch for X8664Arch {
#[inline(always)]
unsafe fn invalidate(address: VirtualAddress) {
unsafe {
asm!("invlpg [{0}]", in(reg) address.data());
}
unsafe { asm!("invlpg [{0}]", in(reg) address.data()) };
}
#[inline(always)]
unsafe fn table(_table_kind: TableKind) -> PhysicalAddress {
unsafe {
let address: usize;
asm!("mov {0}, cr3", out(reg) address);
PhysicalAddress::new(address)
}
let address: usize;
unsafe { asm!("mov {0}, cr3", out(reg) address) };
PhysicalAddress::new(address)
}
#[inline(always)]
unsafe fn set_table(_table_kind: TableKind, address: PhysicalAddress) {
unsafe {
asm!("mov cr3, {0}", in(reg) address.data());
}
unsafe { asm!("mov cr3, {0}", in(reg) address.data()) };
}
fn virt_is_valid(address: VirtualAddress) -> bool {