Module Name: src Committed By: chs Date: Mon Jan 7 16:59:18 UTC 2013
Modified Files: src/sys/arch/sparc/include: pmap.h vmparam.h src/sys/arch/sparc/sparc: pmap.c Log Message: switch to __USE_TOPDOWN_VM. To generate a diff of this commit: cvs rdiff -u -r1.90 -r1.91 src/sys/arch/sparc/include/pmap.h cvs rdiff -u -r1.42 -r1.43 src/sys/arch/sparc/include/vmparam.h cvs rdiff -u -r1.349 -r1.350 src/sys/arch/sparc/sparc/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/sparc/include/pmap.h diff -u src/sys/arch/sparc/include/pmap.h:1.90 src/sys/arch/sparc/include/pmap.h:1.91 --- src/sys/arch/sparc/include/pmap.h:1.90 Mon Feb 14 10:22:19 2011 +++ src/sys/arch/sparc/include/pmap.h Mon Jan 7 16:59:18 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.90 2011/02/14 10:22:19 he Exp $ */ +/* $NetBSD: pmap.h,v 1.91 2013/01/07 16:59:18 chs Exp $ */ /* * Copyright (c) 1996 @@ -240,7 +240,7 @@ int pmap_dumpmmu(int (*)(dev_t, daddr_t, #define pmap_resident_count(pm) ((pm)->pm_stats.resident_count) #define pmap_wired_count(pm) ((pm)->pm_stats.wired_count) -#define PMAP_PREFER(fo, ap, sz, td) pmap_prefer((fo), (ap)) +#define PMAP_PREFER(fo, ap, sz, td) pmap_prefer((fo), (ap), (sz), (td)) #define PMAP_EXCLUDE_DECLS /* tells MI pmap.h *not* to include decls */ @@ -249,7 +249,7 @@ int pmap_dumpmmu(int (*)(dev_t, daddr_t, void pmap_activate(struct lwp *); void pmap_deactivate(struct lwp *); void pmap_bootstrap(int nmmu, int nctx, int nregion); -void pmap_prefer(vaddr_t, vaddr_t *); +void pmap_prefer(vaddr_t, vaddr_t *, size_t, int); int pmap_pa_exists(paddr_t); void pmap_unwire(pmap_t, vaddr_t); void pmap_copy(pmap_t, pmap_t, vaddr_t, vsize_t, vaddr_t); Index: src/sys/arch/sparc/include/vmparam.h diff -u src/sys/arch/sparc/include/vmparam.h:1.42 src/sys/arch/sparc/include/vmparam.h:1.43 --- src/sys/arch/sparc/include/vmparam.h:1.42 Sun Nov 14 13:33:23 2010 +++ src/sys/arch/sparc/include/vmparam.h Mon Jan 7 16:59:18 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: vmparam.h,v 1.42 2010/11/14 13:33:23 uebayasi Exp $ */ +/* $NetBSD: vmparam.h,v 1.43 2013/01/07 16:59:18 chs Exp $ */ /* * Copyright (c) 1992, 1993 @@ -43,6 +43,8 @@ #ifndef _SPARC_VMPARAM_H_ #define _SPARC_VMPARAM_H_ +#define __USE_TOPDOWN_VM + /* * Machine dependent constants for SPARC */ Index: src/sys/arch/sparc/sparc/pmap.c diff -u src/sys/arch/sparc/sparc/pmap.c:1.349 src/sys/arch/sparc/sparc/pmap.c:1.350 --- src/sys/arch/sparc/sparc/pmap.c:1.349 Sun Nov 4 00:32:47 2012 +++ src/sys/arch/sparc/sparc/pmap.c Mon Jan 7 16:59:18 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.349 2012/11/04 00:32:47 chs Exp $ */ +/* $NetBSD: pmap.c,v 1.350 2013/01/07 16:59:18 chs Exp $ */ /* * Copyright (c) 1996 @@ -56,7 +56,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.349 2012/11/04 00:32:47 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.350 2013/01/07 16:59:18 chs Exp $"); #include "opt_ddb.h" #include "opt_kgdb.h" @@ -7408,21 +7408,32 @@ kvm_iocache(char *va, int npages) * (This will just seg-align mappings.) */ void -pmap_prefer(vaddr_t foff, vaddr_t *vap) +pmap_prefer(vaddr_t foff, vaddr_t *vap, size_t size, int td) { vaddr_t va = *vap; - long d, m; - - if (VA_INHOLE(va)) - va = MMU_HOLE_END; + long m; m = CACHE_ALIAS_DIST; if (m == 0) /* m=0 => no cache aliasing */ return; - d = foff - va; - d &= (m - 1); - *vap = va + d; + if (VA_INHOLE(va)) { + if (td) + va = MMU_HOLE_START - size; + else + va = MMU_HOLE_END; + } + + va = (va & ~(m - 1)) | (foff & (m - 1)); + + if (td) { + if (va > *vap) + va -= m; + } else { + if (va < *vap) + va += m; + } + *vap = va; } void