diff options
author | nwhitehorn <nwhitehorn@FreeBSD.org> | 2010-02-25 03:49:17 +0000 |
---|---|---|
committer | nwhitehorn <nwhitehorn@FreeBSD.org> | 2010-02-25 03:49:17 +0000 |
commit | c82626304295f3dbf2e6d567378e95b6fe6b7175 (patch) | |
tree | 8cd294010329fef47d52467bf5a1ffb8da4fcb04 /sys/powerpc | |
parent | 096b34304ec55c5d61c570915102d15fc768a0a9 (diff) | |
download | FreeBSD-src-c82626304295f3dbf2e6d567378e95b6fe6b7175.zip FreeBSD-src-c82626304295f3dbf2e6d567378e95b6fe6b7175.tar.gz |
Provide an implementation of pmap_dev_direct_mapped() on OEA64. This is
required in order to be able to mmap the running kernel, which is turn
required to avoid fstat returning gibberish.
Diffstat (limited to 'sys/powerpc')
-rw-r--r-- | sys/powerpc/aim/mmu_oea64.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/sys/powerpc/aim/mmu_oea64.c b/sys/powerpc/aim/mmu_oea64.c index e83bec3..672dde4 100644 --- a/sys/powerpc/aim/mmu_oea64.c +++ b/sys/powerpc/aim/mmu_oea64.c @@ -2410,7 +2410,22 @@ moea64_clear_bit(vm_page_t m, u_int64_t ptebit, u_int64_t *origbit) boolean_t moea64_dev_direct_mapped(mmu_t mmu, vm_offset_t pa, vm_size_t size) { - return (EFAULT); + struct pvo_entry *pvo; + vm_offset_t ppa; + int error = 0; + + PMAP_LOCK(kernel_pmap); + for (ppa = pa & ~ADDR_POFF; ppa < pa + size; ppa += PAGE_SIZE) { + pvo = moea64_pvo_find_va(kernel_pmap, ppa, NULL); + if (pvo == NULL || + (pvo->pvo_pte.lpte.pte_lo & LPTE_RPGN) != ppa) { + error = EFAULT; + break; + } + } + PMAP_UNLOCK(kernel_pmap); + + return (error); } /* |