Module Name:    src
Committed By:   jmcneill
Date:           Tue Sep  6 09:55:04 UTC 2011

Modified Files:
        src/sys/arch/usermode/dev: cpu.c
        src/sys/arch/usermode/usermode: trap.c urkelvisor.c

Log Message:
cpu_lwp_inkernel approach won't work, back to the drawing board


To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.34 src/sys/arch/usermode/dev/cpu.c
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/usermode/usermode/trap.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/usermode/usermode/urkelvisor.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/dev/cpu.c
diff -u src/sys/arch/usermode/dev/cpu.c:1.33 src/sys/arch/usermode/dev/cpu.c:1.34
--- src/sys/arch/usermode/dev/cpu.c:1.33	Mon Sep  5 20:54:47 2011
+++ src/sys/arch/usermode/dev/cpu.c	Tue Sep  6 09:55:04 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.c,v 1.33 2011/09/05 20:54:47 jmcneill Exp $ */
+/* $NetBSD: cpu.c,v 1.34 2011/09/06 09:55:04 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2007 Jared D. McNeill <jmcne...@invisible.ca>
@@ -29,7 +29,7 @@
 #include "opt_cpu.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.33 2011/09/05 20:54:47 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.34 2011/09/06 09:55:04 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/conf.h>
@@ -58,8 +58,6 @@
 #define cpu_unreachable()	do { thunk_abort(); } while (0)
 #endif
 
-int cpu_lwp_inkernel = 1;
-
 static int	cpu_match(device_t, cfdata_t, void *);
 static void	cpu_attach(device_t, device_t, void *);
 
@@ -188,7 +186,6 @@
 
 	ci->ci_stash = oldlwp;
 	curlwp = newlwp;
-	cpu_lwp_inkernel = curproc->p_vmspace->vm_map.pmap == pmap_kernel();
 
 	if (oldpcb) {
 		oldpcb->pcb_errno = thunk_geterrno();

Index: src/sys/arch/usermode/usermode/trap.c
diff -u src/sys/arch/usermode/usermode/trap.c:1.29 src/sys/arch/usermode/usermode/trap.c:1.30
--- src/sys/arch/usermode/usermode/trap.c:1.29	Tue Sep  6 09:38:27 2011
+++ src/sys/arch/usermode/usermode/trap.c	Tue Sep  6 09:55:04 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: trap.c,v 1.29 2011/09/06 09:38:27 reinoud Exp $ */
+/* $NetBSD: trap.c,v 1.30 2011/09/06 09:55:04 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2011 Reinoud Zandijk <rein...@netbsd.org>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.29 2011/09/06 09:38:27 reinoud Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.30 2011/09/06 09:55:04 jmcneill Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -48,8 +48,6 @@
 //#include <machine/instr.h>
 //#include <machine/userret.h>
 
-extern int cpu_lwp_inkernel;
-
 /* forwards and externals */
 void setup_signal_handlers(void);
 static void mem_access_handler(int sig, siginfo_t *info, void *ctx);
@@ -118,8 +116,6 @@
 	void *onfault;
 	int kmem, lwp_errno, rv;
 
-	cpu_lwp_inkernel++;
-
 	recurse++;
 	if (recurse > 1)
 		printf("enter trap recursion level %d\n", recurse);
@@ -232,7 +228,6 @@
 	if (recurse > 1)
 		printf("leaving trap recursion level %d\n", recurse);
 	recurse--;
-	cpu_lwp_inkernel--;
 }
 
 static void
@@ -244,7 +239,6 @@
 	struct pcb *pcb;
 	vaddr_t va;
 
-	cpu_lwp_inkernel++;
 	recurse++;
 	if (recurse > 1)
 		printf("enter trap recursion level %d\n", recurse);
@@ -292,5 +286,4 @@
 
 		panic("illegal instruction encountered\n");
 	}
-	cpu_lwp_inkernel--;
 }

Index: src/sys/arch/usermode/usermode/urkelvisor.c
diff -u src/sys/arch/usermode/usermode/urkelvisor.c:1.7 src/sys/arch/usermode/usermode/urkelvisor.c:1.8
--- src/sys/arch/usermode/usermode/urkelvisor.c:1.7	Mon Sep  5 20:54:48 2011
+++ src/sys/arch/usermode/usermode/urkelvisor.c	Tue Sep  6 09:55:04 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: urkelvisor.c,v 1.7 2011/09/05 20:54:48 jmcneill Exp $ */
+/* $NetBSD: urkelvisor.c,v 1.8 2011/09/06 09:55:04 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2011 Jared D. McNeill <jmcne...@invisible.ca>
@@ -32,7 +32,7 @@
 
 #include <sys/cdefs.h>
 #ifdef __NetBSD__
-__RCSID("$NetBSD: urkelvisor.c,v 1.7 2011/09/05 20:54:48 jmcneill Exp $");
+__RCSID("$NetBSD: urkelvisor.c,v 1.8 2011/09/06 09:55:04 jmcneill Exp $");
 #endif
 
 #include <sys/types.h>
@@ -114,15 +114,12 @@
 static int
 handle_syscall(struct reg_struct *puregs, pid_t urkel_pid)
 {
-	extern int cpu_lwp_inkernel;
+	vaddr_t pc;
 	int sig = 0;
 	int inkernel;
 
-	errno = 0;
-	inkernel = ptrace(PT_READ_D, urkel_pid, &cpu_lwp_inkernel, 0);
-	if (errno)
-		err(EXIT_FAILURE, "ptrace(PT_READ_D, %d, %p, 0) failed",
-		    urkel_pid, &cpu_lwp_inkernel);
+	pc = (vaddr_t)R_PC(puregs);
+	inkernel = !(pc >= kmem_user_start && pc < kmem_user_end);
 
 	//fprintf(stderr, "%s: pid=%d pc=%p inkernel=%d\n",
 	//    __func__, urkel_pid, (void *)R_PC(puregs), inkernel);

Reply via email to