Now PageTable::unmap calls PageTable::find_pte instead of PageTable::find_pte_create.
This commit is contained in:
parent
94156ab1f7
commit
b535f5ba98
2 changed files with 4 additions and 6 deletions
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue