[haiku-commits] r37106 - haiku/trunk/src/system/kernel/arch/x86/paging/pae

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 12 Jun 2010 02:13:54 +0200 (CEST)

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];


Other related posts:

  • » [haiku-commits] r37106 - haiku/trunk/src/system/kernel/arch/x86/paging/pae - ingo_weinhold