Module Name:    src
Committed By:   christos
Date:           Sat Sep  3 09:07:54 UTC 2016

Modified Files:
        src/sys/arch/sh3/include: pmap.h vmparam.h
        src/sys/arch/sh3/sh3: pmap.c

Log Message:
Fix pmap_prefer for topdown and turn topdown on.


To generate a diff of this commit:
cvs rdiff -u -r1.35 -r1.36 src/sys/arch/sh3/include/pmap.h
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/sh3/include/vmparam.h
cvs rdiff -u -r1.77 -r1.78 src/sys/arch/sh3/sh3/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/sh3/include/pmap.h
diff -u src/sys/arch/sh3/include/pmap.h:1.35 src/sys/arch/sh3/include/pmap.h:1.36
--- src/sys/arch/sh3/include/pmap.h:1.35	Sun Nov 14 08:33:22 2010
+++ src/sys/arch/sh3/include/pmap.h	Sat Sep  3 05:07:53 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.h,v 1.35 2010/11/14 13:33:22 uebayasi Exp $	*/
+/*	$NetBSD: pmap.h,v 1.36 2016/09/03 09:07:53 christos Exp $	*/
 
 /*-
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -72,8 +72,8 @@ pmap_remove_all(struct pmap *pmap)
  * which have the virtually-indexed cache.
  */
 #ifdef SH4
-#define PMAP_PREFER(pa, va, sz, td)     pmap_prefer((pa), (va))
-void pmap_prefer(vaddr_t, vaddr_t *);
+#define PMAP_PREFER(pa, va, sz, td)     pmap_prefer((pa), (va), (td))
+void pmap_prefer(vaddr_t, vaddr_t *, int);
 #endif /* SH4 */
 
 #define	PMAP_MAP_POOLPAGE(pa)		SH3_PHYS_TO_P1SEG((pa))

Index: src/sys/arch/sh3/include/vmparam.h
diff -u src/sys/arch/sh3/include/vmparam.h:1.21 src/sys/arch/sh3/include/vmparam.h:1.22
--- src/sys/arch/sh3/include/vmparam.h:1.21	Sun Nov 14 08:33:22 2010
+++ src/sys/arch/sh3/include/vmparam.h	Sat Sep  3 05:07:53 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmparam.h,v 1.21 2010/11/14 13:33:22 uebayasi Exp $	*/
+/*	$NetBSD: vmparam.h,v 1.22 2016/09/03 09:07:53 christos Exp $	*/
 
 /*-
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -31,8 +31,11 @@
 
 #ifndef _SH3_VMPARAM_H_
 #define	_SH3_VMPARAM_H_
+
 #include <sys/queue.h>
 
+#define __USE_TOPDOWN_VM
+
 /*
  * We use 4K pages on the sh3/sh4.  Override the PAGE_* definitions
  * to be compile-time constants.
@@ -51,7 +54,7 @@
 /* top of stack */
 #define	USRSTACK		VM_MAXUSER_ADDRESS
 
-/* Virtual memory resoruce limit. */
+/* Virtual memory resource limit. */
 #define	MAXTSIZ			(64 * 1024 * 1024)	/* max text size */
 #ifndef MAXDSIZ
 #define	MAXDSIZ			(512 * 1024 * 1024)	/* max data size */

Index: src/sys/arch/sh3/sh3/pmap.c
diff -u src/sys/arch/sh3/sh3/pmap.c:1.77 src/sys/arch/sh3/sh3/pmap.c:1.78
--- src/sys/arch/sh3/sh3/pmap.c:1.77	Fri Nov 12 02:59:27 2010
+++ src/sys/arch/sh3/sh3/pmap.c	Sat Sep  3 05:07:54 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.77 2010/11/12 07:59:27 uebayasi Exp $	*/
+/*	$NetBSD: pmap.c,v 1.78 2016/09/03 09:07:54 christos Exp $	*/
 
 /*-
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.77 2010/11/12 07:59:27 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.78 2016/09/03 09:07:54 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -904,15 +904,21 @@ pmap_phys_address(paddr_t cookie)
  * a virtual cache alias against vaddr_t foff.
  */
 void
-pmap_prefer(vaddr_t foff, vaddr_t *vap)
+pmap_prefer(vaddr_t foff, vaddr_t *vap, int td)
 {
-	vaddr_t va;
+	if (!SH_HAS_VIRTUAL_ALIAS) 
+		return;
 
-	if (SH_HAS_VIRTUAL_ALIAS) {
-		va = *vap;
+	vaddr_t va = *vap;
+	vsize_t d = (foff - va) & sh_cache_prefer_mask;
 
-		*vap = va + ((foff - va) & sh_cache_prefer_mask);
-	}
+	if (d == 0)
+		return;
+
+	if (td)
+		*vap = va - ((-d) & sh_cache_prefer_mask);
+	else
+		*vap = va + d;
 }
 #endif /* SH4 */
 

Reply via email to