Unmap xAPIC page if already mapped

This commit is contained in:
Jeremy Soller
2022-04-12 20:17:27 -06:00
parent 8f06672153
commit 7205dd7463

View File

@@ -48,8 +48,16 @@ impl LocalApic {
if ! self.x2 {
let page = Page::containing_address(VirtualAddress::new(self.address));
let frame = Frame::containing_address(PhysicalAddress::new(self.address - crate::PHYS_OFFSET));
log::info!("Detected xAPIC at {:#x}", frame.start_address().data());
if active_table.translate_page(page).is_some() {
// Unmap xAPIC page if already mapped
let (result, _frame) = active_table.unmap_return(page, true);
result.flush();
}
let result = active_table.map_to(page, frame, PageFlags::new().write(true));
result.flush();
} else {
log::info!("Detected x2APIC");
}
self.init_ap();