Author: bonefish Date: 2010-06-12 02:13:54 +0200 (Sat, 12 Jun 2010) New Revision: 37106 Changeset: http://dev.haiku-os.org/changeset/37106/haiku Modified: haiku/trunk/src/system/kernel/arch/x86/paging/pae/X86PagingMethodPAE.cpp Log: Enable PAE on all CPUs. Modified: haiku/trunk/src/system/kernel/arch/x86/paging/pae/X86PagingMethodPAE.cpp =================================================================== --- haiku/trunk/src/system/kernel/arch/x86/paging/pae/X86PagingMethodPAE.cpp 2010-06-12 00:13:30 UTC (rev 37105) +++ haiku/trunk/src/system/kernel/arch/x86/paging/pae/X86PagingMethodPAE.cpp 2010-06-12 00:13:54 UTC (rev 37106) @@ -143,9 +143,8 @@ TRACE("free virtual slot: %#" B_PRIxADDR ", PTE: %p\n", fFreeVirtualSlot, fFreeVirtualSlotPTE); - // switch to PAE - write_cr3((uint32)physicalPDPT); - x86_write_cr4(x86_read_cr4() | IA32_CR4_PAE | IA32_CR4_GLOBAL_PAGES); + // enable PAE on all CPUs + call_all_cpus_sync(&_EnablePAE, (void*)(addr_t)physicalPDPT); // set return values _virtualPDPT = pdpt; @@ -160,6 +159,12 @@ } 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) { page_table_entry* entry = &fPageHole[virtualBase / B_PAGE_SIZE];