Module Name: src Committed By: reinoud Date: Mon Aug 22 16:22:17 UTC 2011
Modified Files: src/sys/arch/usermode/usermode: pmap.c Log Message: Implement pmap_extract() and print pmap_zero_page() pa address. To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/usermode/usermode/pmap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/usermode/usermode/pmap.c diff -u src/sys/arch/usermode/usermode/pmap.c:1.9 src/sys/arch/usermode/usermode/pmap.c:1.10 --- src/sys/arch/usermode/usermode/pmap.c:1.9 Mon Aug 22 15:36:23 2011 +++ src/sys/arch/usermode/usermode/pmap.c Mon Aug 22 16:22:16 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.9 2011/08/22 15:36:23 reinoud Exp $ */ +/* $NetBSD: pmap.c,v 1.10 2011/08/22 16:22:16 reinoud Exp $ */ /*- * Copyright (c) 2011 Reinoud Zandijk <rein...@netbsd.org> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.9 2011/08/22 15:36:23 reinoud Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.10 2011/08/22 16:22:16 reinoud Exp $"); #include "opt_uvmhist.h" #include "opt_memsize.h" @@ -387,7 +387,8 @@ pmap_page_activate(struct pv_entry *pv) { paddr_t pa = pv->pv_ppn * PAGE_SIZE; - vaddr_t va = pv->pv_lpn * PAGE_SIZE + kmem_k_start; + vaddr_t va = pv->pv_lpn * PAGE_SIZE + kmem_k_start; /* XXX V->A make new var */ + void *addr; addr = thunk_mmap((void *) va, PAGE_SIZE, pv->pv_mmap_ppl, @@ -448,7 +449,7 @@ /* to page numbers */ ppn = atop(pa); - lpn = atop(va - kmem_k_start); /* XXX make new var */ + lpn = atop(va - kmem_k_start); /* XXX V->A make new var */ #ifdef DIAGNOSTIC if ((va < kmem_k_start) || (va > kmem_user_end)) panic("pmap_do_enter: invalid va isued\n"); @@ -536,10 +537,18 @@ bool pmap_extract(pmap_t pmap, vaddr_t va, paddr_t *pap) { - /* XXXJDM */ - if (pap) - *pap = va; + struct pv_entry *pv; + UVMHIST_FUNC("pmap_extract"); + UVMHIST_CALLED(pmaphist); + + /* TODO protect against roque values */ printf("pmap_extract: extracting va %p\n", (void *) va); + pv = pmap->pm_entries[atop(va - kmem_k_start)]; /* XXX V->A make new var */ + + if (pv == NULL) + return false; + + *pap = ptoa(pv->pv_ppn); return true; } @@ -584,7 +593,7 @@ void pmap_zero_page(paddr_t pa) { -printf("pmap_zero_page\n"); +printf("pmap_zero_page: pa %p\n", (void *) pa); } void