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

pull/70/head
Yifan Wu 4 years ago
parent bbaad9a719
commit 4fdd55e2e8

@ -102,12 +102,12 @@ impl PageTable {
}
result
}
fn find_pte(&self, vpn: VirtPageNum) -> Option<&PageTableEntry> {
fn find_pte(&self, vpn: VirtPageNum) -> Option<&mut PageTableEntry> {
let idxs = vpn.indexes();
let mut ppn = self.root_ppn;
let mut result: Option<&PageTableEntry> = None;
let mut result: Option<&mut PageTableEntry> = None;
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 {
result = Some(pte);
break;
@ -127,7 +127,7 @@ impl PageTable {
}
#[allow(unused)]
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);
*pte = PageTableEntry::empty();
}
@ -247,4 +247,5 @@ impl Iterator for UserBufferIterator {
Some(r)
}
}
}
}

Loading…
Cancel
Save