summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/arch/arm/arm/pmap.c11
-rw-r--r--sys/arch/arm/include/pmap.h4
-rw-r--r--sys/arch/hppa/include/pmap.h18
-rw-r--r--sys/arch/hppa64/include/pmap.h18
-rw-r--r--sys/arch/m68k/include/pmap_motorola.h6
-rw-r--r--sys/arch/m68k/m68k/pmap_motorola.c13
-rw-r--r--sys/arch/mips64/include/pmap.h4
-rw-r--r--sys/arch/mips64/mips64/pmap.c17
-rw-r--r--sys/arch/sh/include/pmap.h4
-rw-r--r--sys/arch/sh/sh/pmap.c15
-rw-r--r--sys/arch/solbourne/include/pmap.h23
-rw-r--r--sys/arch/solbourne/solbourne/pmap.c7
-rw-r--r--sys/arch/sparc/include/pmap.h4
-rw-r--r--sys/arch/sparc/sparc/pmap.c22
-rw-r--r--sys/arch/sparc64/include/pmap.h2
-rw-r--r--sys/uvm/uvm_map.c6
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)