Module Name: src Committed By: thorpej Date: Tue Aug 18 18:06:54 UTC 2009
Modified Files: src/sys/arch/alpha/alpha: pmap.c src/sys/arch/amiga/amiga: pmap.c src/sys/arch/atari/atari: pmap.c src/sys/arch/m68k/m68k: pmap_motorola.c src/sys/arch/mips/mips: pmap.c trap.c src/sys/arch/powerpc/ibm4xx: pmap.c src/sys/uvm: uvm_page.c uvm_page.h Log Message: Add a real API for testing if a page is a managed page, and adjust callers to stop relying on vm_physseg_find() for this purpose. To generate a diff of this commit: cvs rdiff -u -r1.239 -r1.240 src/sys/arch/alpha/alpha/pmap.c cvs rdiff -u -r1.152 -r1.153 src/sys/arch/amiga/amiga/pmap.c cvs rdiff -u -r1.118 -r1.119 src/sys/arch/atari/atari/pmap.c cvs rdiff -u -r1.44 -r1.45 src/sys/arch/m68k/m68k/pmap_motorola.c cvs rdiff -u -r1.183 -r1.184 src/sys/arch/mips/mips/pmap.c cvs rdiff -u -r1.218 -r1.219 src/sys/arch/mips/mips/trap.c cvs rdiff -u -r1.56 -r1.57 src/sys/arch/powerpc/ibm4xx/pmap.c cvs rdiff -u -r1.149 -r1.150 src/sys/uvm/uvm_page.c cvs rdiff -u -r1.56 -r1.57 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/alpha/alpha/pmap.c diff -u src/sys/arch/alpha/alpha/pmap.c:1.239 src/sys/arch/alpha/alpha/pmap.c:1.240 --- src/sys/arch/alpha/alpha/pmap.c:1.239 Tue Apr 21 21:29:58 2009 +++ src/sys/arch/alpha/alpha/pmap.c Tue Aug 18 18:06:53 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.239 2009/04/21 21:29:58 cegger Exp $ */ +/* $NetBSD: pmap.c,v 1.240 2009/08/18 18:06:53 thorpej Exp $ */ /*- * Copyright (c) 1998, 1999, 2000, 2001, 2007, 2008 The NetBSD Foundation, Inc. @@ -140,7 +140,7 @@ #include <sys/cdefs.h> /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.239 2009/04/21 21:29:58 cegger Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.240 2009/08/18 18:06:53 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -435,8 +435,6 @@ static struct pool_cache pmap_tlb_shootdown_job_cache; #endif /* MULTIPROCESSOR */ -#define PAGE_IS_MANAGED(pa) (vm_physseg_find(atop(pa), NULL) != -1) - /* * Internal routines */ @@ -1306,7 +1304,7 @@ l3pte = PMAP_KERNEL_PTE(sva); if (pmap_pte_v(l3pte)) { #ifdef DIAGNOSTIC - if (PAGE_IS_MANAGED(pmap_pte_pa(l3pte)) && + if (uvm_pageismanaged(pmap_pte_pa(l3pte)) && pmap_pte_pv(l3pte) == 0) panic("pmap_remove: managed page " "without PG_PVLIST for 0x%lx", @@ -2760,7 +2758,7 @@ printf("\tpa = 0x%lx\n", pa); #endif #ifdef DIAGNOSTIC - if (!PAGE_IS_MANAGED(pa)) + if (!uvm_pageismanaged(pa)) panic("pmap_emulate_reference(%p, 0x%lx, %d, %d): " "pa 0x%lx not managed", l, v, user, type, pa); #endif Index: src/sys/arch/amiga/amiga/pmap.c diff -u src/sys/arch/amiga/amiga/pmap.c:1.152 src/sys/arch/amiga/amiga/pmap.c:1.153 --- src/sys/arch/amiga/amiga/pmap.c:1.152 Tue Apr 21 21:29:58 2009 +++ src/sys/arch/amiga/amiga/pmap.c Tue Aug 18 18:06:53 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.152 2009/04/21 21:29:58 cegger Exp $ */ +/* $NetBSD: pmap.c,v 1.153 2009/08/18 18:06:53 thorpej Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -100,7 +100,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.152 2009/04/21 21:29:58 cegger Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.153 2009/08/18 18:06:53 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -321,8 +321,7 @@ #define PRM_CFLUSH 0x02 #define PRM_KEEPPTPAGE 0x04 -#define PAGE_IS_MANAGED(pa) (pmap_initialized \ - && vm_physseg_find(atop((pa)), NULL) != -1) +#define PAGE_IS_MANAGED(pa) (pmap_initialized && uvm_pageismanaged(pa)) static inline struct pv_entry *pa_to_pvh(paddr_t pa); static inline char *pa_to_attribute(paddr_t pa); Index: src/sys/arch/atari/atari/pmap.c diff -u src/sys/arch/atari/atari/pmap.c:1.118 src/sys/arch/atari/atari/pmap.c:1.119 --- src/sys/arch/atari/atari/pmap.c:1.118 Tue Apr 21 21:29:59 2009 +++ src/sys/arch/atari/atari/pmap.c Tue Aug 18 18:06:53 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.118 2009/04/21 21:29:59 cegger Exp $ */ +/* $NetBSD: pmap.c,v 1.119 2009/08/18 18:06:53 thorpej Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -100,7 +100,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.118 2009/04/21 21:29:59 cegger Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.119 2009/08/18 18:06:53 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -316,8 +316,7 @@ #define PRM_CFLUSH 0x02 #define PRM_KEEPPTPAGE 0x04 -#define PAGE_IS_MANAGED(pa) (pmap_initialized \ - && vm_physseg_find(atop((pa)), NULL) != -1) +#define PAGE_IS_MANAGED(pa) (pmap_initialized && uvm_pageismanaged(pa)) static inline struct pv_entry *pa_to_pvh(paddr_t pa); static inline char *pa_to_attribute(paddr_t pa); Index: src/sys/arch/m68k/m68k/pmap_motorola.c diff -u src/sys/arch/m68k/m68k/pmap_motorola.c:1.44 src/sys/arch/m68k/m68k/pmap_motorola.c:1.45 --- src/sys/arch/m68k/m68k/pmap_motorola.c:1.44 Tue Apr 21 21:29:59 2009 +++ src/sys/arch/m68k/m68k/pmap_motorola.c Tue Aug 18 18:06:53 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_motorola.c,v 1.44 2009/04/21 21:29:59 cegger Exp $ */ +/* $NetBSD: pmap_motorola.c,v 1.45 2009/08/18 18:06:53 thorpej 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.44 2009/04/21 21:29:59 cegger Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_motorola.c,v 1.45 2009/08/18 18:06:53 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -270,8 +270,7 @@ void pmap_free_pv(struct pv_entry *); void pmap_collect_pv(void); -#define PAGE_IS_MANAGED(pa) (pmap_initialized && \ - vm_physseg_find(atop((pa)), NULL) != -1) +#define PAGE_IS_MANAGED(pa) (pmap_initialized && uvm_pageismanaged(pa)) static inline struct pv_entry *pa_to_pvh(paddr_t pa); static inline char *pa_to_attribute(paddr_t pa); Index: src/sys/arch/mips/mips/pmap.c diff -u src/sys/arch/mips/mips/pmap.c:1.183 src/sys/arch/mips/mips/pmap.c:1.184 --- src/sys/arch/mips/mips/pmap.c:1.183 Mon Jun 29 13:22:51 2009 +++ src/sys/arch/mips/mips/pmap.c Tue Aug 18 18:06:53 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.183 2009/06/29 13:22:51 tsutsui Exp $ */ +/* $NetBSD: pmap.c,v 1.184 2009/08/18 18:06:53 thorpej 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.183 2009/06/29 13:22:51 tsutsui Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.184 2009/08/18 18:06:53 thorpej Exp $"); /* * Manages physical address maps. @@ -210,8 +210,7 @@ bool pmap_initialized = false; -#define PAGE_IS_MANAGED(pa) \ - (pmap_initialized == true && vm_physseg_find(atop(pa), NULL) != -1) +#define PAGE_IS_MANAGED(pa) (pmap_initialized && uvm_pageismanaged(pa)) #define PMAP_IS_ACTIVE(pm) \ ((pm) == pmap_kernel() || \ Index: src/sys/arch/mips/mips/trap.c diff -u src/sys/arch/mips/mips/trap.c:1.218 src/sys/arch/mips/mips/trap.c:1.219 --- src/sys/arch/mips/mips/trap.c:1.218 Thu Aug 6 23:07:55 2009 +++ src/sys/arch/mips/mips/trap.c Tue Aug 18 18:06:53 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: trap.c,v 1.218 2009/08/06 23:07:55 matt Exp $ */ +/* $NetBSD: trap.c,v 1.219 2009/08/18 18:06:53 thorpej Exp $ */ /* * Copyright (c) 1992, 1993 @@ -78,7 +78,7 @@ #include <sys/cdefs.h> /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.218 2009/08/06 23:07:55 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.219 2009/08/18 18:06:53 thorpej Exp $"); #include "opt_cputype.h" /* which mips CPU levels do we support? */ #include "opt_ddb.h" @@ -289,11 +289,13 @@ vaddr &= ~PGOFSET; MachTLBUpdate(vaddr, entry); pa = mips_tlbpfn_to_paddr(entry); - if (!IS_VM_PHYSADDR(pa)) { +#if defined(DIAGNOSTIC) + if (!uvm_pageismanaged(pa)) { printf("ktlbmod: va %#lx pa %#llx\n", vaddr, (long long)pa); panic("ktlbmod: unmanaged page"); } +#endif pmap_set_modified(pa); return; /* KERN */ } @@ -324,11 +326,13 @@ (pmap->pm_asid << MIPS_TLB_PID_SHIFT); MachTLBUpdate(vaddr, entry); pa = mips_tlbpfn_to_paddr(entry); - if (!IS_VM_PHYSADDR(pa)) { +#if defined(DIAGNOSTIC) + if (!uvm_pageismanaged(pa)) { printf("utlbmod: va %#lx pa %#llx\n", vaddr, (long long)pa); panic("utlbmod: unmanaged page"); } +#endif pmap_set_modified(pa); if (type & T_USER) userret(l); Index: src/sys/arch/powerpc/ibm4xx/pmap.c diff -u src/sys/arch/powerpc/ibm4xx/pmap.c:1.56 src/sys/arch/powerpc/ibm4xx/pmap.c:1.57 --- src/sys/arch/powerpc/ibm4xx/pmap.c:1.56 Tue Aug 11 17:04:19 2009 +++ src/sys/arch/powerpc/ibm4xx/pmap.c Tue Aug 18 18:06:53 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.56 2009/08/11 17:04:19 matt Exp $ */ +/* $NetBSD: pmap.c,v 1.57 2009/08/18 18:06:53 thorpej Exp $ */ /* * Copyright 2001 Wasabi Systems, Inc. @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.56 2009/08/11 17:04:19 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.57 2009/08/18 18:06:53 thorpej Exp $"); #include <sys/param.h> #include <sys/malloc.h> @@ -812,7 +812,7 @@ { int s; u_int tte; - int managed; + bool managed; /* * Have to remove any existing mapping first. @@ -822,9 +822,7 @@ if (flags & PMAP_WIRED) flags |= prot; - managed = 0; - if (vm_physseg_find(atop(pa), NULL) != -1) - managed = 1; + managed = uvm_pageismanaged(pa); /* * Generate TTE. Index: src/sys/uvm/uvm_page.c diff -u src/sys/uvm/uvm_page.c:1.149 src/sys/uvm/uvm_page.c:1.150 --- src/sys/uvm/uvm_page.c:1.149 Tue Aug 11 16:27:08 2009 +++ src/sys/uvm/uvm_page.c Tue Aug 18 18:06:53 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_page.c,v 1.149 2009/08/11 16:27:08 matt Exp $ */ +/* $NetBSD: uvm_page.c,v 1.150 2009/08/18 18:06:53 thorpej Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -71,7 +71,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_page.c,v 1.149 2009/08/11 16:27:08 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_page.c,v 1.150 2009/08/18 18:06:53 thorpej Exp $"); #include "opt_uvmhist.h" #include "opt_readahead.h" @@ -1850,6 +1850,17 @@ } /* + * uvm_pageismanaged: test it see that a page (specified by PA) is managed. + */ + +bool +uvm_pageismanaged(paddr_t pa) +{ + + return (vm_physseg_find(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.56 src/sys/uvm/uvm_page.h:1.57 --- src/sys/uvm/uvm_page.h:1.56 Fri Jan 16 02:33:14 2009 +++ src/sys/uvm/uvm_page.h Tue Aug 18 18:06:54 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_page.h,v 1.56 2009/01/16 02:33:14 yamt Exp $ */ +/* $NetBSD: uvm_page.h,v 1.57 2009/08/18 18:06:54 thorpej Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -285,6 +285,7 @@ void uvm_pagewake(struct vm_page *); void uvm_pagewire(struct vm_page *); void uvm_pagezero(struct vm_page *); +bool uvm_pageismanaged(paddr_t); int uvm_page_lookup_freelist(struct vm_page *); @@ -383,12 +384,6 @@ /* - * IS_VM_PHYSADDR: only used my mips/pmax/pica trap/pmap. - */ - -#define IS_VM_PHYSADDR(PA) (vm_physseg_find(atop(PA), NULL) != -1) - -/* * PHYS_TO_VM_PAGE: find vm_page for a PA. used by MI code to get vm_pages * back from an I/O mapping (ugh!). used in some MD code as well. */