Module Name:    src
Committed By:   uebayasi
Date:           Thu Nov  4 08:47:38 UTC 2010

Modified Files:
        src/sys/arch/m68k/m68k [uebayasi-xip]: pmap_motorola.c
        src/sys/arch/mips/mips [uebayasi-xip]: pmap.c
        src/sys/arch/powerpc/ibm4xx [uebayasi-xip]: pmap.c
        src/sys/miscfs/genfs [uebayasi-xip]: genfs_io.c
        src/sys/uvm [uebayasi-xip]: uvm_bio.c uvm_fault.c uvm_page.c uvm_page.h

Log Message:
Split physical device segment pages from "managed" to "managed
device".  Cache that information as a flag PG_DEVICE so that callers
don't need to walk physsegs everytime.

Remove PQ_FIXED, which means that page daemon doesn't need to know
device segment pages at all.  But still fault handlers need to know
them.

I think this is what I can do best now.


To generate a diff of this commit:
cvs rdiff -u -r1.55.2.5 -r1.55.2.6 src/sys/arch/m68k/m68k/pmap_motorola.c
cvs rdiff -u -r1.188.2.6 -r1.188.2.7 src/sys/arch/mips/mips/pmap.c
cvs rdiff -u -r1.60.2.7 -r1.60.2.8 src/sys/arch/powerpc/ibm4xx/pmap.c
cvs rdiff -u -r1.36.2.28 -r1.36.2.29 src/sys/miscfs/genfs/genfs_io.c
cvs rdiff -u -r1.68.2.11 -r1.68.2.12 src/sys/uvm/uvm_bio.c
cvs rdiff -u -r1.166.2.21 -r1.166.2.22 src/sys/uvm/uvm_fault.c
cvs rdiff -u -r1.153.2.58 -r1.153.2.59 src/sys/uvm/uvm_page.c
cvs rdiff -u -r1.59.2.32 -r1.59.2.33 src/sys/uvm/uvm_page.h

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/m68k/m68k/pmap_motorola.c
diff -u src/sys/arch/m68k/m68k/pmap_motorola.c:1.55.2.5 src/sys/arch/m68k/m68k/pmap_motorola.c:1.55.2.6
--- src/sys/arch/m68k/m68k/pmap_motorola.c:1.55.2.5	Sun Oct 31 03:46:17 2010
+++ src/sys/arch/m68k/m68k/pmap_motorola.c	Thu Nov  4 08:47:36 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap_motorola.c,v 1.55.2.5 2010/10/31 03:46:17 uebayasi Exp $        */
+/*	$NetBSD: pmap_motorola.c,v 1.55.2.6 2010/11/04 08:47:36 uebayasi Exp $        */
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -119,7 +119,7 @@
 #include "opt_m68k_arch.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap_motorola.c,v 1.55.2.5 2010/10/31 03:46:17 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap_motorola.c,v 1.55.2.6 2010/11/04 08:47:36 uebayasi Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -285,7 +285,8 @@
 struct pv_entry *pmap_alloc_pv(void);
 void	pmap_free_pv(struct pv_entry *);
 
-#define	PAGE_IS_MANAGED(pa)	(pmap_initialized && uvm_pageismanaged(pa))
+#define	PAGE_IS_MANAGED(pa)	(pmap_initialized && \
+	(uvm_pageismanaged(pa) || uvm_pageismanaged_device(pa))
 
 static inline struct pv_header *
 pa_to_pvh(paddr_t pa)

Index: src/sys/arch/mips/mips/pmap.c
diff -u src/sys/arch/mips/mips/pmap.c:1.188.2.6 src/sys/arch/mips/mips/pmap.c:1.188.2.7
--- src/sys/arch/mips/mips/pmap.c:1.188.2.6	Sun Oct 31 03:46:18 2010
+++ src/sys/arch/mips/mips/pmap.c	Thu Nov  4 08:47:37 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.188.2.6 2010/10/31 03:46:18 uebayasi Exp $	*/
+/*	$NetBSD: pmap.c,v 1.188.2.7 2010/11/04 08:47:37 uebayasi Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.188.2.6 2010/10/31 03:46:18 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.188.2.7 2010/11/04 08:47:37 uebayasi Exp $");
 
 /*
  *	Manages physical address maps.
@@ -225,7 +225,8 @@
 
 bool		pmap_initialized = false;
 
-#define PAGE_IS_MANAGED(pa)	(pmap_initialized && uvm_pageismanaged(pa))
+#define PAGE_IS_MANAGED(pa)	(pmap_initialized && \
+	(uvm_pageismanaged(pa) || uvm_pageismanaged_device(pa))
 
 #define PMAP_IS_ACTIVE(pm)						\
 	((pm) == pmap_kernel() || 					\
@@ -1553,7 +1554,7 @@
 pmap_mmap(vaddr_t addr, off_t off)
 {
 
-	return mips_btop(vtophys(addr + off));
+	return mips_btop(MIPS_KSEG0_TO_PHYS(addr + off));
 }
 
 /*

Index: src/sys/arch/powerpc/ibm4xx/pmap.c
diff -u src/sys/arch/powerpc/ibm4xx/pmap.c:1.60.2.7 src/sys/arch/powerpc/ibm4xx/pmap.c:1.60.2.8
--- src/sys/arch/powerpc/ibm4xx/pmap.c:1.60.2.7	Sun Oct 31 03:46:18 2010
+++ src/sys/arch/powerpc/ibm4xx/pmap.c	Thu Nov  4 08:47:37 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.60.2.7 2010/10/31 03:46:18 uebayasi Exp $	*/
+/*	$NetBSD: pmap.c,v 1.60.2.8 2010/11/04 08:47:37 uebayasi Exp $	*/
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.60.2.7 2010/10/31 03:46:18 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.60.2.8 2010/11/04 08:47:37 uebayasi Exp $");
 
 #include "opt_xip.h"
 
@@ -851,7 +851,8 @@
 	if (flags & PMAP_WIRED)
 		flags |= prot;
 
-	managed = ((flags & PMAP_NOCACHE) == 0) && uvm_pageismanaged(pa);
+	managed = ((flags & PMAP_NOCACHE) == 0) &&
+	    (uvm_pageismanaged(pa) || uvm_pageismanaged_device(pa));
 
 	/*
 	 * Generate TTE.

Index: src/sys/miscfs/genfs/genfs_io.c
diff -u src/sys/miscfs/genfs/genfs_io.c:1.36.2.28 src/sys/miscfs/genfs/genfs_io.c:1.36.2.29
--- src/sys/miscfs/genfs/genfs_io.c:1.36.2.28	Thu Nov  4 07:31:27 2010
+++ src/sys/miscfs/genfs/genfs_io.c	Thu Nov  4 08:47:37 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: genfs_io.c,v 1.36.2.28 2010/11/04 07:31:27 uebayasi Exp $	*/
+/*	$NetBSD: genfs_io.c,v 1.36.2.29 2010/11/04 08:47:37 uebayasi Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfs_io.c,v 1.36.2.28 2010/11/04 07:31:27 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfs_io.c,v 1.36.2.29 2010/11/04 08:47:37 uebayasi Exp $");
 
 #include "opt_xip.h"
 
@@ -922,7 +922,7 @@
 			KASSERT((pg->flags & PG_BUSY) == 0);
 			KASSERT((pg->flags & PG_RDONLY) != 0);
 			KASSERT((pg->flags & PG_CLEAN) != 0);
-			KASSERT((pg->pqflags & PQ_FIXED) != 0);
+			KASSERT((pg->flags & PG_DEVICE) != 0);
 			pg->flags |= PG_BUSY;
 			pg->flags &= ~PG_FAKE;
 			pg->uobject = &vp->v_uobj;
@@ -1554,7 +1554,7 @@
 				KASSERT((pg->flags & PG_RDONLY) != 0);
 				KASSERT((pg->flags & PG_CLEAN) != 0);
 				KASSERT((pg->flags & PG_FAKE) == 0);
-				KASSERT((pg->pqflags & PQ_FIXED) != 0);
+				KASSERT((pg->flags & PG_DEVICE) != 0);
 				pg->flags &= ~PG_BUSY;
 			}
 		}

Index: src/sys/uvm/uvm_bio.c
diff -u src/sys/uvm/uvm_bio.c:1.68.2.11 src/sys/uvm/uvm_bio.c:1.68.2.12
--- src/sys/uvm/uvm_bio.c:1.68.2.11	Tue Aug 17 06:48:14 2010
+++ src/sys/uvm/uvm_bio.c	Thu Nov  4 08:47:38 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_bio.c,v 1.68.2.11 2010/08/17 06:48:14 uebayasi Exp $	*/
+/*	$NetBSD: uvm_bio.c,v 1.68.2.12 2010/11/04 08:47:38 uebayasi Exp $	*/
 
 /*
  * Copyright (c) 1998 Chuck Silvers.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_bio.c,v 1.68.2.11 2010/08/17 06:48:14 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_bio.c,v 1.68.2.12 2010/11/04 08:47:38 uebayasi Exp $");
 
 #include "opt_uvmhist.h"
 #include "opt_ubc.h"
@@ -283,7 +283,7 @@
 	error = pmap_enter(ufi->orig_map->pmap, va, VM_PAGE_TO_PHYS(pg),
 	    prot & mask, PMAP_CANFAIL | (access_type & mask));
 
-	if (__predict_true((pg->pqflags & PQ_FIXED) == 0)) {
+	if (__predict_true((pg->flags & PG_DEVICE) == 0)) {
 		mutex_enter(&uvm_pageqlock);
 		uvm_pageactivate(pg);
 		mutex_exit(&uvm_pageqlock);

Index: src/sys/uvm/uvm_fault.c
diff -u src/sys/uvm/uvm_fault.c:1.166.2.21 src/sys/uvm/uvm_fault.c:1.166.2.22
--- src/sys/uvm/uvm_fault.c:1.166.2.21	Tue Aug 17 06:48:14 2010
+++ src/sys/uvm/uvm_fault.c	Thu Nov  4 08:47:38 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_fault.c,v 1.166.2.21 2010/08/17 06:48:14 uebayasi Exp $	*/
+/*	$NetBSD: uvm_fault.c,v 1.166.2.22 2010/11/04 08:47:38 uebayasi Exp $	*/
 
 /*
  *
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.166.2.21 2010/08/17 06:48:14 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.166.2.22 2010/11/04 08:47:38 uebayasi Exp $");
 
 #include "opt_uvmhist.h"
 #include "opt_xip.h"
@@ -1767,7 +1767,7 @@
 	 * for this.  we can just directly enter the pages.
 	 */
 
-	if (__predict_true((pg->pqflags & PQ_FIXED) == 0)) {
+	if (__predict_true((pg->flags & PG_DEVICE) == 0)) {
 		mutex_enter(&uvm_pageqlock);
 		uvm_pageenqueue(pg);
 		mutex_exit(&uvm_pageqlock);
@@ -2199,7 +2199,7 @@
 		return ERESTART;
 	}
 
-	if (__predict_true((pg->pqflags & PQ_FIXED) == 0))
+	if (__predict_true((pg->flags & PG_DEVICE) == 0))
 		uvm_fault_lower_done(ufi, flt, uobj, anon, pg);
 
 	pg->flags &= ~(PG_BUSY|PG_FAKE|PG_WANTED);

Index: src/sys/uvm/uvm_page.c
diff -u src/sys/uvm/uvm_page.c:1.153.2.58 src/sys/uvm/uvm_page.c:1.153.2.59
--- src/sys/uvm/uvm_page.c:1.153.2.58	Tue Nov  2 14:05:28 2010
+++ src/sys/uvm/uvm_page.c	Thu Nov  4 08:47:38 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_page.c,v 1.153.2.58 2010/11/02 14:05:28 uebayasi Exp $	*/
+/*	$NetBSD: uvm_page.c,v 1.153.2.59 2010/11/04 08:47:38 uebayasi Exp $	*/
 
 /*
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -97,7 +97,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_page.c,v 1.153.2.58 2010/11/02 14:05:28 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_page.c,v 1.153.2.59 2010/11/04 08:47:38 uebayasi Exp $");
 
 #include "opt_ddb.h"
 #include "opt_uvmhist.h"
@@ -862,10 +862,9 @@
 		paddr_t paddr = (start + i) << PAGE_SHIFT;
 
 		pg->phys_addr = paddr;
-		pg->flags |= PG_FAKE | PG_CLEAN;
+		pg->flags |= PG_FAKE | PG_CLEAN | PG_DEVICE;
 		if (prot == VM_PROT_READ)
 			pg->flags |= PG_RDONLY;
-		pg->pqflags = PQ_FIXED;
 #ifdef __HAVE_VM_PAGE_MD
 		VM_MDPAGE_INIT(&pg->mdpage, paddr);
 #endif
@@ -1581,7 +1580,7 @@
 			pmap_zero_page(VM_PAGE_TO_PHYS(pg));
 	}
 
-	KASSERT((pg->pqflags & PQ_FIXED) == 0);
+	KASSERT((pg->flags & PG_DEVICE) == 0);
 
 	return(pg);
 
@@ -2110,7 +2109,7 @@
 {
 
 	KASSERT(mutex_owned(&uvm_pageqlock));
-	KASSERT((pg->pqflags & PQ_FIXED) == 0);
+	KASSERT((pg->flags & PG_DEVICE) == 0);
 	KASSERT(pg->wire_count != 0 || uvmpdpol_pageisqueued_p(pg));
 	uvmpdpol_pagedeactivate(pg);
 }
@@ -2126,7 +2125,7 @@
 {
 
 	KASSERT(mutex_owned(&uvm_pageqlock));
-	KASSERT((pg->pqflags & PQ_FIXED) == 0);
+	KASSERT((pg->flags & PG_DEVICE) == 0);
 #if defined(READAHEAD_STATS)
 	if ((pg->pqflags & PQ_READAHEAD) != 0) {
 		uvm_ra_hit.ev_count++;
@@ -2147,7 +2146,7 @@
 uvm_pagedequeue(struct vm_page *pg)
 {
 
-	KASSERT((pg->pqflags & PQ_FIXED) == 0);
+	KASSERT((pg->flags & PG_DEVICE) == 0);
 	if (uvmpdpol_pageisqueued_p(pg)) {
 		KASSERT(mutex_owned(&uvm_pageqlock));
 	}
@@ -2165,7 +2164,7 @@
 {
 
 	KASSERT(mutex_owned(&uvm_pageqlock));
-	KASSERT((pg->pqflags & PQ_FIXED) == 0);
+	KASSERT((pg->flags & PG_DEVICE) == 0);
 	if (pg->wire_count != 0) {
 		return;
 	}
@@ -2210,11 +2209,23 @@
 {
 
 	return
-	    (vm_physseg_find_device(atop(pa), NULL) != -1) ||
 	    (vm_physseg_find(atop(pa), NULL) != -1);
 }
 
 /*
+ * uvm_pageismanaged_device: test it see that a page (specified by
+ * PA) is on a managed device physcal segment.
+ */
+
+bool
+uvm_pageismanaged_device(paddr_t pa)
+{
+
+	return
+	    (vm_physseg_find_device(atop(pa), NULL) != -1);
+}
+
+/*
  * uvm_page_lookup_freelist: look up the free list for the specified page
  */
 

Index: src/sys/uvm/uvm_page.h
diff -u src/sys/uvm/uvm_page.h:1.59.2.32 src/sys/uvm/uvm_page.h:1.59.2.33
--- src/sys/uvm/uvm_page.h:1.59.2.32	Wed Oct 27 14:51:30 2010
+++ src/sys/uvm/uvm_page.h	Thu Nov  4 08:47:38 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_page.h,v 1.59.2.32 2010/10/27 14:51:30 uebayasi Exp $	*/
+/*	$NetBSD: uvm_page.h,v 1.59.2.33 2010/11/04 08:47:38 uebayasi Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -181,6 +181,7 @@
 #define	PG_RDONLY	0x0080		/* page must be mapped read-only */
 #define	PG_ZERO		0x0100		/* page is pre-zero'd */
 #define	PG_MARKER	0x0200		/* dummy marker page */
+#define	PG_DEVICE	0x0400		/* page is on device segment */
 
 #define PG_PAGER1	0x1000		/* pager-specific flag */
 
@@ -195,7 +196,6 @@
 					   uvm_object */
 #define PQ_SWAPBACKED	(PQ_ANON|PQ_AOBJ)
 #define PQ_READAHEAD	0x0008	/* read-ahead but has not been "hit" yet */
-#define PQ_FIXED	0x0010	/* resident page (never paged out) */
 
 #define PQ_PRIVATE1	0x0100
 #define PQ_PRIVATE2	0x0200
@@ -303,6 +303,7 @@
 void uvm_pagewire(struct vm_page *);
 void uvm_pagezero(struct vm_page *);
 bool uvm_pageismanaged(paddr_t);
+bool uvm_pageismanaged_device(paddr_t);
 
 int uvm_page_lookup_freelist(struct vm_page *);
 

Reply via email to