[haiku-commits] r38293 - haiku/trunk/src/system/kernel/arch/ppc

  • From: andreas.faerber@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 21 Aug 2010 04:12:25 +0200 (CEST)

Author: andreasf
Date: 2010-08-21 04:12:25 +0200 (Sat, 21 Aug 2010)
New Revision: 38293
Changeset: http://dev.haiku-os.org/changeset/38293
Ticket: http://dev.haiku-os.org/ticket/6163

Modified:
   haiku/trunk/src/system/kernel/arch/ppc/arch_vm_translation_map.cpp
Log:
ppc: Implement arch_vm_translation_map_is_kernel_page_accessible()

This remedies "Current thread pointer [...] is an address we can't read from."
on entering KDL. Closes ticket #6163.


Modified: haiku/trunk/src/system/kernel/arch/ppc/arch_vm_translation_map.cpp
===================================================================
--- haiku/trunk/src/system/kernel/arch/ppc/arch_vm_translation_map.cpp  
2010-08-21 00:36:09 UTC (rev 38292)
+++ haiku/trunk/src/system/kernel/arch/ppc/arch_vm_translation_map.cpp  
2010-08-21 02:12:25 UTC (rev 38293)
@@ -887,6 +887,20 @@
 arch_vm_translation_map_is_kernel_page_accessible(addr_t virtualAddress,
        uint32 protection)
 {
-       // TODO: Implement!
-       return false;
+       VMAddressSpace *addressSpace = VMAddressSpace::Kernel();
+
+       PPCVMTranslationMap* map = static_cast<PPCVMTranslationMap*>(
+               addressSpace->TranslationMap());
+
+       phys_addr_t physicalAddress;
+       uint32 flags;
+       if (map->Query(virtualAddress, &physicalAddress, &flags) != B_OK)
+               return false;
+
+       if ((flags & PAGE_PRESENT) == 0)
+               return false;
+
+       // present means kernel-readable, so check for writable
+       return (protection & B_KERNEL_WRITE_AREA) == 0
+               || (flags & B_KERNEL_WRITE_AREA) != 0;
 }


Other related posts:

  • » [haiku-commits] r38293 - haiku/trunk/src/system/kernel/arch/ppc - andreas . faerber