Module Name: src
Committed By: reinoud
Date: Wed Feb 8 17:55:21 UTC 2012
Modified Files:
src/sys/arch/usermode/include: cpu.h types.h vmparam.h
src/sys/arch/usermode/usermode: machdep.c
Log Message:
Fix /dev/kmem access and make vmstat(1) `work'. Not sure all the results are
indeed valid or correct but at least it shows them without coredumping or
coredumping the kernel.
To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/usermode/include/cpu.h
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/usermode/include/types.h
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/usermode/include/vmparam.h
cvs rdiff -u -r1.52 -r1.53 src/sys/arch/usermode/usermode/machdep.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/usermode/include/cpu.h
diff -u src/sys/arch/usermode/include/cpu.h:1.9 src/sys/arch/usermode/include/cpu.h:1.10
--- src/sys/arch/usermode/include/cpu.h:1.9 Thu Jan 19 12:14:49 2012
+++ src/sys/arch/usermode/include/cpu.h Wed Feb 8 17:55:21 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.h,v 1.9 2012/01/19 12:14:49 reinoud Exp $ */
+/* $NetBSD: cpu.h,v 1.10 2012/02/08 17:55:21 reinoud Exp $ */
/*-
* Copyright (c) 2007 Jared D. McNeill <[email protected]>
@@ -50,10 +50,10 @@ extern void cpu_need_resched(struct cpu_
struct cpu_info {
- device_t ci_dev;
+ struct cpu_data ci_data; /* MI per-cpu data */
+ device_t ci_dev; /* pointer to our device */
struct cpu_info *ci_self;
struct cpu_info *ci_next;
- struct cpu_data ci_data;
u_int ci_cpuid;
int ci_want_resched;
int ci_idepth;
Index: src/sys/arch/usermode/include/types.h
diff -u src/sys/arch/usermode/include/types.h:1.7 src/sys/arch/usermode/include/types.h:1.8
--- src/sys/arch/usermode/include/types.h:1.7 Sun Jan 8 18:06:00 2012
+++ src/sys/arch/usermode/include/types.h Wed Feb 8 17:55:21 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: types.h,v 1.7 2012/01/08 18:06:00 jmcneill Exp $ */
+/* $NetBSD: types.h,v 1.8 2012/02/08 17:55:21 reinoud Exp $ */
/*-
* Copyright (c) 2007 Jared D. McNeill <[email protected]>
@@ -62,4 +62,7 @@ typedef volatile unsigned char __cpu_sim
#define __HAVE_OLD_DISKLABEL
#endif
+#define __HAVE_CPU_DATA_FIRST
+#define __HAVE_MM_MD_KERNACC
+
#endif /* !_ARCH_USERMODE_INCLUDE_TYPES_H */
Index: src/sys/arch/usermode/include/vmparam.h
diff -u src/sys/arch/usermode/include/vmparam.h:1.15 src/sys/arch/usermode/include/vmparam.h:1.16
--- src/sys/arch/usermode/include/vmparam.h:1.15 Tue Jan 10 10:19:38 2012
+++ src/sys/arch/usermode/include/vmparam.h Wed Feb 8 17:55:21 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: vmparam.h,v 1.15 2012/01/10 10:19:38 reinoud Exp $ */
+/* $NetBSD: vmparam.h,v 1.16 2012/02/08 17:55:21 reinoud Exp $ */
/*-
* Copyright (c) 2007 Jared D. McNeill <[email protected]>
@@ -36,6 +36,7 @@
extern paddr_t kmem_k_start, kmem_k_end;
extern paddr_t kmem_kvm_start, kmem_kvm_end;
+extern paddr_t kmem_kvm_cur_end;
extern paddr_t kmem_user_start, kmem_user_end;
#define VM_MIN_ADDRESS kmem_user_start
Index: src/sys/arch/usermode/usermode/machdep.c
diff -u src/sys/arch/usermode/usermode/machdep.c:1.52 src/sys/arch/usermode/usermode/machdep.c:1.53
--- src/sys/arch/usermode/usermode/machdep.c:1.52 Sun Jan 15 10:30:21 2012
+++ src/sys/arch/usermode/usermode/machdep.c Wed Feb 8 17:55:21 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.52 2012/01/15 10:30:21 jmcneill Exp $ */
+/* $NetBSD: machdep.c,v 1.53 2012/02/08 17:55:21 reinoud Exp $ */
/*-
* Copyright (c) 2011 Reinoud Zandijk <[email protected]>
@@ -37,7 +37,7 @@
#include "opt_memsize.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.52 2012/01/15 10:30:21 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.53 2012/02/08 17:55:21 reinoud Exp $");
#include <sys/types.h>
#include <sys/systm.h>
@@ -55,6 +55,7 @@ __KERNEL_RCSID(0, "$NetBSD: machdep.c,v
#include <uvm/uvm_page.h>
#include <dev/mm.h>
+#include <machine/vmparam.h>
#include <machine/machdep.h>
#include <machine/thunk.h>
@@ -249,8 +250,30 @@ consinit(void)
}
int
-mm_md_physacc(paddr_t pa, vm_prot_t prog)
+mm_md_physacc(paddr_t pa, vm_prot_t prot)
{
+ // printf("%s: pa = %p, acc %d\n", __func__, (void *) pa, prot);
+ if (pa >= physmem * PAGE_SIZE)
+ return EFAULT;
+ return 0;
+}
+
+
+int
+mm_md_kernacc(void *ptr, vm_prot_t prot, bool *handled)
+{
+ const vaddr_t va = (vaddr_t)ptr;
+ extern void *end;
+
+ // printf("%s: ptr %p, acc %d\n", __func__, ptr, prot);
+ if (va < kmem_kvm_start)
+ return EFAULT;
+ if ((va >= kmem_kvm_cur_end) && (va < kmem_k_start))
+ return EFAULT;
+ if (va > (vaddr_t) end)
+ return EFAULT;
+
+ *handled = true;
return 0;
}