Enable PAE on all CPUs.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37106 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold 2010-06-12 00:13:54 +00:00
parent bd4454cb95
commit 4d2b2dc4d2

View File

@ -143,9 +143,8 @@ struct X86PagingMethodPAE::ToPAESwitcher {
TRACE("free virtual slot: %#" B_PRIxADDR ", PTE: %p\n", TRACE("free virtual slot: %#" B_PRIxADDR ", PTE: %p\n",
fFreeVirtualSlot, fFreeVirtualSlotPTE); fFreeVirtualSlot, fFreeVirtualSlotPTE);
// switch to PAE // enable PAE on all CPUs
write_cr3((uint32)physicalPDPT); call_all_cpus_sync(&_EnablePAE, (void*)(addr_t)physicalPDPT);
x86_write_cr4(x86_read_cr4() | IA32_CR4_PAE | IA32_CR4_GLOBAL_PAGES);
// set return values // set return values
_virtualPDPT = pdpt; _virtualPDPT = pdpt;
@ -160,6 +159,12 @@ struct X86PagingMethodPAE::ToPAESwitcher {
} }
private: private:
static void _EnablePAE(void* physicalPDPT, int cpu)
{
write_cr3((addr_t)physicalPDPT);
x86_write_cr4(x86_read_cr4() | IA32_CR4_PAE | IA32_CR4_GLOBAL_PAGES);
}
void _TranslatePageTable(addr_t virtualBase) void _TranslatePageTable(addr_t virtualBase)
{ {
page_table_entry* entry = &fPageHole[virtualBase / B_PAGE_SIZE]; page_table_entry* entry = &fPageHole[virtualBase / B_PAGE_SIZE];