Module Name:    src
Committed By:   yamt
Date:           Fri Dec  2 16:33:59 UTC 2011

Modified Files:
        src/sys/arch/hppa/hppa [yamt-pagecache]: pmap.c

Log Message:
adapt hp700.  compile tested.


To generate a diff of this commit:
cvs rdiff -u -r1.81 -r1.81.2.1 src/sys/arch/hppa/hppa/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/hppa/hppa/pmap.c
diff -u src/sys/arch/hppa/hppa/pmap.c:1.81 src/sys/arch/hppa/hppa/pmap.c:1.81.2.1
--- src/sys/arch/hppa/hppa/pmap.c:1.81	Sun Jun 12 03:35:41 2011
+++ src/sys/arch/hppa/hppa/pmap.c	Fri Dec  2 16:33:59 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.81 2011/06/12 03:35:41 rmind Exp $	*/
+/*	$NetBSD: pmap.c,v 1.81.2.1 2011/12/02 16:33:59 yamt Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.81 2011/06/12 03:35:41 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.81.2.1 2011/12/02 16:33:59 yamt Exp $");
 
 #include "opt_cputype.h"
 
@@ -76,6 +76,7 @@ __KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.8
 #include <sys/mutex.h>
 
 #include <uvm/uvm.h>
+#include <uvm/uvm_page_array.h>
 
 #include <machine/reg.h>
 #include <machine/psl.h>
@@ -393,7 +394,7 @@ pmap_pde_release(pmap_t pmap, vaddr_t va
 		pmap_pde_set(pmap, va, 0);
 		pmap->pm_stats.resident_count--;
 		if (pmap->pm_ptphint == ptp)
-			pmap->pm_ptphint = TAILQ_FIRST(&pmap->pm_obj.memq);
+			pmap->pm_ptphint = NULL;
 		ptp->wire_count = 0;
 
 		KASSERT((ptp->flags & PG_BUSY) == 0);
@@ -1087,7 +1088,9 @@ void
 pmap_destroy(pmap_t pmap)
 {
 #ifdef DIAGNOSTIC
+	struct uvm_page_array a;
 	struct vm_page *pg;
+	off_t off;
 #endif
 	int refs;
 
@@ -1101,11 +1104,17 @@ pmap_destroy(pmap_t pmap)
 		return;
 
 #ifdef DIAGNOSTIC
-	while ((pg = TAILQ_FIRST(&pmap->pm_obj.memq))) {
+	uvm_page_array_init(&a);
+	off = 0;
+	mutex_enter(pmap->pm_lock);
+	while ((pg = uvm_page_array_fill_and_peek(&a, &pmap->pm_obj, off, 0, 0))
+	    != NULL) {
 		pt_entry_t *pde, *epde;
 		struct vm_page *sheep;
 		struct pv_entry *haggis;
 
+		off = pg->offset + PAGE_SIZE;
+		uvm_page_array_advance(&a);
 		if (pg == pmap->pm_pdir_pg)
 			continue;
 
@@ -1141,6 +1150,8 @@ pmap_destroy(pmap_t pmap)
 		}
 		DPRINTF(PDB_FOLLOW, ("\n"));
 	}
+	mutex_exit(pmap->pm_lock);
+	uvm_page_array_fini(&a);
 #endif
 	pmap_sdir_set(pmap->pm_space, 0);
 	mutex_enter(pmap->pm_lock);

Reply via email to