Port-sun3 archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
topdown-vm for sun2/sun3
hi folks,
the attached patch enables __USE_TOPDOWN_VM for sun2 and sun3.
I've tested only on a sun3/60. sun3x should be fine since doesn't
use PMAP_PREFER(), and I just applied the same change to sun2.
does anyone see any problem with this?
-Chuck
Index: src/sys/arch/sun2/include/pmap.h
===================================================================
RCS file: /home/chs/netbsd/cvs/src/sys/arch/sun2/include/pmap.h,v
retrieving revision 1.24
diff -u -p -r1.24 pmap.h
--- src/sys/arch/sun2/include/pmap.h 3 Jun 2011 17:03:52 -0000 1.24
+++ src/sys/arch/sun2/include/pmap.h 7 Dec 2012 23:58:30 -0000
@@ -51,7 +51,7 @@ int _pmap_fault(struct vm_map *, vaddr_t
/* This lets us have some say in choosing VA locations. */
extern void pmap_prefer(vaddr_t, vaddr_t *);
-#define PMAP_PREFER(fo, ap, sz, td) pmap_prefer((fo), (ap))
+#define PMAP_PREFER(fo, ap, sz, td) pmap_prefer((fo), (ap), (td))
/* This needs to be a macro for kern_sysctl.c */
extern segsz_t pmap_resident_pages(pmap_t);
Index: src/sys/arch/sun2/include/vmparam.h
===================================================================
RCS file: /home/chs/netbsd/cvs/src/sys/arch/sun2/include/vmparam.h,v
retrieving revision 1.14
diff -u -p -r1.14 vmparam.h
--- src/sys/arch/sun2/include/vmparam.h 6 Nov 2010 15:42:49 -0000 1.14
+++ src/sys/arch/sun2/include/vmparam.h 7 Dec 2012 23:59:29 -0000
@@ -26,6 +26,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#define __USE_TOPDOWN_VM
+
/*
* Machine dependent constants for Sun2
*
Index: src/sys/arch/sun2/sun2/pmap.c
===================================================================
RCS file: /home/chs/netbsd/cvs/src/sys/arch/sun2/sun2/pmap.c,v
retrieving revision 1.45
diff -u -p -r1.45 pmap.c
--- src/sys/arch/sun2/sun2/pmap.c 31 Jan 2012 22:47:08 -0000 1.45
+++ src/sys/arch/sun2/sun2/pmap.c 7 Dec 2012 23:59:52 -0000
@@ -3683,12 +3683,18 @@ pmap_zero_page(paddr_t pa)
* (This will just seg-align mappings.)
*/
void
-pmap_prefer(vaddr_t fo, vaddr_t *va)
+pmap_prefer(vaddr_t fo, vaddr_t *va, int td)
{
long d;
d = fo - *va;
d &= SEGOFSET;
+ if (d == 0) {
+ return;
+ }
+ if (td) {
+ *va -= SEGOFSET + 1;
+ }
*va += d;
}
Index: src/sys/arch/sun3/include/pmap3.h
===================================================================
RCS file: /home/chs/netbsd/cvs/src/sys/arch/sun3/include/pmap3.h,v
retrieving revision 1.48
diff -u -p -r1.48 pmap3.h
--- src/sys/arch/sun3/include/pmap3.h 3 Jun 2011 17:03:52 -0000 1.48
+++ src/sys/arch/sun3/include/pmap3.h 7 Dec 2012 23:46:47 -0000
@@ -50,8 +50,8 @@ struct pmap {
int _pmap_fault(struct vm_map *, vaddr_t, vm_prot_t);
/* This lets us have some say in choosing VA locations. */
-extern void pmap_prefer(vaddr_t, vaddr_t *);
-#define PMAP_PREFER(fo, ap, sz, td) pmap_prefer((fo), (ap))
+extern void pmap_prefer(vaddr_t, vaddr_t *, int);
+#define PMAP_PREFER(fo, ap, sz, td) pmap_prefer((fo), (ap), (td))
/* This needs to be a macro for kern_sysctl.c */
extern segsz_t pmap_resident_pages(pmap_t);
Index: src/sys/arch/sun3/include/vmparam.h
===================================================================
RCS file: /home/chs/netbsd/cvs/src/sys/arch/sun3/include/vmparam.h,v
retrieving revision 1.36
diff -u -p -r1.36 vmparam.h
--- src/sys/arch/sun3/include/vmparam.h 6 Nov 2010 15:42:49 -0000 1.36
+++ src/sys/arch/sun3/include/vmparam.h 7 Dec 2012 22:57:42 -0000
@@ -29,6 +29,8 @@
#ifndef _SUN3_VMPARAM_H_
#define _SUN3_VMPARAM_H_ 1
+#define __USE_TOPDOWN_VM
+
/*
* We use 8K pages on both the sun3 and sun3x. Override PAGE_*
* to be compile-time constants.
Index: src/sys/arch/sun3/sun3/pmap.c
===================================================================
RCS file: /home/chs/netbsd/cvs/src/sys/arch/sun3/sun3/pmap.c,v
retrieving revision 1.167
diff -u -p -r1.167 pmap.c
--- src/sys/arch/sun3/sun3/pmap.c 29 Jan 2012 16:24:51 -0000 1.167
+++ src/sys/arch/sun3/sun3/pmap.c 7 Dec 2012 23:52:26 -0000
@@ -3621,12 +3621,18 @@ pmap_zero_page(paddr_t pa)
* (This will just seg-align mappings.)
*/
void
-pmap_prefer(vaddr_t fo, vaddr_t *va)
+pmap_prefer(vaddr_t fo, vaddr_t *va, int td)
{
long d;
d = fo - *va;
d &= SEGOFSET;
+ if (d == 0) {
+ return;
+ }
+ if (td) {
+ *va -= SEGOFSET + 1;
+ }
*va += d;
}
Home |
Main Index |
Thread Index |
Old Index