Module Name:    src
Committed By:   pooka
Date:           Wed Jun 16 11:45:21 UTC 2010

Modified Files:
        src/sys/rump/librump/rumpkern: Makefile.rumpkern pmap_stub.c
        src/sys/rump/librump/rumpkern/arch/i386: Makefile.inc
        src/sys/rump/librump/rumpkern/arch/x86_64: Makefile.inc
Added Files:
        src/sys/rump/include/machine: pmap.h
        src/sys/rump/librump/rumpkern/arch/i386: pmap_x86.c

Log Message:
Reinstate the blanket pmap.h for archs which do not conform to the
kernel ABI (i.e. not i386 or amd64).  Due to the "half function,
half macro, all noodles" nature of pmap.h, it's too entangling and
too brittle to keep up with an ifdeffy MI implementation.


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.5 src/sys/rump/include/machine/pmap.h
cvs rdiff -u -r1.90 -r1.91 src/sys/rump/librump/rumpkern/Makefile.rumpkern
cvs rdiff -u -r1.23 -r1.24 src/sys/rump/librump/rumpkern/pmap_stub.c
cvs rdiff -u -r1.5 -r1.6 src/sys/rump/librump/rumpkern/arch/i386/Makefile.inc
cvs rdiff -u -r0 -r1.1 src/sys/rump/librump/rumpkern/arch/i386/pmap_x86.c
cvs rdiff -u -r1.6 -r1.7 \
    src/sys/rump/librump/rumpkern/arch/x86_64/Makefile.inc

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/rump/librump/rumpkern/Makefile.rumpkern
diff -u src/sys/rump/librump/rumpkern/Makefile.rumpkern:1.90 src/sys/rump/librump/rumpkern/Makefile.rumpkern:1.91
--- src/sys/rump/librump/rumpkern/Makefile.rumpkern:1.90	Sun Jun 13 15:17:02 2010
+++ src/sys/rump/librump/rumpkern/Makefile.rumpkern	Wed Jun 16 11:45:21 2010
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.rumpkern,v 1.90 2010/06/13 15:17:02 pooka Exp $
+#	$NetBSD: Makefile.rumpkern,v 1.91 2010/06/16 11:45:21 pooka Exp $
 #
 
 .include "${RUMPTOP}/Makefile.rump"
@@ -30,9 +30,10 @@
 SRCS+=		vers.c
 CLEANFILES+=	vers.c version
 
-# stubs
-#
+# use MI pmap for archs not conforming to kernel ABI
+.ifndef RUMPKMOD
 SRCS+=	pmap_stub.c
+.endif
 
 # autogenerated
 #

Index: src/sys/rump/librump/rumpkern/pmap_stub.c
diff -u src/sys/rump/librump/rumpkern/pmap_stub.c:1.23 src/sys/rump/librump/rumpkern/pmap_stub.c:1.24
--- src/sys/rump/librump/rumpkern/pmap_stub.c:1.23	Mon Nov  9 14:35:38 2009
+++ src/sys/rump/librump/rumpkern/pmap_stub.c	Wed Jun 16 11:45:21 2010
@@ -1,10 +1,7 @@
-/*	$NetBSD: pmap_stub.c,v 1.23 2009/11/09 14:35:38 nakayama Exp $	*/
+/*	$NetBSD: pmap_stub.c,v 1.24 2010/06/16 11:45:21 pooka Exp $	*/
 
 /*
- * Copyright (c) 2008 Antti Kantee.  All Rights Reserved.
- *
- * Development of this software was supported by the
- * Finnish Cultural Foundation.
+ * Copyright (c) 2010 Antti Kantee.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -29,65 +26,20 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap_stub.c,v 1.23 2009/11/09 14:35:38 nakayama Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap_stub.c,v 1.24 2010/06/16 11:45:21 pooka Exp $");
 
 #include <sys/param.h>
 
 #include <uvm/uvm_extern.h>
 
-/* get your kicks on pmap 66 */
-struct pmap *const kernel_pmap_ptr = (struct pmap *const)0x66;
-
 /*
- * Provide a userspace pmap with the headers the kernel gives us.
- * This results in some arch-specific frobbling which
- * cannot really be easily avoided until the pmap interface is
- * specified with something else than a .h and autogenerated into C.
+ * This is the MI pmap implementation for rump.  It's used only by
+ * architectures which do not conform to the kernel ABI.  The kernel
+ * ABI conformant architectures provide their own pmap under librump/arch
+ * (due to various messiness with macros in the pmap "interface").
  */
 
-#if defined(__sparc__) && !defined(__sparc_v9__)
-#undef pmap_is_modified
-#undef pmap_clear_modify
-#undef pmap_kenter_pa
-#undef pmap_kremove
-#undef pmap_page_protect
-#undef pmap_extract
-#undef pmap_enter
-
-bool pmap_is_modified(struct vm_page *);
-bool pmap_clear_modify(struct vm_page *);
-void pmap_kenter_pa(vaddr_t, paddr_t, vm_prot_t, u_int);
-void pmap_kremove(vaddr_t, vsize_t);
-void pmap_page_protect(struct vm_page *, vm_prot_t);
-bool pmap_extract(pmap_t, vaddr_t, paddr_t *);
-int pmap_enter(pmap_t, vaddr_t, paddr_t, vm_prot_t, u_int);
-#endif
-
-#if !defined(pmap_is_modified) && !defined(__vax__)
-bool
-pmap_is_modified(struct vm_page *pg)
-{
-
-	return true;
-}
-#endif
-
-#if !defined(pmap_clear_modify) && !defined(__vax__)
-bool
-pmap_clear_modify(struct vm_page *pg)
-{
-
-	return true;
-}
-#endif
-
-#ifndef pmap_update
-void
-pmap_update(pmap_t pmap)
-{
-
-}
-#endif
+struct pmap *const kernel_pmap_ptr = (struct pmap *const)-1;
 
 void
 pmap_kenter_pa(vaddr_t va, paddr_t pa, vm_prot_t prot, u_int fl)
@@ -110,11 +62,6 @@
 	panic("%s: unavailable", __func__);
 }
 
-/*
- * It's a brave new world.
- */
-#if !defined(__vax__)
-
 void
 pmap_remove(pmap_t pmap, vaddr_t sva, vaddr_t eva)
 {
@@ -130,137 +77,16 @@
 	return true;
 }
 
-#endif
-
-/*
- * Begin MD stubs
- */
-#if !defined(__i386__) && !defined(__x86_64__) && \
-    !defined(__hppa__) && \
-    !defined(__vax__) 
 void
 pmap_page_protect(struct vm_page *pg, vm_prot_t prot)
 {
 
 	/* nada */
 }
-#endif
-
-#ifdef __hppa__
-void
-pmap_page_remove(struct vm_page *pg)
-{
-
-}
-
-bool
-pmap_changebit(struct vm_page *pg, unsigned int set, unsigned int clear)
-{
-
-	return true;
-}
-
-bool
-pmap_testbit(struct vm_page *pg, unsigned int bit)
-{
-
-	return true;
-}
-#endif
-
-#if defined(__i386__) || defined(__x86_64__)
-bool
-pmap_clear_attrs(struct vm_page *pg, unsigned what)
-{
-
-	return false;
-}
-
-void
-pmap_page_remove(struct vm_page *pg)
-{
-
-}
-
-bool
-pmap_test_attrs(struct vm_page *pg, unsigned what)
-{
-
-	return true;
-}
-
-paddr_t
-vtophys(vaddr_t va)
-{
-
-	return va;
-}
-#endif
-
-#ifdef __vax__
-/*
- * XXX: this won't work on vax.  But I'm not terribly
- * uberinterested in that for the time being.
- */
-struct pv_entry *pv_table;
-bool
-pmap_clear_modify_long(struct pv_entry *pv)
-{
-
-	return true;
-}
-
-bool
-pmap_clear_reference_long(struct pv_entry *pv)
-{
-
-	return true;
-}
 
 bool
-pmap_is_modified_long(struct pv_entry *pv)
-{
-
-	return true;
-}
-
-void
-pmap_page_protect_long(struct pv_entry *pv, vm_prot_t prot)
-{
-
-}
-
-void
-pmap_protect_long(pmap_t pmap, vaddr_t va1, vaddr_t va2, vm_prot_t prot)
-{
-
-}
-
-struct  pte *Sysmap;
-#endif
-
-#ifdef PPC_OEA
-bool
-pmap_clear_bit(struct vm_page *pg, int ptebit)
-{
-
-	return true;
-}
-
-bool
-pmap_query_bit(struct vm_page *pg, int ptebit)
+pmap_clear_modify(struct vm_page *pg)
 {
 
 	return true;
 }
-#endif
-
-#if defined(__sparc__) && !defined(__sparc_v9__)
-bool (*pmap_clear_modify_p)(struct vm_page *) = pmap_clear_modify;
-bool (*pmap_is_modified_p)(struct vm_page *) = pmap_is_modified;
-void (*pmap_kenter_pa_p)(vaddr_t, paddr_t, vm_prot_t, u_int) = pmap_kenter_pa;
-void (*pmap_kremove_p)(vaddr_t, vsize_t) = pmap_kremove;
-void (*pmap_page_protect_p)(struct vm_page *, vm_prot_t) = pmap_page_protect;
-bool (*pmap_extract_p)(pmap_t, vaddr_t, paddr_t *) = pmap_extract;
-int (*pmap_enter_p)(pmap_t, vaddr_t, paddr_t, vm_prot_t, u_int) = pmap_enter;
-#endif

Index: src/sys/rump/librump/rumpkern/arch/i386/Makefile.inc
diff -u src/sys/rump/librump/rumpkern/arch/i386/Makefile.inc:1.5 src/sys/rump/librump/rumpkern/arch/i386/Makefile.inc:1.6
--- src/sys/rump/librump/rumpkern/arch/i386/Makefile.inc:1.5	Mon May 31 22:31:07 2010
+++ src/sys/rump/librump/rumpkern/arch/i386/Makefile.inc	Wed Jun 16 11:45:21 2010
@@ -1,7 +1,7 @@
-#	$NetBSD: Makefile.inc,v 1.5 2010/05/31 22:31:07 pooka Exp $
+#	$NetBSD: Makefile.inc,v 1.6 2010/06/16 11:45:21 pooka Exp $
 #
 
-SRCS+=	rumpcpu.c rumpspl.c cpu_counter.c spinlock.c
+SRCS+=	rumpcpu.c rumpspl.c cpu_counter.c spinlock.c pmap_x86.c
 
 .PATH:	${RUMPTOP}/../arch/i386/i386
 SRCS+=	kobj_machdep.c

Index: src/sys/rump/librump/rumpkern/arch/x86_64/Makefile.inc
diff -u src/sys/rump/librump/rumpkern/arch/x86_64/Makefile.inc:1.6 src/sys/rump/librump/rumpkern/arch/x86_64/Makefile.inc:1.7
--- src/sys/rump/librump/rumpkern/arch/x86_64/Makefile.inc:1.6	Mon May 31 22:31:07 2010
+++ src/sys/rump/librump/rumpkern/arch/x86_64/Makefile.inc	Wed Jun 16 11:45:21 2010
@@ -1,8 +1,8 @@
-#	$NetBSD: Makefile.inc,v 1.6 2010/05/31 22:31:07 pooka Exp $
+#	$NetBSD: Makefile.inc,v 1.7 2010/06/16 11:45:21 pooka Exp $
 #
 
 .PATH:	${ARCHDIR}/../i386
-SRCS+=	rumpcpu.c rumpspl.c cpu_counter.c spinlock.c
+SRCS+=	rumpcpu.c rumpspl.c cpu_counter.c spinlock.c pmap_x86.c
 
 .PATH:	${RUMPTOP}/../arch/amd64/amd64
 SRCS+=	kobj_machdep.c

Added files:

Index: src/sys/rump/include/machine/pmap.h
diff -u /dev/null src/sys/rump/include/machine/pmap.h:1.5
--- /dev/null	Wed Jun 16 11:45:21 2010
+++ src/sys/rump/include/machine/pmap.h	Wed Jun 16 11:45:21 2010
@@ -0,0 +1,35 @@
+/*	$NetBSD: pmap.h,v 1.5 2010/06/16 11:45:21 pooka Exp $	*/
+
+/*
+ * Copyright (c) 2010 Antti Kantee.  All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _SYS_RUMP_PMAP_H_
+#define _SYS_RUMP_PMAP_H_
+
+#define pmap_update(v)
+#define pmap_is_modified(a) (true)
+#define pmap_is_referenced(a) (true)
+
+#endif /* _SYS_RUMP_PMAP_H_ */

Index: src/sys/rump/librump/rumpkern/arch/i386/pmap_x86.c
diff -u /dev/null src/sys/rump/librump/rumpkern/arch/i386/pmap_x86.c:1.1
--- /dev/null	Wed Jun 16 11:45:21 2010
+++ src/sys/rump/librump/rumpkern/arch/i386/pmap_x86.c	Wed Jun 16 11:45:21 2010
@@ -0,0 +1,104 @@
+/*	$NetBSD: pmap_x86.c,v 1.1 2010/06/16 11:45:21 pooka Exp $	*/
+
+/*
+ * Copyright (c) 2010 Antti Kantee.  All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: pmap_x86.c,v 1.1 2010/06/16 11:45:21 pooka Exp $");
+
+#include <sys/param.h>
+
+#include <uvm/uvm_extern.h>
+
+struct pmap *const kernel_pmap_ptr = (struct pmap *const)-1;
+
+void
+pmap_kenter_pa(vaddr_t va, paddr_t pa, vm_prot_t prot, u_int fl)
+{
+
+	panic("%s: unavailable", __func__);
+}
+
+void
+pmap_kremove(vaddr_t va, vsize_t size)
+{
+
+	panic("%s: unavailable", __func__);
+}
+
+int
+pmap_enter(pmap_t pmap, vaddr_t va, paddr_t pa, vm_prot_t prot, u_int flags)
+{
+
+	panic("%s: unavailable", __func__);
+}
+
+bool
+pmap_clear_attrs(struct vm_page *pg, unsigned what)
+{
+
+	return false;
+}
+
+void
+pmap_page_remove(struct vm_page *pg)
+{
+
+}
+
+bool
+pmap_test_attrs(struct vm_page *pg, unsigned what)
+{
+
+	return true;
+}
+
+paddr_t
+vtophys(vaddr_t va)
+{
+
+	return (paddr_t)va;
+}
+
+void
+pmap_update(pmap_t pmap)
+{
+
+}
+
+void
+pmap_remove(pmap_t pmap, vaddr_t sva, vaddr_t eva)
+{
+
+	panic("%s: unavailable", __func__);
+}
+
+bool
+pmap_extract(pmap_t pmap, vaddr_t va, paddr_t *pap)
+{
+
+	*pap = va;
+	return true;
+}

Reply via email to