From 42a7ea89c530f841b0bbdc2dfb75e5622bd98005 Mon Sep 17 00:00:00 2001 From: Paul Pan Date: Fri, 14 Jun 2024 16:44:13 +0800 Subject: [PATCH] feat: vspace: table: allow to get table vaddr --- kernel/src/arch/riscv/vspace/table.rs | 4 ++++ kernel/src/vspace/table.rs | 1 + 2 files changed, 5 insertions(+) diff --git a/kernel/src/arch/riscv/vspace/table.rs b/kernel/src/arch/riscv/vspace/table.rs index cab97c5..19ea09d 100644 --- a/kernel/src/arch/riscv/vspace/table.rs +++ b/kernel/src/arch/riscv/vspace/table.rs @@ -11,6 +11,10 @@ impl<'a, T: TableLevel> TableOps<'a, T> for Table<'a, T> { } } + fn vaddr(&self) -> VirtAddr { + VirtAddr::from(self.entries.as_ptr()) + } + fn map(&mut self, from: VirtAddr, to: PhysAddr, attr: MapAttr) -> PageResult { if !from.is_aligned(T::LEVEL_SIZE) || !to.is_aligned(PAGE_SIZE) { return Err(PageError::NotAligned); diff --git a/kernel/src/vspace/table.rs b/kernel/src/vspace/table.rs index 86e1023..0832e7f 100644 --- a/kernel/src/vspace/table.rs +++ b/kernel/src/vspace/table.rs @@ -5,6 +5,7 @@ pub trait TableOps<'a, T: TableLevel> { /// # Safety /// `location` must be a page-aligned virtual address and will not be dropped. unsafe fn new(location: VirtAddr) -> Self; + fn vaddr(&self) -> VirtAddr; // following methods only works at current level