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