Skip to content

Commit 4594a76

Browse files
committed
refactor: modify page table
Co-authored-by: 朝倉水希 <[email protected]>
1 parent eddf194 commit 4594a76

File tree

10 files changed

+346
-392
lines changed

10 files changed

+346
-392
lines changed

Cargo.lock

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

page_table_multiarch/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ copy-from = ["dep:bitmaps"]
1919

2020
[dependencies]
2121
axerrno = { version = "0.1", optional = true }
22+
arrayvec = { version = "0.7", default-features = false }
2223
bitmaps = { version = "3.2", default-features = false, optional = true }
2324
log = "0.4"
2425
memory_addr.workspace = true

page_table_multiarch/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,6 @@ let flags = MappingFlags::READ | MappingFlags::WRITE;
6666
let mut pt = X64PageTable::<PagingHandlerImpl>::try_new().unwrap();
6767

6868
assert!(pt.root_paddr().is_aligned_4k());
69-
assert!(pt.map(vaddr, paddr, PageSize::Size4K, flags).is_ok());
69+
assert!(pt.modify().map(vaddr, paddr, PageSize::Size4K, flags).is_ok());
7070
assert_eq!(pt.query(vaddr), Ok((paddr, flags, PageSize::Size4K)));
7171
```

page_table_multiarch/src/arch/aarch64.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use core::arch::asm;
55
use memory_addr::VirtAddr;
66
use page_table_entry::aarch64::A64PTE;
77

8-
use crate::{PageTable64, PagingMetaData};
8+
use crate::{PageTable64, PageTable64Mut, PagingMetaData};
99

1010
/// Metadata of AArch64 page tables.
1111
pub struct A64PagingMetaData;
@@ -38,3 +38,5 @@ impl PagingMetaData for A64PagingMetaData {
3838

3939
/// AArch64 VMSAv8-64 translation table.
4040
pub type A64PageTable<H> = PageTable64<A64PagingMetaData, A64PTE, H>;
41+
/// Mutable reference to an AArch64 VMSAv8-64 translation table.
42+
pub type A64PageTableMut<'a, H> = PageTable64Mut<'a, A64PagingMetaData, A64PTE, H>;

page_table_multiarch/src/arch/loongarch64.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use core::arch::asm;
55
use memory_addr::VirtAddr;
66
use page_table_entry::loongarch64::LA64PTE;
77

8-
use crate::{PageTable64, PagingMetaData};
8+
use crate::{PageTable64, PageTable64Mut, PagingMetaData};
99

1010
/// Metadata of LoongArch64 page tables.
1111
#[derive(Copy, Clone, Debug)]
@@ -86,3 +86,5 @@ impl PagingMetaData for LA64MetaData {
8686
///
8787
/// using page table dir3, dir2, dir1 and pt, ignore dir4
8888
pub type LA64PageTable<H> = PageTable64<LA64MetaData, LA64PTE, H>;
89+
/// Mutable reference to a loongarch64 page table.
90+
pub type LA64PageTableMut<'a, H> = PageTable64Mut<'a, LA64MetaData, LA64PTE, H>;

page_table_multiarch/src/arch/riscv.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
use memory_addr::VirtAddr;
44
use page_table_entry::riscv::Rv64PTE;
55

6-
use crate::{PageTable64, PagingMetaData};
6+
use crate::{PageTable64, PageTable64Mut, PagingMetaData};
77

88
/// A virtual address that can be used in RISC-V Sv39 and Sv48 page tables.
99
pub trait SvVirtAddr: memory_addr::MemoryAddr + Send + Sync {
@@ -58,6 +58,10 @@ impl<VA: SvVirtAddr> PagingMetaData for Sv48MetaData<VA> {
5858

5959
/// Sv39: Page-Based 39-bit (3 levels) Virtual-Memory System.
6060
pub type Sv39PageTable<H> = PageTable64<Sv39MetaData<VirtAddr>, Rv64PTE, H>;
61+
/// Mutable reference to a RISC-V Sv39 page table.
62+
pub type Sv39PageTableMut<'a, H> = PageTable64Mut<'a, Sv39MetaData<VirtAddr>, Rv64PTE, H>;
6163

6264
/// Sv48: Page-Based 48-bit (4 levels) Virtual-Memory System.
6365
pub type Sv48PageTable<H> = PageTable64<Sv48MetaData<VirtAddr>, Rv64PTE, H>;
66+
/// Mutable reference to a RISC-V Sv48 page table.
67+
pub type Sv48PageTableMut<'a, H> = PageTable64Mut<'a, Sv48MetaData<VirtAddr>, Rv64PTE, H>;

page_table_multiarch/src/arch/x86_64.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
use memory_addr::VirtAddr;
44
use page_table_entry::x86_64::X64PTE;
55

6-
use crate::{PageTable64, PagingMetaData};
6+
use crate::{PageTable64, PageTable64Mut, PagingMetaData};
77

88
/// metadata of x86_64 page tables.
99
pub struct X64PagingMetaData;
@@ -28,3 +28,5 @@ impl PagingMetaData for X64PagingMetaData {
2828

2929
/// x86_64 page table.
3030
pub type X64PageTable<H> = PageTable64<X64PagingMetaData, X64PTE, H>;
31+
/// Mutable reference to an x86_64 page table.
32+
pub type X64PageTableMut<'a, H> = PageTable64Mut<'a, X64PagingMetaData, X64PTE, H>;

0 commit comments

Comments
 (0)