Now PageTable::unmap calls PageTable::find_pte instead of PageTable::find_pte_create.

This commit is contained in:
Yifan Wu 2022-01-13 17:24:19 -08:00
parent 94156ab1f7
commit b535f5ba98
2 changed files with 4 additions and 6 deletions

View file

@ -102,12 +102,12 @@ impl PageTable {
} }
result result
} }
fn find_pte(&self, vpn: VirtPageNum) -> Option<&PageTableEntry> { fn find_pte(&self, vpn: VirtPageNum) -> Option<&mut PageTableEntry> {
let idxs = vpn.indexes(); let idxs = vpn.indexes();
let mut ppn = self.root_ppn; let mut ppn = self.root_ppn;
let mut result: Option<&PageTableEntry> = None; let mut result: Option<&mut PageTableEntry> = None;
for i in 0..3 { for i in 0..3 {
let pte = &ppn.get_pte_array()[idxs[i]]; let pte = &mut ppn.get_pte_array()[idxs[i]];
if i == 2 { if i == 2 {
result = Some(pte); result = Some(pte);
break; break;
@ -127,7 +127,7 @@ impl PageTable {
} }
#[allow(unused)] #[allow(unused)]
pub fn unmap(&mut self, vpn: VirtPageNum) { pub fn unmap(&mut self, vpn: VirtPageNum) {
let pte = self.find_pte_create(vpn).unwrap(); let pte = self.find_pte(vpn).unwrap();
assert!(pte.is_valid(), "vpn {:?} is invalid before unmapping", vpn); assert!(pte.is_valid(), "vpn {:?} is invalid before unmapping", vpn);
*pte = PageTableEntry::empty(); *pte = PageTableEntry::empty();
} }

View file

@ -29,8 +29,6 @@ unsafe fn f(count:usize) -> ! {
#[no_mangle] #[no_mangle]
pub fn main(argc: usize, argv: &[&str]) -> i32 { pub fn main(argc: usize, argv: &[&str]) -> i32 {
let mut count = 0;
if argc == 1 { if argc == 1 {
count = THREAD_COUNT; count = THREAD_COUNT;
} else if argc == 2 { } else if argc == 2 {