Skip to content

Commit 2f513e5

Browse files
committed
fix(axmm): revert page table locks back to spin::Mutex and remove kernel_guard dependency
- Revert PageTableLockManager in `aspace.rs` to use `spin::Mutex` instead of `kspin::SpinNoIrq`. - Remove `IrqSave` usage in `handle_page_fault` and `handle_page_fault_write` as system calls now run with interrupts disabled. - Remove `kernel_guard` dependency from `arceos/modules/axmm/Cargo.toml`. 中译: fix(axmm): 将页表锁还原为 spin::Mutex 并移除了 kernel_guard 依赖 - 将 `aspace.rs` 中的 `PageTableLockManager` 还原为使用 `spin::Mutex` 替换 `kspin::SpinNoIrq`。 - 因为系统调用目前已经关中断执行,移除了 `handle_page_fault` 和 `handle_page_fault_write` 中对 `IrqSave` 的使用。 - 移除了 `arceos/modules/axmm/Cargo.toml` 中引入的 `kernel_guard` 依赖。
1 parent 2993624 commit 2f513e5

3 files changed

Lines changed: 3 additions & 8 deletions

File tree

Cargo.lock

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

arceos/modules/axmm/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,3 @@ memory_addr = "0.4"
2424
kspin = "0.1"
2525
spin = { workspace = true }
2626
memory_set = "0.4"
27-
kernel_guard = "0.1"

arceos/modules/axmm/src/aspace.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use core::fmt;
22

33
use axerrno::{AxError, AxResult, ax_err};
44
use axfs::{CachedFile, FileFlags};
5-
use kernel_guard::IrqSave;
65
use axhal::{
76
mem::{phys_to_virt, PhysAddr},
87
paging::{MappingFlags, PageSize, PageTable, PagingResult},
@@ -25,10 +24,10 @@ pub enum PageFaultResult {
2524
}
2625

2726
pub struct PageTableLockManager {
28-
pt: kspin::SpinNoIrq<PageTable>,
27+
pt: spin::Mutex<PageTable>,
2928
}
3029

31-
pub struct PageTableGuard<'a>(kspin::SpinNoIrqGuard<'a, PageTable>);
30+
pub struct PageTableGuard<'a>(spin::MutexGuard<'a, PageTable>);
3231

3332
unsafe impl<'a> Send for PageTableGuard<'a> {}
3433
unsafe impl<'a> Sync for PageTableGuard<'a> {}
@@ -51,7 +50,7 @@ impl<'a> core::ops::DerefMut for PageTableGuard<'a> {
5150
impl PageTableLockManager {
5251
pub fn new(pt: PageTable) -> Self {
5352
Self {
54-
pt: kspin::SpinNoIrq::new(pt),
53+
pt: spin::Mutex::new(pt),
5554
}
5655
}
5756

@@ -616,7 +615,6 @@ impl AddrSpace {
616615
///
617616
/// `access_flags` indicates the access type that caused the page fault.
618617
pub fn handle_page_fault(&self, vaddr: VirtAddr, access_flags: PageFaultFlags) -> PageFaultResult {
619-
let _irq = IrqSave::new();
620618
let page = vaddr.align_down_4k();
621619
let pte_before = self
622620
.pt
@@ -709,7 +707,6 @@ impl AddrSpace {
709707

710708
/// Handles a page fault that requires stack growth (write lock held).
711709
pub fn handle_page_fault_write(&mut self, vaddr: VirtAddr, access_flags: PageFaultFlags) -> bool {
712-
let _irq = IrqSave::new();
713710
let page = vaddr.align_down_4k();
714711
// Check for stack grows down auto-extension.
715712
let next_page = page + PAGE_SIZE_4K;

0 commit comments

Comments
 (0)