Calculate next_table_address through directly through addresses

This commit is contained in:
Philipp Oppermann
2015-12-04 16:24:23 +01:00
parent 4a54a24145
commit e88de41914

View File

@@ -47,16 +47,10 @@ impl<L> Table<L> where L: HierachicalLevel
} }
fn next_table_address(&self, index: usize) -> Option<usize> { fn next_table_address(&self, index: usize) -> Option<usize> {
use memory::paging::Page;
let entry_flags = self[index].flags(); let entry_flags = self[index].flags();
if entry_flags.contains(PRESENT) && !entry_flags.contains(HUGE_PAGE) { if entry_flags.contains(PRESENT) && !entry_flags.contains(HUGE_PAGE) {
let table_page = Page::containing_address(self as *const _ as usize); let table_address = self as *const _ as usize;
assert!(table_page.number >= 0o_777_000_000_000); Some((table_address << 9) | (index << 12))
let next_table_page = Page {
number: ((table_page.number << 9) & 0o_777_777_777_777) | index,
};
Some(next_table_page.start_address())
} else { } else {
None None
} }