Module Name:    src
Committed By:   matt
Date:           Fri Dec 23 18:54:50 UTC 2011

Modified Files:
        src/sys/arch/mips/include [matt-nb5-mips64]: mips_param.h vmparam.h

Log Message:
Use MIPS_PAGE_SHIFT to define the page size to be used from a config file.
Add support for tracking which colors have been used for an EXECPAGE.


To generate a diff of this commit:
cvs rdiff -u -r1.23.78.8 -r1.23.78.9 src/sys/arch/mips/include/mips_param.h
cvs rdiff -u -r1.41.28.22 -r1.41.28.23 src/sys/arch/mips/include/vmparam.h

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/mips/include/mips_param.h
diff -u src/sys/arch/mips/include/mips_param.h:1.23.78.8 src/sys/arch/mips/include/mips_param.h:1.23.78.9
--- src/sys/arch/mips/include/mips_param.h:1.23.78.8	Sat Dec  3 01:44:04 2011
+++ src/sys/arch/mips/include/mips_param.h	Fri Dec 23 18:54:50 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: mips_param.h,v 1.23.78.8 2011/12/03 01:44:04 matt Exp $	*/
+/*	$NetBSD: mips_param.h,v 1.23.78.9 2011/12/23 18:54:50 matt Exp $	*/
 
 #ifdef _KERNEL
 #include <machine/cpu.h>
@@ -39,17 +39,25 @@
 #define	SSIZE		1		/* initial stack size/NBPG */
 #define	SINCR		1		/* increment of stack/NBPG */
 
-#if defined(ENABLE_MIPS_16KB_PAGE) || defined(ENABLE_MIPS_8KB_PAGE)
+#ifdef PAGE_SHIFT
+#if MIPS_PAGE_SHIFT != PAGE_SHIFT
+#error MIPS_PAGE_SHIFT != PAGE_SHIFT
+#endif
+#elif defined(MIPS_PAGE_SHIFT)
+#define	PAGE_SHIFT	MIPS_PAGE_SHIFT
+#else
+#define	PAGE_SHIFT	12
+#endif
+
+#if PAGE_SHIFT & 1
 #define	UPAGES		1		/* pages of u-area */
-#define	USPACE		(UPAGES*NBPG)	/* size of u-area in bytes */
-#elif defined(ENABLE_MIPS_4KB_PAGE) || 1
+#else
 #define	UPAGES		2		/* pages of u-area */
-#define	USPACE		(UPAGES*NBPG)	/* size of u-area in bytes */
 #define	USPACE_ALIGN	USPACE		/* make sure it starts on a even VA */
-#else
-#error ENABLE_MIPS_xKB_PAGE not defined
 #endif
 
+#define	USPACE		(UPAGES*NBPG)	/* size of u-area in bytes */
+
 #ifndef MSGBUFSIZE
 #define MSGBUFSIZE	NBPG		/* default message buffer size */
 #endif
@@ -73,13 +81,7 @@
 #define	ALIGN(p)	(((uintptr_t)(p) + ALIGNBYTES) & ~ALIGNBYTES)
 #define ALIGNED_POINTER(p,t)	((((uintptr_t)(p)) & (sizeof(t)-1)) == 0)
 
-#ifdef ENABLE_MIPS_16KB_PAGE
-#define	PGSHIFT		14		/* LOG2(NBPG) */
-#elif defined(ENABLE_MIPS_8KB_PAGE)
-#define	PGSHIFT		13		/* LOG2(NBPG) */
-#else
-#define	PGSHIFT		12		/* LOG2(NBPG) */
-#endif
+#define	PGSHIFT		PAGE_SHIFT	/* LOG2(NBPG) */
 #define	NBPG		(1 << PGSHIFT)	/* bytes/page */
 #define	PGOFSET		(NBPG-1)	/* byte offset into page */
 #define	NPTEPG		(NBPG/4)

Index: src/sys/arch/mips/include/vmparam.h
diff -u src/sys/arch/mips/include/vmparam.h:1.41.28.22 src/sys/arch/mips/include/vmparam.h:1.41.28.23
--- src/sys/arch/mips/include/vmparam.h:1.41.28.22	Fri Dec  2 00:01:37 2011
+++ src/sys/arch/mips/include/vmparam.h	Fri Dec 23 18:54:50 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmparam.h,v 1.41.28.22 2011/12/02 00:01:37 matt Exp $	*/
+/*	$NetBSD: vmparam.h,v 1.41.28.23 2011/12/23 18:54:50 matt Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -51,17 +51,13 @@
  */
 
 /*
- * We normally use a 4K page but may use 16K on MIPS systems.
+ * We normally use a 4K page but may use 8K, 16K, or 32K on MIPS systems.
  * Override PAGE_* definitions to compile-time constants.
  */
-#ifdef ENABLE_MIPS_16KB_PAGE
-#define	PAGE_SHIFT	14
-#elif defined(ENABLE_MIPS_8KB_PAGE)
-#define	PAGE_SHIFT	13
-#elif defined(ENABLE_MIPS_4KB_PAGE) || 1
-#define	PAGE_SHIFT	12
+#ifdef MIPS_PAGE_SHIFT
+#define	PAGE_SHIFT	MIPS_PAGE_SHIFT
 #else
-#error ENABLE_MIPS_xKB_PAGE not defined
+#define	PAGE_SHIFT	12
 #endif
 #define	PAGE_SIZE	(1 << PAGE_SHIFT)
 #define	PAGE_MASK	(PAGE_SIZE - 1)
@@ -177,7 +173,7 @@
 #ifdef ENABLE_MIPS_TX3900
 #define VM_MAX_KERNEL_ADDRESS	((vaddr_t)-0x01000000)	/* 0xFFFFFFFFFF000000 */
 #else
-#define VM_MAX_KERNEL_ADDRESS	((vaddr_t)-0x00004000)	/* 0xFFFFFFFFFFFFC000 */
+#define VM_MAX_KERNEL_ADDRESS	((vaddr_t)-0x00008000)	/* 0xFFFFFFFFFFF08000 */
 #endif
 #endif
 #define VM_MAXUSER32_ADDRESS	((vaddr_t)(1UL << 31))/* 0x0000000080000000 */
@@ -238,14 +234,21 @@ typedef struct pv_entry {
 #define	PG_MD_MODIFIED		0x0002	/* page has been modified */
 #define	PG_MD_REFERENCED	0x0004	/* page has been recently referenced */
 #define	PG_MD_POOLPAGE		0x0008	/* page is used as a poolpage */
-#define	PG_MD_EXECPAGE		0x0010	/* page is exec mapped */
+#define	PG_MD_EXECPAGE_SHIFT	8
+#define	PG_MD_EXECPAGE(va)	\
+	__BIT(PG_MD_EXECPAGE_SHIFT + atop(va & MIPS_ICACHE_ALIAS_MASK))
+				 	/* page (color) is exec mapped */
+#define	PG_MD_EXECPAGE_ANY	(0xff << PG_MD_EXECPAGE_SHIFT)
+					/* page is exec mapped */
 
 #define	PG_MD_CACHED_P(md)	(((md)->pvh_attrs & PG_MD_UNCACHED) == 0)
 #define	PG_MD_UNCACHED_P(md)	(((md)->pvh_attrs & PG_MD_UNCACHED) != 0)
 #define	PG_MD_MODIFIED_P(md)	(((md)->pvh_attrs & PG_MD_MODIFIED) != 0)
 #define	PG_MD_REFERENCED_P(md)	(((md)->pvh_attrs & PG_MD_REFERENCED) != 0)
 #define	PG_MD_POOLPAGE_P(md)	(((md)->pvh_attrs & PG_MD_POOLPAGE) != 0)
-#define	PG_MD_EXECPAGE_P(md)	(((md)->pvh_attrs & PG_MD_EXECPAGE) != 0)
+#define	PG_MD_EXECPAGE_P(md,va)	(((md)->pvh_attrs & PG_MD_EXECPAGE(va)) != 0)
+#define	PG_MD_EXECPAGES(md)	((md)->pvh_attrs & PG_MD_EXECPAGE_ANY)
+#define	PG_MD_EXECPAGE_ANY_P(md) (PG_MD_EXECPAGES(md) != 0)
 
 struct vm_page_md {
 	struct pv_entry pvh_first;	/* pv_entry first */

Reply via email to