diff options
-rw-r--r-- | sys/arch/arm/arm/pmap.c | 11 | ||||
-rw-r--r-- | sys/arch/arm/include/pmap.h | 4 | ||||
-rw-r--r-- | sys/arch/hppa/include/pmap.h | 18 | ||||
-rw-r--r-- | sys/arch/hppa64/include/pmap.h | 18 | ||||
-rw-r--r-- | sys/arch/m68k/include/pmap_motorola.h | 6 | ||||
-rw-r--r-- | sys/arch/m68k/m68k/pmap_motorola.c | 13 | ||||
-rw-r--r-- | sys/arch/mips64/include/pmap.h | 4 | ||||
-rw-r--r-- | sys/arch/mips64/mips64/pmap.c | 17 | ||||
-rw-r--r-- | sys/arch/sh/include/pmap.h | 4 | ||||
-rw-r--r-- | sys/arch/sh/sh/pmap.c | 15 | ||||
-rw-r--r-- | sys/arch/solbourne/include/pmap.h | 23 | ||||
-rw-r--r-- | sys/arch/solbourne/solbourne/pmap.c | 7 | ||||
-rw-r--r-- | sys/arch/sparc/include/pmap.h | 4 | ||||
-rw-r--r-- | sys/arch/sparc/sparc/pmap.c | 22 | ||||
-rw-r--r-- | sys/arch/sparc64/include/pmap.h | 2 | ||||
-rw-r--r-- | sys/uvm/uvm_map.c | 6 |
16 files changed, 75 insertions, 99 deletions
diff --git a/sys/arch/arm/arm/pmap.c b/sys/arch/arm/arm/pmap.c index 689e1bdf64f..2be1a0f025e 100644 --- a/sys/arch/arm/arm/pmap.c +++ b/sys/arch/arm/arm/pmap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap.c,v 1.28 2010/11/28 20:44:15 miod Exp $ */ +/* $OpenBSD: pmap.c,v 1.29 2010/12/06 20:57:13 miod Exp $ */ /* $NetBSD: pmap.c,v 1.147 2004/01/18 13:03:50 scw Exp $ */ /* @@ -5025,17 +5025,16 @@ pmap_uarea(vaddr_t va) uint32_t pmap_alias_dist; uint32_t pmap_alias_bits; -void -pmap_prefer(vaddr_t foff, vaddr_t *vap) +vaddr_t +pmap_prefer(vaddr_t foff, vaddr_t va) { - vaddr_t va = *vap; long d, m; m = pmap_alias_dist; if (m == 0) /* m=0 => no cache aliasing */ - return; + return va; d = foff - va; d &= (m - 1); - *vap = va + d; + return va + d; } diff --git a/sys/arch/arm/include/pmap.h b/sys/arch/arm/include/pmap.h index f3d2199c913..d5877c33475 100644 --- a/sys/arch/arm/include/pmap.h +++ b/sys/arch/arm/include/pmap.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap.h,v 1.13 2010/11/27 20:45:27 miod Exp $ */ +/* $OpenBSD: pmap.h,v 1.14 2010/12/06 20:57:15 miod Exp $ */ /* $NetBSD: pmap.h,v 1.76 2003/09/06 09:10:46 rearnsha Exp $ */ /* @@ -617,7 +617,7 @@ extern void (*pmap_zero_page_func)(struct vm_page *); #ifndef _LOCORE /* pmap_prefer bits for VIPT ARMv7 */ #define PMAP_PREFER(fo, ap) pmap_prefer((fo), (ap)) -void pmap_prefer(vaddr_t, vaddr_t *); +vaddr_t pmap_prefer(vaddr_t, vaddr_t); extern uint32_t pmap_alias_dist; extern uint32_t pmap_alias_bits; diff --git a/sys/arch/hppa/include/pmap.h b/sys/arch/hppa/include/pmap.h index 4e8003e16e8..5384ca2bd6e 100644 --- a/sys/arch/hppa/include/pmap.h +++ b/sys/arch/hppa/include/pmap.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap.h,v 1.38 2010/11/18 21:21:36 miod Exp $ */ +/* $OpenBSD: pmap.h,v 1.39 2010/12/06 20:57:16 miod Exp $ */ /* * Copyright (c) 2002-2004 Michael Shalayeff @@ -91,13 +91,15 @@ struct vm_page *pmap_unmap_direct(vaddr_t); * according to the parisc manual aliased va's should be * different by high 12 bits only. */ -#define PMAP_PREFER(o,h) do { \ - vaddr_t pmap_prefer_hint; \ - pmap_prefer_hint = (*(h) & HPPA_PGAMASK) | ((o) & HPPA_PGAOFF); \ - if (pmap_prefer_hint < *(h)) \ - pmap_prefer_hint += HPPA_PGALIAS; \ - *(h) = pmap_prefer_hint; \ -} while(0) +#define PMAP_PREFER(o,h) pmap_prefer(o, h) +static __inline__ vaddr_t +pmap_prefer(vaddr_t offs, vaddr_t hint) +{ + vaddr_t pmap_prefer_hint = (hint & HPPA_PGAMASK) | (offs & HPPA_PGAOFF); + if (pmap_prefer_hint < hint) + pmap_prefer_hint += HPPA_PGALIAS; + return pmap_prefer_hint; +} #define pmap_sid2pid(s) (((s) + 1) << 1) #define pmap_kernel() (&kernel_pmap_store) diff --git a/sys/arch/hppa64/include/pmap.h b/sys/arch/hppa64/include/pmap.h index c6f2167d8d9..9d7694cf1e6 100644 --- a/sys/arch/hppa64/include/pmap.h +++ b/sys/arch/hppa64/include/pmap.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap.h,v 1.2 2007/09/10 18:49:45 miod Exp $ */ +/* $OpenBSD: pmap.h,v 1.3 2010/12/06 20:57:16 miod Exp $ */ /* * Copyright (c) 2005 Michael Shalayeff @@ -58,13 +58,15 @@ extern struct pmap kernel_pmap_store; * according to the parisc manual aliased va's should be * different by high 12 bits only. */ -#define PMAP_PREFER(o,h) do { \ - vaddr_t pmap_prefer_hint; \ - pmap_prefer_hint = (*(h) & HPPA_PGAMASK) | ((o) & HPPA_PGAOFF); \ - if (pmap_prefer_hint < *(h)) \ - pmap_prefer_hint += HPPA_PGALIAS; \ - *(h) = pmap_prefer_hint; \ -} while(0) +#define PMAP_PREFER(o,h) pmap_prefer(o, h) +static __inline__ vaddr_t +pmap_prefer(vaddr_t offs, vaddr_t hint) +{ + vaddr_t pmap_prefer_hint = (hint & HPPA_PGAMASK) | (offs & HPPA_PGAOFF); + if (pmap_prefer_hint < hint) + pmap_prefer_hint += HPPA_PGALIAS; + return pmap_prefer_hint; +} #define PMAP_GROWKERNEL #define PMAP_STEAL_MEMORY diff --git a/sys/arch/m68k/include/pmap_motorola.h b/sys/arch/m68k/include/pmap_motorola.h index 0097ad550f2..8062704b872 100644 --- a/sys/arch/m68k/include/pmap_motorola.h +++ b/sys/arch/m68k/include/pmap_motorola.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap_motorola.h,v 1.19 2010/11/18 21:21:38 miod Exp $ */ +/* $OpenBSD: pmap_motorola.h,v 1.20 2010/12/06 20:57:16 miod Exp $ */ /* * Copyright (c) 1987 Carnegie-Mellon University @@ -138,8 +138,8 @@ int pmap_enter_cache(pmap_t, vaddr_t, paddr_t, vm_prot_t, int, pt_entry_t); void pmap_kenter_cache(vaddr_t, paddr_t, pt_entry_t); #ifdef M68K_MMU_HP -void pmap_prefer(vaddr_t, vaddr_t *); -#define PMAP_PREFER(foff, vap) pmap_prefer((foff), (vap)) +vaddr_t pmap_prefer(vaddr_t, vaddr_t); +#define PMAP_PREFER(foff, va) pmap_prefer((foff), (va)) #endif #endif /* _KERNEL */ diff --git a/sys/arch/m68k/m68k/pmap_motorola.c b/sys/arch/m68k/m68k/pmap_motorola.c index 2b12a66b12a..c19ef01ad53 100644 --- a/sys/arch/m68k/m68k/pmap_motorola.c +++ b/sys/arch/m68k/m68k/pmap_motorola.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap_motorola.c,v 1.58 2010/06/29 20:30:32 guenther Exp $ */ +/* $OpenBSD: pmap_motorola.c,v 1.59 2010/12/06 20:57:16 miod Exp $ */ /* * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -2004,22 +2004,21 @@ pmap_is_modified(pg) * Find the first virtual address >= *vap that does not * cause a virtually-tagged cache alias problem. */ -void -pmap_prefer(foff, vap) - vaddr_t foff, *vap; +vaddr_t +pmap_prefer(vaddr_t foff, vaddr_t va) { - vaddr_t va; vsize_t d; #ifdef M68K_MMU_MOTOROLA if (pmap_aliasmask) #endif { - va = *vap; d = foff - va; d &= pmap_aliasmask; - *vap = va + d; + va += d; } + + return va; } #endif /* M68K_MMU_HP */ diff --git a/sys/arch/mips64/include/pmap.h b/sys/arch/mips64/include/pmap.h index ee632dfcffa..2bf522895f7 100644 --- a/sys/arch/mips64/include/pmap.h +++ b/sys/arch/mips64/include/pmap.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap.h,v 1.22 2010/11/28 20:30:51 miod Exp $ */ +/* $OpenBSD: pmap.h,v 1.23 2010/12/06 20:57:17 miod Exp $ */ /* * Copyright (c) 1987 Carnegie-Mellon University @@ -131,7 +131,7 @@ extern struct pmap *const kernel_pmap_ptr; void pmap_bootstrap(void); int pmap_is_page_ro( pmap_t, vaddr_t, pt_entry_t); void pmap_kenter_cache(vaddr_t va, paddr_t pa, vm_prot_t prot, int cache); -void pmap_prefer(vaddr_t, vaddr_t *); +vaddr_t pmap_prefer(vaddr_t, vaddr_t); void pmap_set_modify(vm_page_t); void pmap_page_cache(vm_page_t, int); diff --git a/sys/arch/mips64/mips64/pmap.c b/sys/arch/mips64/mips64/pmap.c index d404043f642..f90562c99ec 100644 --- a/sys/arch/mips64/mips64/pmap.c +++ b/sys/arch/mips64/mips64/pmap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap.c,v 1.51 2010/11/28 20:30:54 miod Exp $ */ +/* $OpenBSD: pmap.c,v 1.52 2010/12/06 20:57:17 miod Exp $ */ /* * Copyright (c) 2001-2004 Opsycon AB (www.opsycon.se / www.opsycon.com) @@ -1119,16 +1119,13 @@ pmap_extract(pmap_t pmap, vaddr_t va, paddr_t *pap) * Find first virtual address >= *vap that * will not cause cache aliases. */ -void -pmap_prefer(paddr_t foff, vaddr_t *vap) +vaddr_t +pmap_prefer(paddr_t foff, vaddr_t va) { - if (CpuCacheAliasMask != 0) { -#if 1 - *vap += (foff - *vap) & (CpuCacheAliasMask | PAGE_MASK); -#else - *vap += (*vap ^ foff) & CpuCacheAliasMask; -#endif - } + if (CpuCacheAliasMask != 0) + va += (foff - va) & (CpuCacheAliasMask | PAGE_MASK); + + return va; } /* diff --git a/sys/arch/sh/include/pmap.h b/sys/arch/sh/include/pmap.h index 2a8de5f33bf..e4d031f149b 100644 --- a/sys/arch/sh/include/pmap.h +++ b/sys/arch/sh/include/pmap.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap.h,v 1.7 2010/11/18 21:21:38 miod Exp $ */ +/* $OpenBSD: pmap.h,v 1.8 2010/12/06 20:57:17 miod Exp $ */ /* $NetBSD: pmap.h,v 1.28 2006/04/10 23:12:11 uwe Exp $ */ /*- @@ -81,7 +81,7 @@ pmap_remove_all(struct pmap *pmap) */ #ifdef SH4 #define PMAP_PREFER(pa, va) pmap_prefer((pa), (va)) -void pmap_prefer(vaddr_t, vaddr_t *); +vaddr_t pmap_prefer(vaddr_t, vaddr_t); #endif /* SH4 */ #define __HAVE_PMAP_DIRECT diff --git a/sys/arch/sh/sh/pmap.c b/sys/arch/sh/sh/pmap.c index 9678826343b..c8a624edcac 100644 --- a/sys/arch/sh/sh/pmap.c +++ b/sys/arch/sh/sh/pmap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap.c,v 1.15 2010/11/20 20:33:24 miod Exp $ */ +/* $OpenBSD: pmap.c,v 1.16 2010/12/06 20:57:17 miod Exp $ */ /* $NetBSD: pmap.c,v 1.55 2006/08/07 23:19:36 tsutsui Exp $ */ /*- @@ -890,16 +890,13 @@ pmap_clear_modify(struct vm_page *pg) * Find first virtual address >= *vap that doesn't cause * a virtual cache alias against vaddr_t foff. */ -void -pmap_prefer(vaddr_t foff, vaddr_t *vap) +vaddr_t +pmap_prefer(vaddr_t foff, vaddr_t va) { - vaddr_t va; - - if (SH_HAS_VIRTUAL_ALIAS) { - va = *vap; + if (SH_HAS_VIRTUAL_ALIAS) + va += ((foff - va) & sh_cache_prefer_mask); - *vap = va + ((foff - va) & sh_cache_prefer_mask); - } + return va; } #endif /* SH4 */ diff --git a/sys/arch/solbourne/include/pmap.h b/sys/arch/solbourne/include/pmap.h index 0b48944330f..8d00def393d 100644 --- a/sys/arch/solbourne/include/pmap.h +++ b/sys/arch/solbourne/include/pmap.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap.h,v 1.3 2010/11/18 21:21:38 miod Exp $ */ +/* $OpenBSD: pmap.h,v 1.4 2010/12/06 20:57:18 miod Exp $ */ /* * Copyright (c) 2005, Miodrag Vallat * @@ -79,35 +79,16 @@ extern struct pmap kernel_pmap_store; struct proc; void kvm_setcache(caddr_t, int, int); void switchexit(struct proc *); /* locore.s */ -void pmap_activate(struct proc *); void pmap_bootstrap(size_t); void pmap_cache_enable(void); void pmap_changeprot(pmap_t, vaddr_t, vm_prot_t, int); -boolean_t pmap_clear_modify(struct vm_page *); -boolean_t pmap_clear_reference(struct vm_page *); -void pmap_copy_page(struct vm_page *, struct vm_page *); -pmap_t pmap_create(void); -void pmap_destroy(pmap_t); -int pmap_enter(pmap_t, vaddr_t, paddr_t, vm_prot_t, int); -boolean_t pmap_extract(pmap_t, vaddr_t, paddr_t *); -void pmap_init(void); -boolean_t pmap_is_modified(struct vm_page *); -boolean_t pmap_is_referenced(struct vm_page *); -void pmap_kenter_pa(vaddr_t, paddr_t, vm_prot_t); -void pmap_kremove(vaddr_t, vsize_t); vaddr_t pmap_map(vaddr_t, paddr_t, paddr_t, int); int pmap_pa_exists(paddr_t); -void pmap_page_protect(struct vm_page *, vm_prot_t); -void pmap_prefer(vaddr_t, vaddr_t *); -void pmap_protect(pmap_t, vaddr_t, vaddr_t, vm_prot_t); -void pmap_reference(pmap_t); +vaddr_t pmap_prefer(vaddr_t, vaddr_t); void pmap_release(pmap_t); void pmap_redzone(void); -void pmap_remove(pmap_t, vaddr_t, vaddr_t); -void pmap_unwire(pmap_t, vaddr_t); void pmap_virtual_space(vaddr_t *, vaddr_t *); void pmap_writetext(unsigned char *, int); -void pmap_zero_page(struct vm_page *); #endif /* _KERNEL */ diff --git a/sys/arch/solbourne/solbourne/pmap.c b/sys/arch/solbourne/solbourne/pmap.c index 49d1aa40dcd..3700f9f55a7 100644 --- a/sys/arch/solbourne/solbourne/pmap.c +++ b/sys/arch/solbourne/solbourne/pmap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap.c,v 1.3 2009/04/10 20:57:28 miod Exp $ */ +/* $OpenBSD: pmap.c,v 1.4 2010/12/06 20:57:18 miod Exp $ */ /* * Copyright (c) 2005, Miodrag Vallat * @@ -597,10 +597,11 @@ pmap_release(struct pmap *pmap) * Returns a preferred virtual address for the given address, which * does not cause a VAC aliasing situation. */ -void -pmap_prefer(vaddr_t foff, vaddr_t *vap) +vaddr_t +pmap_prefer(vaddr_t foff, vaddr_t va) { /* XXX assume no cache aliasing yet */ + return va; } /* diff --git a/sys/arch/sparc/include/pmap.h b/sys/arch/sparc/include/pmap.h index d2727b93faa..2c3c3968ff2 100644 --- a/sys/arch/sparc/include/pmap.h +++ b/sys/arch/sparc/include/pmap.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap.h,v 1.48 2010/07/10 19:32:24 miod Exp $ */ +/* $OpenBSD: pmap.h,v 1.49 2010/12/06 20:57:18 miod Exp $ */ /* $NetBSD: pmap.h,v 1.30 1997/08/04 20:00:47 pk Exp $ */ /* @@ -270,7 +270,7 @@ int pmap_dumpmmu(int (*)(dev_t, daddr64_t, caddr_t, size_t), daddr64 struct proc; void pmap_activate(struct proc *); void pmap_bootstrap(int nmmu, int nctx, int nregion); -void pmap_prefer(vaddr_t, vaddr_t *); +vaddr_t pmap_prefer(vaddr_t, vaddr_t); 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); diff --git a/sys/arch/sparc/sparc/pmap.c b/sys/arch/sparc/sparc/pmap.c index 77121c067f9..1a8c2680a3b 100644 --- a/sys/arch/sparc/sparc/pmap.c +++ b/sys/arch/sparc/sparc/pmap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pmap.c,v 1.157 2010/07/10 19:32:25 miod Exp $ */ +/* $OpenBSD: pmap.c,v 1.158 2010/12/06 20:57:18 miod Exp $ */ /* $NetBSD: pmap.c,v 1.118 1998/05/19 19:00:18 thorpej Exp $ */ /* @@ -6239,13 +6239,10 @@ kvm_setcache(va, npages, cached) * least likely to cause cache aliases. * (This will just seg-align mappings.) */ -void -pmap_prefer(foff, vap) - vaddr_t foff; - vaddr_t *vap; +vaddr_t +pmap_prefer(vaddr_t foff, vaddr_t va) { - vaddr_t va = *vap; - long d, m; + vaddr_t d, m; #if defined(SUN4) || defined(SUN4C) || defined(SUN4E) if (VA_INHOLE(va)) @@ -6253,12 +6250,13 @@ pmap_prefer(foff, vap) #endif m = CACHE_ALIAS_DIST; - if (m == 0) /* m=0 => no cache aliasing */ - return; + if (m != 0) { /* m=0 => no cache aliasing */ + d = foff - va; + d &= (m - 1); + va += d; + } - d = foff - va; - d &= (m - 1); - *vap = va + d; + return va; } void diff --git a/sys/arch/sparc64/include/pmap.h b/sys/arch/sparc64/include/pmap.h index 31f48571b9a..e347dc139d9 100644 --- a/sys/arch/sparc64/include/pmap.h +++ b/sys/arch/sparc64/include/pmap.h @@ -168,7 +168,7 @@ extern struct pmap kernel_pmap_; void pmap_bootstrap(u_long, u_long, u_int, u_int); /* make sure all page mappings are modulo 16K to prevent d$ aliasing */ -#define PMAP_PREFER(pa, va) (*(va) += (((*(va)) ^ (pa)) & VA_ALIAS_MASK)) +#define PMAP_PREFER(pa, va) ((va) + (((va) ^ (pa)) & VA_ALIAS_MASK)) #define PMAP_GROWKERNEL /* turn on pmap_growkernel interface */ diff --git a/sys/uvm/uvm_map.c b/sys/uvm/uvm_map.c index a305f2b0710..37bed97d9d2 100644 --- a/sys/uvm/uvm_map.c +++ b/sys/uvm/uvm_map.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uvm_map.c,v 1.128 2010/09/29 18:04:33 thib Exp $ */ +/* $OpenBSD: uvm_map.c,v 1.129 2010/12/06 20:57:19 miod Exp $ */ /* $NetBSD: uvm_map.c,v 1.86 2000/11/27 08:40:03 chs Exp $ */ /* @@ -1181,7 +1181,7 @@ uvm_map_spacefits(struct vm_map *map, vaddr_t *phint, vsize_t length, * we only do this if a valid offset is specified. */ if (uoffset != UVM_UNKNOWN_OFFSET) - PMAP_PREFER(uoffset, &hint); + hint = PMAP_PREFER(uoffset, hint); #endif if (align != 0) if ((hint & (align - 1)) != 0) @@ -1458,7 +1458,7 @@ uvm_map_findspace(struct vm_map *map, vaddr_t hint, vsize_t length, * we only do this if a valid offset is specified. */ if (uoffset != UVM_UNKNOWN_OFFSET) - PMAP_PREFER(uoffset, &hint); + hint = PMAP_PREFER(uoffset, hint); #endif if (align != 0) { if ((hint & (align - 1)) != 0) |