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 */