Module Name:    src
Committed By:   rmind
Date:           Sat Nov 21 15:36:34 UTC 2009

Modified Files:
        src/sys/arch/hp300/dev: hil.c
        src/sys/arch/hp300/hp300: machdep.c trap.c
        src/sys/arch/hp700/dev: pdc.c
        src/sys/arch/hp700/gsc: gscbus.c
        src/sys/arch/hp700/hp700: machdep.c
        src/sys/arch/hppa/hppa: core_machdep.c db_interface.c db_trace.c fpu.c
            hppa_machdep.c pmap.c process_machdep.c sig_machdep.c trap.c
            vm_machdep.c
        src/sys/arch/ia64/ia64: cpu.c machdep.c vm_machdep.c
        src/sys/arch/ia64/include: proc.h

Log Message:
Use lwp_getpcb() on hppa and ia64, clean from struct user usage.


To generate a diff of this commit:
cvs rdiff -u -r1.82 -r1.83 src/sys/arch/hp300/dev/hil.c
cvs rdiff -u -r1.208 -r1.209 src/sys/arch/hp300/hp300/machdep.c
cvs rdiff -u -r1.140 -r1.141 src/sys/arch/hp300/hp300/trap.c
cvs rdiff -u -r1.32 -r1.33 src/sys/arch/hp700/dev/pdc.c
cvs rdiff -u -r1.18 -r1.19 src/sys/arch/hp700/gsc/gscbus.c
cvs rdiff -u -r1.72 -r1.73 src/sys/arch/hp700/hp700/machdep.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/hppa/hppa/core_machdep.c
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/hppa/hppa/db_interface.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/hppa/hppa/db_trace.c
cvs rdiff -u -r1.18 -r1.19 src/sys/arch/hppa/hppa/fpu.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/hppa/hppa/hppa_machdep.c
cvs rdiff -u -r1.56 -r1.57 src/sys/arch/hppa/hppa/pmap.c
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/hppa/hppa/process_machdep.c
cvs rdiff -u -r1.22 -r1.23 src/sys/arch/hppa/hppa/sig_machdep.c
cvs rdiff -u -r1.60 -r1.61 src/sys/arch/hppa/hppa/trap.c
cvs rdiff -u -r1.37 -r1.38 src/sys/arch/hppa/hppa/vm_machdep.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/ia64/ia64/cpu.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/ia64/ia64/machdep.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/ia64/ia64/vm_machdep.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/ia64/include/proc.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/hp300/dev/hil.c
diff -u src/sys/arch/hp300/dev/hil.c:1.82 src/sys/arch/hp300/dev/hil.c:1.83
--- src/sys/arch/hp300/dev/hil.c:1.82	Fri Jun 13 09:41:15 2008
+++ src/sys/arch/hp300/dev/hil.c	Sat Nov 21 15:36:33 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: hil.c,v 1.82 2008/06/13 09:41:15 cegger Exp $	*/
+/*	$NetBSD: hil.c,v 1.83 2009/11/21 15:36:33 rmind Exp $	*/
 
 /*
  * Copyright (c) 1990, 1993
@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hil.c,v 1.82 2008/06/13 09:41:15 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hil.c,v 1.83 2009/11/21 15:36:33 rmind Exp $");
 
 #include "ite.h"
 #include "rnd.h"
@@ -93,7 +93,6 @@
 #include <sys/proc.h>
 #include <sys/tty.h>
 #include <sys/uio.h>
-#include <sys/user.h>
 #include <sys/kauth.h>
 
 #include <uvm/uvm_extern.h>

Index: src/sys/arch/hp300/hp300/machdep.c
diff -u src/sys/arch/hp300/hp300/machdep.c:1.208 src/sys/arch/hp300/hp300/machdep.c:1.209
--- src/sys/arch/hp300/hp300/machdep.c:1.208	Sat Nov  7 07:27:43 2009
+++ src/sys/arch/hp300/hp300/machdep.c	Sat Nov 21 15:36:33 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.208 2009/11/07 07:27:43 cegger Exp $	*/
+/*	$NetBSD: machdep.c,v 1.209 2009/11/21 15:36:33 rmind Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.208 2009/11/07 07:27:43 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.209 2009/11/21 15:36:33 rmind Exp $");
 
 #include "opt_ddb.h"
 #include "opt_compat_netbsd.h"
@@ -105,7 +105,6 @@
 #include <sys/signalvar.h>
 #include <sys/syscallargs.h>
 #include <sys/tty.h>
-#include <sys/user.h>
 #include <sys/core.h>
 #include <sys/kcore.h>
 #include <sys/vnode.h>
@@ -375,6 +374,7 @@
 setregs(struct lwp *l, struct exec_package *pack, u_long stack)
 {
 	struct frame *frame = (struct frame *)l->l_md.md_regs;
+	struct pcb *pcb = lwp_getpcb(l);
 
 	frame->f_sr = PSL_USERSET;
 	frame->f_pc = pack->ep_entry & ~1;
@@ -396,9 +396,9 @@
 	frame->f_regs[SP] = stack;
 
 	/* restore a null state frame */
-	l->l_addr->u_pcb.pcb_fpregs.fpf_null = 0;
+	pcb->pcb_fpregs.fpf_null = 0;
 	if (fputype)
-		m68881_restore(&l->l_addr->u_pcb.pcb_fpregs);
+		m68881_restore(&pcb->pcb_fpregs);
 }
 
 /*
@@ -634,10 +634,11 @@
 void
 cpu_reboot(int howto, char *bootstr)
 {
+	struct pcb *pcb = lwp_getpcb(curlwp);
 
 	/* take a snap shot before clobbering any registers */
-	if (curlwp->l_addr)
-		savectx(&curlwp->l_addr->u_pcb);
+	if (pcb != NULL)
+		savectx(pcb);
 
 	/* If system is cold, just halt. */
 	if (cold) {

Index: src/sys/arch/hp300/hp300/trap.c
diff -u src/sys/arch/hp300/hp300/trap.c:1.140 src/sys/arch/hp300/hp300/trap.c:1.141
--- src/sys/arch/hp300/hp300/trap.c:1.140	Tue Jan 27 20:30:13 2009
+++ src/sys/arch/hp300/hp300/trap.c	Sat Nov 21 15:36:33 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.140 2009/01/27 20:30:13 martin Exp $	*/
+/*	$NetBSD: trap.c,v 1.141 2009/11/21 15:36:33 rmind Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.140 2009/01/27 20:30:13 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.141 2009/11/21 15:36:33 rmind Exp $");
 
 #include "opt_ddb.h"
 #include "opt_execfmt.h"
@@ -96,7 +96,6 @@
 #include <sys/sa.h>
 #include <sys/savar.h>
 #include <sys/syscall.h>
-#include <sys/user.h>
 #include <sys/userret.h>
 #include <sys/kauth.h>
 
@@ -290,6 +289,7 @@
 	extern char fubail[], subail[];
 	struct lwp *l;
 	struct proc *p;
+	struct pcb *pcb;
 	ksiginfo_t ksi;
 	int s;
 	u_quad_t sticks = 0 /* XXX initializer works around compiler bug */;
@@ -301,11 +301,8 @@
 	ksi.ksi_trap = type & ~T_USER;
 
 	p = l->l_proc;
-
-#ifdef DIAGNOSTIC
-	if (l->l_addr == NULL)
-		panic("trap: no pcb");
-#endif
+	pcb = lwp_getpcb(l);
+	KASSERT(pcb != NULL);
 
 	if (USERMODE(fp->f_sr)) {
 		type |= T_USER;
@@ -352,7 +349,7 @@
 		panic("trap");
 
 	case T_BUSERR:		/* kernel bus error */
-		if (l->l_addr->u_pcb.pcb_onfault == 0)
+		if (pcb->pcb_onfault == 0)
 			goto dopanic;
 		/* FALLTHROUGH */
 
@@ -365,7 +362,7 @@
 		 */
 		fp->f_stackadj = exframesize[fp->f_format];
 		fp->f_format = fp->f_vector = 0;
-		fp->f_pc = (int) l->l_addr->u_pcb.pcb_onfault;
+		fp->f_pc = (int)pcb->pcb_onfault;
 		return;
 
 	case T_BUSERR|T_USER:	/* bus error */
@@ -546,8 +543,7 @@
 		 * If we were doing profiling ticks or other user mode
 		 * stuff from interrupt code, Just Say No.
 		 */
-		if (l->l_addr->u_pcb.pcb_onfault == fubail ||
-		    l->l_addr->u_pcb.pcb_onfault == subail)
+		if (pcb->pcb_onfault == fubail || pcb->pcb_onfault == subail)
 			goto copyfault;
 		/* fall into ... */
 
@@ -574,7 +570,7 @@
 		 * argument space is lazy-allocated.
 		 */
 		if ((type & T_USER) == 0 &&
-		    ((l->l_addr->u_pcb.pcb_onfault == 0) || KDFAULT(code)))
+		    ((pcb->pcb_onfault == 0) || KDFAULT(code)))
 			map = kernel_map;
 		else {
 			map = vm ? &vm->vm_map : kernel_map;
@@ -632,7 +628,7 @@
 		} else
 			ksi.ksi_code = SEGV_MAPERR;
 		if (type == T_MMUFLT) {
-			if (l->l_addr->u_pcb.pcb_onfault)
+			if (pcb->pcb_onfault)
 				goto copyfault;
 			printf("uvm_fault(%p, 0x%lx, 0x%x) -> 0x%x\n",
 			    map, va, ftype, rv);
@@ -685,9 +681,10 @@
 	struct fmt7 *f = &fp->f_fmt7;
 	struct lwp *l = curlwp;
 	struct proc *p = l->l_proc;
+	struct pcb *pcb = lwp_getpcb(l);
+	void *oonfault = pcb->pcb_onfault;
 	int err = 0;
 	u_int fa;
-	void *oonfault = l->l_addr->u_pcb.pcb_onfault;
 	paddr_t pa;
 
 #ifdef DEBUG
@@ -910,7 +907,7 @@
 #endif
 		}
 	}
-	l->l_addr->u_pcb.pcb_onfault = oonfault;
+	pcb->pcb_onfault = oonfault;
 	if (err)
 		err = SIGSEGV;
 	return err;

Index: src/sys/arch/hp700/dev/pdc.c
diff -u src/sys/arch/hp700/dev/pdc.c:1.32 src/sys/arch/hp700/dev/pdc.c:1.33
--- src/sys/arch/hp700/dev/pdc.c:1.32	Tue Nov  3 05:07:25 2009
+++ src/sys/arch/hp700/dev/pdc.c	Sat Nov 21 15:36:33 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: pdc.c,v 1.32 2009/11/03 05:07:25 snj Exp $	*/
+/*	$NetBSD: pdc.c,v 1.33 2009/11/21 15:36:33 rmind Exp $	*/
 
 /*	$OpenBSD: pdc.c,v 1.14 2001/04/29 21:05:43 mickey Exp $	*/
 
@@ -29,14 +29,13 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pdc.c,v 1.32 2009/11/03 05:07:25 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pdc.c,v 1.33 2009/11/21 15:36:33 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/device.h>
 #include <sys/proc.h>
 #include <sys/tty.h>
-#include <sys/user.h>
 #include <sys/callout.h>
 #include <sys/conf.h>
 #include <sys/kauth.h>

Index: src/sys/arch/hp700/gsc/gscbus.c
diff -u src/sys/arch/hp700/gsc/gscbus.c:1.18 src/sys/arch/hp700/gsc/gscbus.c:1.19
--- src/sys/arch/hp700/gsc/gscbus.c:1.18	Tue Nov  3 05:07:25 2009
+++ src/sys/arch/hp700/gsc/gscbus.c	Sat Nov 21 15:36:33 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: gscbus.c,v 1.18 2009/11/03 05:07:25 snj Exp $	*/
+/*	$NetBSD: gscbus.c,v 1.19 2009/11/21 15:36:33 rmind Exp $	*/
 
 /*	$OpenBSD: gscbus.c,v 1.13 2001/08/01 20:32:04 miod Exp $	*/
 
@@ -68,7 +68,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: gscbus.c,v 1.18 2009/11/03 05:07:25 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gscbus.c,v 1.19 2009/11/21 15:36:33 rmind Exp $");
 
 #define GSCDEBUG
 
@@ -78,7 +78,6 @@
 #include <sys/systm.h>
 #include <sys/device.h>
 #include <sys/malloc.h>
-#include <sys/user.h>
 #include <sys/mbuf.h>
 #include <sys/reboot.h>
 

Index: src/sys/arch/hp700/hp700/machdep.c
diff -u src/sys/arch/hp700/hp700/machdep.c:1.72 src/sys/arch/hp700/hp700/machdep.c:1.73
--- src/sys/arch/hp700/hp700/machdep.c:1.72	Sat Nov  7 07:27:43 2009
+++ src/sys/arch/hp700/hp700/machdep.c	Sat Nov 21 15:36:33 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.72 2009/11/07 07:27:43 cegger Exp $	*/
+/*	$NetBSD: machdep.c,v 1.73 2009/11/21 15:36:33 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.72 2009/11/07 07:27:43 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.73 2009/11/21 15:36:33 rmind Exp $");
 
 #include "opt_cputype.h"
 #include "opt_ddb.h"
@@ -1835,11 +1835,12 @@
 int
 kcopy(const void *from, void *to, size_t size)
 {
-	u_int oldh = curlwp->l_addr->u_pcb.pcb_onfault;
+	struct pcb *pcb = lwp_getpcb(curlwp);
+	u_int oldh = pcb->pcb_onfault;
 
-	curlwp->l_addr->u_pcb.pcb_onfault = (u_int)&copy_on_fault;
+	pcb->pcb_onfault = (u_int)&copy_on_fault;
 	memcpy(to, from, size);
-	curlwp->l_addr->u_pcb.pcb_onfault = oldh;
+	pcb->pcb_onfault = oldh;
 
 	return 0;
 }
@@ -1854,7 +1855,7 @@
 	struct trapframe *tf = l->l_md.md_regs;
 	pmap_t pmap = p->p_vmspace->vm_map.pmap;
 	pa_space_t space = pmap->pm_space;
-	struct pcb *pcb = &l->l_addr->u_pcb;
+	struct pcb *pcb = lwp_getpcb(l);
 
 	tf->tf_flags = TFF_SYS|TFF_LAST;
 	tf->tf_iioq_tail = 4 +

Index: src/sys/arch/hppa/hppa/core_machdep.c
diff -u src/sys/arch/hppa/hppa/core_machdep.c:1.3 src/sys/arch/hppa/hppa/core_machdep.c:1.4
--- src/sys/arch/hppa/hppa/core_machdep.c:1.3	Tue Nov  3 05:07:26 2009
+++ src/sys/arch/hppa/hppa/core_machdep.c	Sat Nov 21 15:36:33 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: core_machdep.c,v 1.3 2009/11/03 05:07:26 snj Exp $	*/
+/*	$NetBSD: core_machdep.c,v 1.4 2009/11/21 15:36:33 rmind Exp $	*/
 
 /*	$OpenBSD: vm_machdep.c,v 1.25 2001/09/19 20:50:56 mickey Exp $	*/
 
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: core_machdep.c,v 1.3 2009/11/03 05:07:26 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: core_machdep.c,v 1.4 2009/11/21 15:36:33 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -38,7 +38,6 @@
 #include <sys/malloc.h>
 #include <sys/buf.h>
 #include <sys/vnode.h>
-#include <sys/user.h>
 #include <sys/ptrace.h>
 #include <sys/exec.h>
 #include <sys/core.h>

Index: src/sys/arch/hppa/hppa/db_interface.c
diff -u src/sys/arch/hppa/hppa/db_interface.c:1.19 src/sys/arch/hppa/hppa/db_interface.c:1.20
--- src/sys/arch/hppa/hppa/db_interface.c:1.19	Sun Nov 15 18:17:18 2009
+++ src/sys/arch/hppa/hppa/db_interface.c	Sat Nov 21 15:36:33 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: db_interface.c,v 1.19 2009/11/15 18:17:18 dholland Exp $	*/
+/*	$NetBSD: db_interface.c,v 1.20 2009/11/21 15:36:33 rmind Exp $	*/
 
 /*	$OpenBSD: db_interface.c,v 1.16 2001/03/22 23:31:45 mickey Exp $	*/
 
@@ -29,12 +29,11 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_interface.c,v 1.19 2009/11/15 18:17:18 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_interface.c,v 1.20 2009/11/21 15:36:33 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/proc.h>
-#include <sys/user.h> 
 
 #include <machine/db_machdep.h>
 #include <machine/frame.h>

Index: src/sys/arch/hppa/hppa/db_trace.c
diff -u src/sys/arch/hppa/hppa/db_trace.c:1.5 src/sys/arch/hppa/hppa/db_trace.c:1.6
--- src/sys/arch/hppa/hppa/db_trace.c:1.5	Tue Nov  3 05:07:26 2009
+++ src/sys/arch/hppa/hppa/db_trace.c	Sat Nov 21 15:36:33 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: db_trace.c,v 1.5 2009/11/03 05:07:26 snj Exp $	*/
+/*	$NetBSD: db_trace.c,v 1.6 2009/11/21 15:36:33 rmind Exp $	*/
 
 /*	$OpenBSD: db_interface.c,v 1.16 2001/03/22 23:31:45 mickey Exp $	*/
 
@@ -29,12 +29,11 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.5 2009/11/03 05:07:26 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.6 2009/11/21 15:36:33 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/proc.h>
-#include <sys/user.h> 
 
 #include <machine/db_machdep.h>
 
@@ -77,8 +76,8 @@
 	} else {
 		if (trace_thread) {
 			struct proc *p;
-			struct user *u;
 			struct lwp *l;
+
 			if (lwpaddr) {
 				l = (struct lwp *)addr;
 				p = l->l_proc;
@@ -94,14 +93,14 @@
 				KASSERT(l != NULL);
 			}
 			(*pr)("lid %d ", l->l_lid);
-			u = l->l_addr;
 			if (p == curproc && l == curlwp) {
 				fp = (int *)ddb_regs.tf_r3;
 				pc = ddb_regs.tf_iioq_head;
 				rp = ddb_regs.tf_rp;
 			} else {
+				struct pcb *pcb = lwp_getpcb(l);
 				/* cpu_switchto fp, and return point */
-				fp = (int *)(u->u_pcb.pcb_ksp -
+				fp = (int *)(pcb->pcb_ksp -
 				    (HPPA_FRAME_SIZE + 16*4));
 				pc = 0;
 				rp = fp[-5];

Index: src/sys/arch/hppa/hppa/fpu.c
diff -u src/sys/arch/hppa/hppa/fpu.c:1.18 src/sys/arch/hppa/hppa/fpu.c:1.19
--- src/sys/arch/hppa/hppa/fpu.c:1.18	Sun May 24 06:53:35 2009
+++ src/sys/arch/hppa/hppa/fpu.c	Sat Nov 21 15:36:33 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu.c,v 1.18 2009/05/24 06:53:35 skrll Exp $	*/
+/*	$NetBSD: fpu.c,v 1.19 2009/11/21 15:36:33 rmind Exp $	*/
 
 /*
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -34,13 +34,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.18 2009/05/24 06:53:35 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu.c,v 1.19 2009/11/21 15:36:33 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/proc.h>
 #include <sys/signalvar.h>
-#include <sys/user.h>
 
 #include <uvm/uvm_extern.h>
 
@@ -217,6 +216,7 @@
 hppa_fpu_flush(struct lwp *l)
 {
 	struct trapframe *tf = l->l_md.md_regs;
+	struct pcb *pcb = lwp_getpcb(l);
 
 	/*
 	 * If we have a hardware FPU, and this process'
@@ -228,7 +228,7 @@
 		return;
 	}
 
-	hppa_fpu_swap(&l->l_addr->u_pcb, NULL);
+	hppa_fpu_swap(pcb, NULL);
 	fpu_cur_uspace = 0;
 }
 
@@ -241,6 +241,7 @@
 static int 
 hppa_fpu_ls(struct trapframe *frame, struct lwp *l)
 {
+	struct pcb *pcb = lwp_getpcb(l);
 	u_int inst, inst_b, inst_x, inst_s, inst_t;
 	int log2size;
 	u_int *base;
@@ -270,14 +271,14 @@
 	 * The space must be the user's space, else we
 	 * segfault.
 	 */
-	if (inst_s != l->l_addr->u_pcb.pcb_space)
+	if (inst_s != pcb->pcb_space)
 		return (EFAULT);
 
 	/* See whether or not this is a doubleword load/store. */
 	log2size = (inst & OPCODE_DOUBLE) ? 3 : 2;
 
 	/* Get the floating point register. */
-	fpreg = ((char *)l->l_addr->u_pcb.pcb_fpregs) + (inst_t << log2size);
+	fpreg = ((char *)pcb->pcb_fpregs) + (inst_t << log2size);
 
 	/* Get the base register. */
 	base = FRAME_REG(frame, inst_b, r0);
@@ -338,8 +339,7 @@
 	error = (inst & OPCODE_STORE) ?
 		copyout(fpreg, (void *) offset, 1 << log2size) :
 		copyin((const void *) offset, fpreg, 1 << log2size);
-	fdcache(HPPA_SID_KERNEL, (vaddr_t)fpreg,
-		sizeof(l->l_addr->u_pcb.pcb_fpregs));
+	fdcache(HPPA_SID_KERNEL, (vaddr_t)fpreg, sizeof(pcb->pcb_fpregs));
 	return error;
 }
 
@@ -349,6 +349,7 @@
 void 
 hppa_fpu_emulate(struct trapframe *frame, struct lwp *l, u_int inst)
 {
+	struct pcb *pcb = lwp_getpcb(l);
 	u_int opcode, class, sub;
 	u_int *fpregs;
 	int exception;
@@ -389,7 +390,7 @@
 #endif
 
 	/* Get this LWP's FPU registers. */
-	fpregs = (u_int *) l->l_addr->u_pcb.pcb_fpregs;
+	fpregs = (u_int *)pcb->pcb_fpregs;
 
 	/* Dispatch on the opcode. */
 	switch (opcode) {
@@ -444,8 +445,7 @@
 		ksi.ksi_addr = (void *)frame->tf_iioq_head;
 		trapsignal(l, &ksi);
 	}
-	fdcache(HPPA_SID_KERNEL, (vaddr_t)fpregs,
-		sizeof(l->l_addr->u_pcb.pcb_fpregs));
+	fdcache(HPPA_SID_KERNEL, (vaddr_t)fpregs, sizeof(pcb->pcb_fpregs));
 }
 
 #endif /* FPEMUL */

Index: src/sys/arch/hppa/hppa/hppa_machdep.c
diff -u src/sys/arch/hppa/hppa/hppa_machdep.c:1.17 src/sys/arch/hppa/hppa/hppa_machdep.c:1.18
--- src/sys/arch/hppa/hppa/hppa_machdep.c:1.17	Mon Jun  1 07:10:14 2009
+++ src/sys/arch/hppa/hppa/hppa_machdep.c	Sat Nov 21 15:36:33 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: hppa_machdep.c,v 1.17 2009/06/01 07:10:14 skrll Exp $	*/
+/*	$NetBSD: hppa_machdep.c,v 1.18 2009/11/21 15:36:33 rmind Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -27,14 +27,13 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hppa_machdep.c,v 1.17 2009/06/01 07:10:14 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hppa_machdep.c,v 1.18 2009/11/21 15:36:33 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/sa.h>
 #include <sys/lwp.h>
 #include <sys/savar.h>
-#include <sys/user.h>
 #include <sys/proc.h>
 #include <sys/ras.h>
 #include <sys/cpu.h>
@@ -141,6 +140,7 @@
 cpu_getmcontext(struct lwp *l, mcontext_t *mcp, unsigned int *flags)
 {
 	struct trapframe *tf = l->l_md.md_regs;
+	struct pcb *pcb = lwp_getpcb(l);
 	__greg_t *gr = mcp->__gregs;
 	__greg_t ras_pc;
 
@@ -207,10 +207,9 @@
 	}
 
 	hppa_fpu_flush(l);
-	memcpy(&mcp->__fpregs, l->l_addr->u_pcb.pcb_fpregs,
-	       sizeof(mcp->__fpregs));
-	fdcache(HPPA_SID_KERNEL, (vaddr_t)l->l_addr->u_pcb.pcb_fpregs,
-		sizeof(l->l_addr->u_pcb.pcb_fpregs));
+	memcpy(&mcp->__fpregs, pcb->pcb_fpregs, sizeof(mcp->__fpregs));
+	fdcache(HPPA_SID_KERNEL, (vaddr_t)pcb->pcb_fpregs,
+	    sizeof(pcb->pcb_fpregs));
 	*flags |= _UC_FPU;
 }
 
@@ -317,11 +316,12 @@
 	}
 
 	if ((flags & _UC_FPU) != 0) {
+		struct pcb *pcb = lwp_getpcb(l);
+
 		hppa_fpu_flush(l);
-		memcpy(l->l_addr->u_pcb.pcb_fpregs, &mcp->__fpregs,
-		       sizeof(mcp->__fpregs));
-		fdcache(HPPA_SID_KERNEL, (vaddr_t)l->l_addr->u_pcb.pcb_fpregs,
-			sizeof(l->l_addr->u_pcb.pcb_fpregs));
+		memcpy(pcb->pcb_fpregs, &mcp->__fpregs, sizeof(mcp->__fpregs));
+		fdcache(HPPA_SID_KERNEL, (vaddr_t)pcb->pcb_fpregs,
+		    sizeof(pcb->pcb_fpregs));
 	}
 
 	mutex_enter(p->p_lock);

Index: src/sys/arch/hppa/hppa/pmap.c
diff -u src/sys/arch/hppa/hppa/pmap.c:1.56 src/sys/arch/hppa/hppa/pmap.c:1.57
--- src/sys/arch/hppa/hppa/pmap.c:1.56	Sat Nov 14 13:31:44 2009
+++ src/sys/arch/hppa/hppa/pmap.c	Sat Nov 21 15:36:33 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.56 2009/11/14 13:31:44 skrll Exp $	*/
+/*	$NetBSD: pmap.c,v 1.57 2009/11/21 15:36:33 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.56 2009/11/14 13:31:44 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.57 2009/11/21 15:36:33 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1678,13 +1678,13 @@
 	struct proc *p = l->l_proc;
 	pmap_t pmap = p->p_vmspace->vm_map.pmap;
 	pa_space_t space = pmap->pm_space;
-	struct pcb *pcb = &l->l_addr->u_pcb;
+	struct pcb *pcb = lwp_getpcb(l);
 
 	KASSERT(pcb->pcb_uva == (vaddr_t)l->l_addr);
 
 	/* space is cached for the copy{in,out}'s pleasure */
 	pcb->pcb_space = space;
-	fdcache(HPPA_SID_KERNEL, (vaddr_t)pcb, PAGE_SIZE);
+	fdcache(HPPA_SID_KERNEL, (vaddr_t)l->l_addr, PAGE_SIZE);
 
 	if (p == curproc)
 		mtctl(pmap->pm_pid, CR_PIDR2);

Index: src/sys/arch/hppa/hppa/process_machdep.c
diff -u src/sys/arch/hppa/hppa/process_machdep.c:1.13 src/sys/arch/hppa/hppa/process_machdep.c:1.14
--- src/sys/arch/hppa/hppa/process_machdep.c:1.13	Tue Nov  3 05:07:26 2009
+++ src/sys/arch/hppa/hppa/process_machdep.c	Sat Nov 21 15:36:33 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: process_machdep.c,v 1.13 2009/11/03 05:07:26 snj Exp $	*/
+/*	$NetBSD: process_machdep.c,v 1.14 2009/11/21 15:36:33 rmind Exp $	*/
 
 /*	$OpenBSD: process_machdep.c,v 1.3 1999/06/18 05:19:52 mickey Exp $	*/
 
@@ -29,13 +29,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.13 2009/11/03 05:07:26 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.14 2009/11/21 15:36:33 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/proc.h>
 #include <sys/ptrace.h>
-#include <sys/user.h>
 
 #include <uvm/uvm_extern.h>
 
@@ -110,10 +109,11 @@
 int
 process_read_fpregs(struct lwp *l, struct fpreg *fpregs)
 {
+	struct pcb *pcb = lwp_getpcb(l);
+
 	hppa_fpu_flush(l);
-	memcpy(fpregs, l->l_addr->u_pcb.pcb_fpregs, sizeof(*fpregs));
-	fdcache(HPPA_SID_KERNEL, (vaddr_t)&l->l_addr->u_pcb.pcb_fpregs,
-		sizeof(*fpregs));
+	memcpy(fpregs, pcb->pcb_fpregs, sizeof(*fpregs));
+	fdcache(HPPA_SID_KERNEL, (vaddr_t)&pcb->pcb_fpregs, sizeof(*fpregs));
 	return 0;
 }
 
@@ -174,19 +174,19 @@
 int
 process_write_fpregs(struct lwp *l, const struct fpreg *fpregs)
 {
+	struct pcb *pcb = lwp_getpcb(l);
+
 	hppa_fpu_flush(l);
-	memcpy(l->l_addr->u_pcb.pcb_fpregs, fpregs, sizeof(*fpregs));
-	fdcache(HPPA_SID_KERNEL, (vaddr_t)&l->l_addr->u_pcb.pcb_fpregs,
-		sizeof(*fpregs));
+	memcpy(pcb->pcb_fpregs, fpregs, sizeof(*fpregs));
+	fdcache(HPPA_SID_KERNEL, (vaddr_t)&pcb->pcb_fpregs, sizeof(*fpregs));
 	return 0;
 }
 
 int
 process_set_pc(struct lwp *l, void *addr)
 {
+
 	l->l_md.md_regs->tf_iioq_head = (register_t)addr | HPPA_PC_PRIV_USER;
 	l->l_md.md_regs->tf_iioq_tail = l->l_md.md_regs->tf_iioq_head + 4;
-
 	return 0;
 }
-

Index: src/sys/arch/hppa/hppa/sig_machdep.c
diff -u src/sys/arch/hppa/hppa/sig_machdep.c:1.22 src/sys/arch/hppa/hppa/sig_machdep.c:1.23
--- src/sys/arch/hppa/hppa/sig_machdep.c:1.22	Fri Nov 21 01:57:33 2008
+++ src/sys/arch/hppa/hppa/sig_machdep.c	Sat Nov 21 15:36:34 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: sig_machdep.c,v 1.22 2008/11/21 01:57:33 he Exp $	*/
+/*	$NetBSD: sig_machdep.c,v 1.23 2009/11/21 15:36:34 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -104,7 +104,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sig_machdep.c,v 1.22 2008/11/21 01:57:33 he Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sig_machdep.c,v 1.23 2009/11/21 15:36:34 rmind Exp $");
 
 #include "opt_compat_netbsd.h"
 
@@ -112,7 +112,6 @@
 #include <sys/systm.h>
 #include <sys/kernel.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/signal.h>
 #include <sys/signalvar.h>
 
@@ -157,6 +156,7 @@
 {
 	struct lwp *l = curlwp;
 	struct proc *p = l->l_proc;
+	struct pcb *pcb = lwp_getpcb(l);
 	struct sigacts *ps = p->p_sigacts;
 	struct sigframe_siginfo *fp, frame;
 	struct trapframe *tf;
@@ -209,7 +209,7 @@
 	tf->tf_r3 = (__greg_t)&fp->sf_uc;
 
 	fp++;
-	tf->tf_iisq_head = tf->tf_iisq_tail = l->l_addr->u_pcb.pcb_space;
+	tf->tf_iisq_head = tf->tf_iisq_tail = pcb->pcb_space;
 	tf->tf_iioq_head =
 		(__greg_t)ps->sa_sigdesc[sig].sd_tramp | HPPA_PC_PRIV_USER;
 	tf->tf_iioq_tail = tf->tf_iioq_head + 4;

Index: src/sys/arch/hppa/hppa/trap.c
diff -u src/sys/arch/hppa/hppa/trap.c:1.60 src/sys/arch/hppa/hppa/trap.c:1.61
--- src/sys/arch/hppa/hppa/trap.c:1.60	Tue Nov  3 05:07:26 2009
+++ src/sys/arch/hppa/hppa/trap.c	Sat Nov 21 15:36:34 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.60 2009/11/03 05:07:26 snj Exp $	*/
+/*	$NetBSD: trap.c,v 1.61 2009/11/21 15:36:34 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.60 2009/11/03 05:07:26 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.61 2009/11/21 15:36:34 rmind Exp $");
 
 /* #define INTRDEBUG */
 /* #define TRAPDEBUG */
@@ -79,7 +79,6 @@
 #include <sys/ktrace.h>
 #include <sys/proc.h>
 #include <sys/signalvar.h>
-#include <sys/user.h>
 #include <sys/acct.h>
 #include <sys/signal.h>
 #include <sys/device.h>
@@ -481,7 +480,7 @@
 {
 	struct lwp *l;
 	struct proc *p;
-	struct pcb *pcbp;
+	struct pcb *pcb;
 	vaddr_t va;
 	struct vm_map *map;
 	struct vmspace *vm;
@@ -579,6 +578,8 @@
 		}
 	}
 #endif
+	pcb = lwp_getpcb(l);
+
 	switch (type) {
 	case T_NONEXIST:
 	case T_NONEXIST|T_USER:
@@ -639,13 +640,11 @@
 		break;
 
 	case T_DATALIGN:
-		if (l->l_addr->u_pcb.pcb_onfault) {
+		if (pcb->pcb_onfault) {
 do_onfault:
-			pcbp = &l->l_addr->u_pcb;
-			frame->tf_iioq_tail = 4 +
-				(frame->tf_iioq_head =
-				 pcbp->pcb_onfault);
-			pcbp->pcb_onfault = 0;
+			frame->tf_iioq_head = pcb->pcb_onfault;
+			frame->tf_iioq_tail = 4 + frame->tf_iioq_head;
+			pcb->pcb_onfault = 0;
 			break;
 		}
 		/*FALLTHROUGH*/
@@ -721,7 +720,7 @@
 		int i;
 
 		hppa_fpu_flush(l);
-		fpp = l->l_addr->u_pcb.pcb_fpregs;
+		fpp = pcb->pcb_fpregs;
 		pex = (uint32_t *)&fpp[1];
 		for (i = 1; i < 8 && !*pex; i++, pex++)
 			;
@@ -856,10 +855,10 @@
 		/* Never call uvm_fault in interrupt context. */
 		KASSERT(hppa_intr_depth == 0);
 
-		onfault = l->l_addr->u_pcb.pcb_onfault;
-		l->l_addr->u_pcb.pcb_onfault = 0;
+		onfault = pcb->pcb_onfault;
+		pcb->pcb_onfault = 0;
 		ret = uvm_fault(map, va, vftype);
-		l->l_addr->u_pcb.pcb_onfault = onfault;
+		pcb->pcb_onfault = onfault;
 
 #ifdef TRAPDEBUG
 		printf("uvm_fault(%p, %x, %d)=%d\n",
@@ -896,7 +895,7 @@
 				ksi.ksi_addr = (void *)va;
 				trapsignal(l, &ksi);
 			} else {
-				if (l->l_addr->u_pcb.pcb_onfault) {
+				if (pcb->pcb_onfault) {
 					goto do_onfault;
 				}
 				panic("trap: uvm_fault(%p, %lx, %d): %d",

Index: src/sys/arch/hppa/hppa/vm_machdep.c
diff -u src/sys/arch/hppa/hppa/vm_machdep.c:1.37 src/sys/arch/hppa/hppa/vm_machdep.c:1.38
--- src/sys/arch/hppa/hppa/vm_machdep.c:1.37	Wed Oct 21 21:12:00 2009
+++ src/sys/arch/hppa/hppa/vm_machdep.c	Sat Nov 21 15:36:34 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: vm_machdep.c,v 1.37 2009/10/21 21:12:00 rmind Exp $	*/
+/*	$NetBSD: vm_machdep.c,v 1.38 2009/11/21 15:36:34 rmind Exp $	*/
 
 /*	$OpenBSD: vm_machdep.c,v 1.64 2008/09/30 18:54:26 miod Exp $	*/
 
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.37 2009/10/21 21:12:00 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.38 2009/11/21 15:36:34 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -38,7 +38,6 @@
 #include <sys/malloc.h>
 #include <sys/buf.h>
 #include <sys/vnode.h>
-#include <sys/user.h>
 #include <sys/ptrace.h>
 #include <sys/exec.h>
 #include <sys/core.h>
@@ -55,18 +54,18 @@
 cpu_activate_pcb(struct lwp *l)
 {
 	struct trapframe *tf = l->l_md.md_regs;
-	vaddr_t pcb = (vaddr_t)l->l_addr;
+	struct pcb *pcb = lwp_getpcb(l);
+	vaddr_t uarea = (vaddr_t)pcb;
 #ifdef DIAGNOSTIC
-	vaddr_t maxsp = pcb + USPACE;
+	vaddr_t maxsp = (vaddr_t)uarea + USPACE;
 #endif
-
-	KASSERT(tf == (void *)(pcb + PAGE_SIZE));
+	KASSERT(tf == (void *)(uarea + PAGE_SIZE));
 	/*
 	 * Stash the physical for the pcb of U for later perusal
 	 */
-	l->l_addr->u_pcb.pcb_uva = pcb;
-	tf->tf_cr30 = kvtop((void *)pcb);
-	fdcache(HPPA_SID_KERNEL, pcb, sizeof(l->l_addr->u_pcb));
+	pcb->pcb_uva = uarea;
+	tf->tf_cr30 = kvtop((void *)uarea);
+	fdcache(HPPA_SID_KERNEL, (vaddr_t)pcb, sizeof(struct pcb));
 
 #ifdef DIAGNOSTIC
 	/* Create the kernel stack red zone. */
@@ -82,14 +81,14 @@
 	struct proc *p = l2->l_proc;
 	pmap_t pmap = p->p_vmspace->vm_map.pmap;
 	pa_space_t space = pmap->pm_space;
-	struct pcb *pcbp;
+	struct pcb *pcb1, *pcb2;
 	struct trapframe *tf;
 	register_t sp, osp;
 
-#ifdef DIAGNOSTIC
-	if (round_page(sizeof(struct user)) > PAGE_SIZE)
-		panic("USPACE too small for user");
-#endif
+	KASSERT(round_page(sizeof(struct pcb)) <= PAGE_SIZE);
+
+	pcb1 = lwp_getpcb(l1);
+	pcb2 = lwp_getpcb(l2);
 
 	l2->l_md.md_flags = 0;
 
@@ -97,15 +96,14 @@
 	hppa_fpu_flush(l1);
 
 	/* Now copy the parent PCB into the child. */
-	pcbp = &l2->l_addr->u_pcb;
-	memcpy(pcbp, &l1->l_addr->u_pcb, sizeof(*pcbp));
-	fdcache(HPPA_SID_KERNEL, (vaddr_t)&l1->l_addr->u_pcb,
-		sizeof(pcbp->pcb_fpregs));
+	memcpy(pcb2, pcb1, sizeof(struct pcb));
+	fdcache(HPPA_SID_KERNEL, (vaddr_t)pcb1, sizeof(pcb1->pcb_fpregs));
+
 	/* reset any of the pending FPU exceptions from parent */
-	pcbp->pcb_fpregs[0] = HPPA_FPU_FORK(pcbp->pcb_fpregs[0]);
-	pcbp->pcb_fpregs[1] = 0;
-	pcbp->pcb_fpregs[2] = 0;
-	pcbp->pcb_fpregs[3] = 0;
+	pcb2->pcb_fpregs[0] = HPPA_FPU_FORK(pcb2->pcb_fpregs[0]);
+	pcb2->pcb_fpregs[1] = 0;
+	pcb2->pcb_fpregs[2] = 0;
+	pcb2->pcb_fpregs[3] = 0;
 
 	sp = (register_t)l2->l_addr + PAGE_SIZE;
 	l2->l_md.md_regs = tf = (struct trapframe *)sp;
@@ -133,7 +131,7 @@
 	mfctl(CR_EIEM, tf->tf_eiem);
 	tf->tf_ipsw = PSW_C | PSW_Q | PSW_P | PSW_D | PSW_I /* | PSW_L */ |
 	    (kpsw & PSW_O);
-	pcbp->pcb_fpregs[HPPA_NFPREGS] = 0;
+	pcb2->pcb_fpregs[HPPA_NFPREGS] = 0;
 
 	/*
 	 * Set up return value registers as libc:fork() expects
@@ -167,18 +165,18 @@
 	 * 	stack usage is std frame + callee-save registers
 	 */
 	sp += HPPA_FRAME_SIZE + 16*4;
-	pcbp->pcb_ksp = sp;
+	pcb2->pcb_ksp = sp;
 	fdcache(HPPA_SID_KERNEL, (vaddr_t)l2->l_addr, sp - (vaddr_t)l2->l_addr);
 }
 
 void
 cpu_setfunc(struct lwp *l, void (*func)(void *), void *arg)
 {
-	struct pcb *pcbp = &l->l_addr->u_pcb;
+	struct pcb *pcb = lwp_getpcb(l);
 	struct trapframe *tf;
 	register_t sp, osp;
 
-	sp = (register_t)pcbp + PAGE_SIZE;
+	sp = (register_t)pcb + PAGE_SIZE;
 	l->l_md.md_regs = tf = (struct trapframe *)sp;
 	sp += sizeof(struct trapframe);
 
@@ -203,7 +201,7 @@
 	 * 	stack usage is std frame + callee-save registers
 	 */
 	sp += HPPA_FRAME_SIZE + 16*4;
-	pcbp->pcb_ksp = sp;
+	pcb->pcb_ksp = sp;
 	fdcache(HPPA_SID_KERNEL, (vaddr_t)l->l_addr, sp - (vaddr_t)l->l_addr);
 }
 

Index: src/sys/arch/ia64/ia64/cpu.c
diff -u src/sys/arch/ia64/ia64/cpu.c:1.6 src/sys/arch/ia64/ia64/cpu.c:1.7
--- src/sys/arch/ia64/ia64/cpu.c:1.6	Mon Jul 20 06:12:41 2009
+++ src/sys/arch/ia64/ia64/cpu.c	Sat Nov 21 15:36:34 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.c,v 1.6 2009/07/20 06:12:41 kiyohara Exp $	*/
+/*	$NetBSD: cpu.c,v 1.7 2009/11/21 15:36:34 rmind Exp $	*/
 
 /*
  * Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -30,11 +30,10 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.6 2009/07/20 06:12:41 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.7 2009/11/21 15:36:34 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/systm.h>
 #include <sys/device.h>
 #include <sys/malloc.h>

Index: src/sys/arch/ia64/ia64/machdep.c
diff -u src/sys/arch/ia64/ia64/machdep.c:1.17 src/sys/arch/ia64/ia64/machdep.c:1.18
--- src/sys/arch/ia64/ia64/machdep.c:1.17	Sun Aug 23 16:15:45 2009
+++ src/sys/arch/ia64/ia64/machdep.c	Sat Nov 21 15:36:34 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.17 2009/08/23 16:15:45 ahoka Exp $	*/
+/*	$NetBSD: machdep.c,v 1.18 2009/11/21 15:36:34 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2003,2004 Marcel Moolenaar
@@ -741,7 +741,8 @@
 	 * sane) context as the initial context for new threads that are
 	 * forked from us.
 	 */
-	if (savectx(&lwp0.l_addr->u_pcb)) panic("savectx failed");
+	if (savectx(lwp_getpcb(&lwp0)))
+		panic("savectx failed");
 
 	/*
 	 * Initialize debuggers, and break into them if appropriate.

Index: src/sys/arch/ia64/ia64/vm_machdep.c
diff -u src/sys/arch/ia64/ia64/vm_machdep.c:1.8 src/sys/arch/ia64/ia64/vm_machdep.c:1.9
--- src/sys/arch/ia64/ia64/vm_machdep.c:1.8	Thu Oct 22 22:28:57 2009
+++ src/sys/arch/ia64/ia64/vm_machdep.c	Sat Nov 21 15:36:34 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: vm_machdep.c,v 1.8 2009/10/22 22:28:57 rmind Exp $	*/
+/*	$NetBSD: vm_machdep.c,v 1.9 2009/11/21 15:36:34 rmind Exp $	*/
 
 /*
  * Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -36,7 +36,6 @@
 #include <sys/param.h>
 #include <sys/proc.h>
 #include <sys/systm.h>
-#include <sys/user.h>
 
 #include <machine/frame.h>
 #include <machine/md_var.h>
@@ -84,23 +83,24 @@
 cpu_lwp_fork(struct lwp *l1, struct lwp *l2, void *stack, size_t stacksize,
     void (*func)(void *), void *arg)
 {
-	struct pcb *pcb;
+	struct pcb *pcb1, *pcb2;
 	struct trapframe *tf;
 
-        /* Copy pcb from lwp l1 to l2. */
+	pcb1 = lwp_getpcb(l1);
+	pcb2 = lwp_getpcb(l2);
+
+	/* Copy pcb from lwp l1 to l2. */
 	if (l1 == curlwp) {
 		/* Sync the PCB before we copy it. */
-		savectx(&l1->l_addr->u_pcb);
+		savectx(pcb1);
 #if 0
-//		ia64_highfp_save(???);
+		/* ia64_highfp_save(???); */
 #endif
+	} else {
+		KASSERT(l1 == &lwp0);
 	}
-#ifdef DIAGNOSTIC
-	else if (l1 != &lwp0)
-		panic("cpu_lwp_fork: curlwp");
-#endif
-	pcb = &l2->l_addr->u_pcb;
-	*pcb = l1->l_addr->u_pcb;
+
+	*pcb2 = *pcb1;
 
 	l2->l_md.md_flags = l1->l_md.md_flags;
 	l2->l_md.md_tf = (struct trapframe *)((vaddr_t)l2->l_addr + USPACE) - 1;
@@ -130,9 +130,9 @@
 
 	tf->tf_scratch.gr2 = (unsigned long)FDESC_FUNC(func);
 	tf->tf_scratch.gr3 = (unsigned long)arg;
-	pcb->pcb_special.sp = (unsigned long)tf - 16;
-	pcb->pcb_special.rp = (unsigned long)FDESC_FUNC(lwp_trampoline);
-	pcb->pcb_special.pfs = 0;
+	pcb2->pcb_special.sp = (unsigned long)tf - 16;
+	pcb2->pcb_special.rp = (unsigned long)FDESC_FUNC(lwp_trampoline);
+	pcb2->pcb_special.pfs = 0;
 
 	return;
 }

Index: src/sys/arch/ia64/include/proc.h
diff -u src/sys/arch/ia64/include/proc.h:1.3 src/sys/arch/ia64/include/proc.h:1.4
--- src/sys/arch/ia64/include/proc.h:1.3	Thu Mar 20 09:09:20 2008
+++ src/sys/arch/ia64/include/proc.h	Sat Nov 21 15:36:34 2009
@@ -1,7 +1,9 @@
 #ifndef _IA64_PROC_H_
 #define _IA64_PROC_H_
 
+#include <sys/user.h> /* for sizeof(struct user) */
 #include <machine/frame.h>
+
 /*
  * Machine-dependent part of the lwp structure for ia64
  */

Reply via email to