Module Name: src
Committed By: uebayasi
Date: Tue Apr 27 07:19:29 UTC 2010
Modified Files:
src/sys/arch/acorn26/acorn26 [uebayasi-xip]: pmap.c
src/sys/arch/arm/arm32 [uebayasi-xip]: pmap.c
src/sys/arch/hppa/hppa [uebayasi-xip]: pmap.c
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/arch/sh3/sh3 [uebayasi-xip]: pmap.c
src/sys/arch/sparc64/sparc64 [uebayasi-xip]: pmap.c
src/sys/arch/x86/x86 [uebayasi-xip]: pmap.c
Log Message:
Support PMAP_UNMANAGED in some pmaps.
(Others should be converted eventually, but no problem while managed
device page is enabled.)
To generate a diff of this commit:
cvs rdiff -u -r1.30 -r1.30.2.1 src/sys/arch/acorn26/acorn26/pmap.c
cvs rdiff -u -r1.211.2.9 -r1.211.2.10 src/sys/arch/arm/arm32/pmap.c
cvs rdiff -u -r1.63.2.1 -r1.63.2.2 src/sys/arch/hppa/hppa/pmap.c
cvs rdiff -u -r1.55 -r1.55.2.1 src/sys/arch/m68k/m68k/pmap_motorola.c
cvs rdiff -u -r1.188.2.1 -r1.188.2.2 src/sys/arch/mips/mips/pmap.c
cvs rdiff -u -r1.60 -r1.60.2.1 src/sys/arch/powerpc/ibm4xx/pmap.c
cvs rdiff -u -r1.74.2.1 -r1.74.2.2 src/sys/arch/sh3/sh3/pmap.c
cvs rdiff -u -r1.250.2.1 -r1.250.2.2 src/sys/arch/sparc64/sparc64/pmap.c
cvs rdiff -u -r1.100.2.1 -r1.100.2.2 src/sys/arch/x86/x86/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/acorn26/acorn26/pmap.c
diff -u src/sys/arch/acorn26/acorn26/pmap.c:1.30 src/sys/arch/acorn26/acorn26/pmap.c:1.30.2.1
--- src/sys/arch/acorn26/acorn26/pmap.c:1.30 Sat Nov 7 07:27:40 2009
+++ src/sys/arch/acorn26/acorn26/pmap.c Tue Apr 27 07:19:27 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.30 2009/11/07 07:27:40 cegger Exp $ */
+/* $NetBSD: pmap.c,v 1.30.2.1 2010/04/27 07:19:27 uebayasi Exp $ */
/*-
* Copyright (c) 1997, 1998, 2000 Ben Harris
* All rights reserved.
@@ -102,7 +102,7 @@
#include <sys/param.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.30 2009/11/07 07:27:40 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.30.2.1 2010/04/27 07:19:27 uebayasi Exp $");
#include <sys/kernel.h> /* for cold */
#include <sys/malloc.h>
@@ -634,7 +634,8 @@
UVMHIST_FUNC("pmap_enter");
UVMHIST_CALLED(pmaphist);
- return pmap_enter1(pmap, va, pa, prot, flags, 0);
+ return pmap_enter1(pmap, va, pa, prot, flags,
+ (flags & PMAP_UNMANAGED) != 0);
}
static int
Index: src/sys/arch/arm/arm32/pmap.c
diff -u src/sys/arch/arm/arm32/pmap.c:1.211.2.9 src/sys/arch/arm/arm32/pmap.c:1.211.2.10
--- src/sys/arch/arm/arm32/pmap.c:1.211.2.9 Thu Feb 25 03:30:22 2010
+++ src/sys/arch/arm/arm32/pmap.c Tue Apr 27 07:19:28 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.211.2.9 2010/02/25 03:30:22 uebayasi Exp $ */
+/* $NetBSD: pmap.c,v 1.211.2.10 2010/04/27 07:19:28 uebayasi Exp $ */
/*
* Copyright 2003 Wasabi Systems, Inc.
@@ -213,7 +213,7 @@
#include <machine/param.h>
#include <arm/arm32/katelib.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.211.2.9 2010/02/25 03:30:22 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.211.2.10 2010/04/27 07:19:28 uebayasi Exp $");
#ifdef PMAP_DEBUG
@@ -2781,7 +2781,8 @@
* Get a pointer to the page. Later on in this function, we
* test for a managed page by checking pg != NULL.
*/
- pg = pmap_initialized ? PHYS_TO_VM_PAGE(pa) : NULL;
+ pg = (pmap_initialized && ((flags & PMAP_UNMANAGED) == 0)) ?
+ PHYS_TO_VM_PAGE(pa) : NULL;
nflags = 0;
if (prot & VM_PROT_WRITE)
Index: src/sys/arch/hppa/hppa/pmap.c
diff -u src/sys/arch/hppa/hppa/pmap.c:1.63.2.1 src/sys/arch/hppa/hppa/pmap.c:1.63.2.2
--- src/sys/arch/hppa/hppa/pmap.c:1.63.2.1 Thu Feb 25 04:11:29 2010
+++ src/sys/arch/hppa/hppa/pmap.c Tue Apr 27 07:19:28 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.63.2.1 2010/02/25 04:11:29 uebayasi Exp $ */
+/* $NetBSD: pmap.c,v 1.63.2.2 2010/04/27 07:19:28 uebayasi 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.63.2.1 2010/02/25 04:11:29 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.63.2.2 2010/04/27 07:19:28 uebayasi Exp $");
#include "opt_device_page.h"
#include "opt_xip.h"
@@ -1306,7 +1306,8 @@
ptp->wire_count++;
}
- if (pmap_initialized && (pg = PHYS_TO_VM_PAGE(pa))) {
+ if (pmap_initialized && ((flags & PMAP_UNMANAGED) == 0) &&
+ (pg = PHYS_TO_VM_PAGE(pa))) {
struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
mutex_enter(&md->pvh_lock);
Index: src/sys/arch/m68k/m68k/pmap_motorola.c
diff -u src/sys/arch/m68k/m68k/pmap_motorola.c:1.55 src/sys/arch/m68k/m68k/pmap_motorola.c:1.55.2.1
--- src/sys/arch/m68k/m68k/pmap_motorola.c:1.55 Fri Dec 11 18:28:35 2009
+++ src/sys/arch/m68k/m68k/pmap_motorola.c Tue Apr 27 07:19:28 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap_motorola.c,v 1.55 2009/12/11 18:28:35 tsutsui Exp $ */
+/* $NetBSD: pmap_motorola.c,v 1.55.2.1 2010/04/27 07:19:28 uebayasi Exp $ */
/*-
* Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -117,7 +117,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap_motorola.c,v 1.55 2009/12/11 18:28:35 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap_motorola.c,v 1.55.2.1 2010/04/27 07:19:28 uebayasi Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1270,7 +1270,7 @@
* Note that we raise IPL while manipulating pv_table
* since pmap_enter can be called at interrupt time.
*/
- if (PAGE_IS_MANAGED(pa)) {
+ if (PAGE_IS_MANAGED(pa) && ((flags & PMAP_UNMANAGED) == 0)) {
struct pv_header *pvh;
struct pv_entry *pv, *npv;
int s;
Index: src/sys/arch/mips/mips/pmap.c
diff -u src/sys/arch/mips/mips/pmap.c:1.188.2.1 src/sys/arch/mips/mips/pmap.c:1.188.2.2
--- src/sys/arch/mips/mips/pmap.c:1.188.2.1 Thu Feb 25 04:46:28 2010
+++ src/sys/arch/mips/mips/pmap.c Tue Apr 27 07:19:28 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.188.2.1 2010/02/25 04:46:28 uebayasi Exp $ */
+/* $NetBSD: pmap.c,v 1.188.2.2 2010/04/27 07:19:28 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.1 2010/02/25 04:46:28 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.188.2.2 2010/04/27 07:19:28 uebayasi Exp $");
/*
* Manages physical address maps.
@@ -1190,7 +1190,10 @@
if (!(prot & VM_PROT_READ))
panic("pmap_enter: prot");
#endif
- pg = PHYS_TO_VM_PAGE(pa);
+ if ((flags & PMAP_UNMANAGED) != 0)
+ pg = NULL;
+ else
+ pg = PHYS_TO_VM_PAGE(pa);
if (pg) {
struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
Index: src/sys/arch/powerpc/ibm4xx/pmap.c
diff -u src/sys/arch/powerpc/ibm4xx/pmap.c:1.60 src/sys/arch/powerpc/ibm4xx/pmap.c:1.60.2.1
--- src/sys/arch/powerpc/ibm4xx/pmap.c:1.60 Sat Nov 21 17:40:29 2009
+++ src/sys/arch/powerpc/ibm4xx/pmap.c Tue Apr 27 07:19:29 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.60 2009/11/21 17:40:29 rmind Exp $ */
+/* $NetBSD: pmap.c,v 1.60.2.1 2010/04/27 07:19:29 uebayasi Exp $ */
/*
* Copyright 2001 Wasabi Systems, Inc.
@@ -67,7 +67,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.60 2009/11/21 17:40:29 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.60.2.1 2010/04/27 07:19:29 uebayasi Exp $");
#include <sys/param.h>
#include <sys/malloc.h>
@@ -808,7 +808,7 @@
if (flags & PMAP_WIRED)
flags |= prot;
- managed = uvm_pageismanaged(pa);
+ managed = ((flags & PMAP_UNMANAGED) == 0) && uvm_pageismanaged(pa);
/*
* Generate TTE.
Index: src/sys/arch/sh3/sh3/pmap.c
diff -u src/sys/arch/sh3/sh3/pmap.c:1.74.2.1 src/sys/arch/sh3/sh3/pmap.c:1.74.2.2
--- src/sys/arch/sh3/sh3/pmap.c:1.74.2.1 Thu Feb 25 05:05:23 2010
+++ src/sys/arch/sh3/sh3/pmap.c Tue Apr 27 07:19:29 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.74.2.1 2010/02/25 05:05:23 uebayasi Exp $ */
+/* $NetBSD: pmap.c,v 1.74.2.2 2010/04/27 07:19:29 uebayasi Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.74.2.1 2010/02/25 05:05:23 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.74.2.2 2010/04/27 07:19:29 uebayasi Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -333,7 +333,10 @@
/* "flags" never exceed "prot" */
KDASSERT(prot != 0 && ((flags & VM_PROT_ALL) & ~prot) == 0);
- pg = PHYS_TO_VM_PAGE(pa);
+ if ((flags & PMAP_UNMANAGED) != 0)
+ pg = NULL;
+ else
+ pg = PHYS_TO_VM_PAGE(pa);
entry = (pa & PG_PPN) | PG_4K;
if (flags & PMAP_WIRED)
entry |= _PG_WIRED;
Index: src/sys/arch/sparc64/sparc64/pmap.c
diff -u src/sys/arch/sparc64/sparc64/pmap.c:1.250.2.1 src/sys/arch/sparc64/sparc64/pmap.c:1.250.2.2
--- src/sys/arch/sparc64/sparc64/pmap.c:1.250.2.1 Thu Feb 25 05:54:03 2010
+++ src/sys/arch/sparc64/sparc64/pmap.c Tue Apr 27 07:19:29 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.250.2.1 2010/02/25 05:54:03 uebayasi Exp $ */
+/* $NetBSD: pmap.c,v 1.250.2.2 2010/04/27 07:19:29 uebayasi Exp $ */
/*
*
* Copyright (C) 1996-1999 Eduardo Horvath.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.250.2.1 2010/02/25 05:54:03 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.250.2.2 2010/04/27 07:19:29 uebayasi Exp $");
#undef NO_VCACHE /* Don't forget the locked TLB in dostart */
#define HWREF
@@ -1669,7 +1669,10 @@
/*
* Construct the TTE.
*/
- pg = PHYS_TO_VM_PAGE(pa);
+ if ((flags & PMAP_UNMANAGED) != 0)
+ pg = NULL;
+ else
+ pg = PHYS_TO_VM_PAGE(pa);
if (pg) {
struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
Index: src/sys/arch/x86/x86/pmap.c
diff -u src/sys/arch/x86/x86/pmap.c:1.100.2.1 src/sys/arch/x86/x86/pmap.c:1.100.2.2
--- src/sys/arch/x86/x86/pmap.c:1.100.2.1 Thu Feb 25 02:57:17 2010
+++ src/sys/arch/x86/x86/pmap.c Tue Apr 27 07:19:28 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.100.2.1 2010/02/25 02:57:17 uebayasi Exp $ */
+/* $NetBSD: pmap.c,v 1.100.2.2 2010/04/27 07:19:28 uebayasi Exp $ */
/*
* Copyright (c) 2007 Manuel Bouyer.
@@ -149,7 +149,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.100.2.1 2010/02/25 02:57:17 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.100.2.2 2010/04/27 07:19:28 uebayasi Exp $");
#include "opt_user_ldt.h"
#include "opt_lockdebug.h"
@@ -4063,7 +4063,12 @@
pg = NULL;
else
#endif
- pg = PHYS_TO_VM_PAGE(pa);
+ {
+ if ((flags & PMAP_UNMANAGED) != 0)
+ pg = NULL;
+ else
+ pg = PHYS_TO_VM_PAGE(pa);
+ }
if (pg != NULL) {
/* This is a managed page */
npte |= PG_PVLIST;