Module Name:    src
Committed By:   rmind
Date:           Sat Nov 21 05:35:41 UTC 2009

Modified Files:
        src/sys/arch/alpha/a12: a12dc.c
        src/sys/arch/alpha/alpha: compat_13_machdep.c compat_16_machdep.c
            core_machdep.c cpu.c db_trace.c linux_syscall.c linux_trap.c
            machdep.c osf1_syscall.c pmap.c process_machdep.c prom.c promcons.c
            syscall.c trap.c vm_machdep.c
        src/sys/arch/alpha/include: proc.h
        src/sys/arch/alpha/jensenio: com_jensenio.c lpt_jensenio.c
        src/sys/arch/alpha/sableio: com_sableio.c lpt_sableio.c

Log Message:
- Use lwp_getpcb() on Alpha.
- Replace and clean struct user usage, slightly simplify some code parts.
- Include sys/user.h in MD proc.h .


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/alpha/a12/a12dc.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/alpha/alpha/compat_13_machdep.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/alpha/alpha/compat_16_machdep.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/alpha/alpha/core_machdep.c
cvs rdiff -u -r1.86 -r1.87 src/sys/arch/alpha/alpha/cpu.c
cvs rdiff -u -r1.25 -r1.26 src/sys/arch/alpha/alpha/db_trace.c
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/alpha/alpha/linux_syscall.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/alpha/alpha/linux_trap.c
cvs rdiff -u -r1.321 -r1.322 src/sys/arch/alpha/alpha/machdep.c
cvs rdiff -u -r1.31 -r1.32 src/sys/arch/alpha/alpha/osf1_syscall.c
cvs rdiff -u -r1.250 -r1.251 src/sys/arch/alpha/alpha/pmap.c
cvs rdiff -u -r1.24 -r1.25 src/sys/arch/alpha/alpha/process_machdep.c
cvs rdiff -u -r1.45 -r1.46 src/sys/arch/alpha/alpha/prom.c
cvs rdiff -u -r1.34 -r1.35 src/sys/arch/alpha/alpha/promcons.c \
    src/sys/arch/alpha/alpha/syscall.c
cvs rdiff -u -r1.120 -r1.121 src/sys/arch/alpha/alpha/trap.c
cvs rdiff -u -r1.101 -r1.102 src/sys/arch/alpha/alpha/vm_machdep.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/alpha/include/proc.h
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/alpha/jensenio/com_jensenio.c
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/alpha/jensenio/lpt_jensenio.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/alpha/sableio/com_sableio.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/alpha/sableio/lpt_sableio.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/alpha/a12/a12dc.c
diff -u src/sys/arch/alpha/a12/a12dc.c:1.23 src/sys/arch/alpha/a12/a12dc.c:1.24
--- src/sys/arch/alpha/a12/a12dc.c:1.23	Wed Mar 18 10:22:22 2009
+++ src/sys/arch/alpha/a12/a12dc.c	Sat Nov 21 05:35:40 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: a12dc.c,v 1.23 2009/03/18 10:22:22 cegger Exp $ */
+/* $NetBSD: a12dc.c,v 1.24 2009/11/21 05:35:40 rmind Exp $ */
 
 /* [Notice revision 2.2]
  * Copyright (c) 1997, 1998 Avalon Computer Systems, Inc.
@@ -64,7 +64,7 @@
 #ifndef BSIDE
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: a12dc.c,v 1.23 2009/03/18 10:22:22 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: a12dc.c,v 1.24 2009/11/21 05:35:40 rmind Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -73,7 +73,6 @@
 
 #include <sys/tty.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/uio.h>
 #include <sys/device.h>
 #include <sys/conf.h>
@@ -159,7 +158,7 @@
 	/* note that we've attached the chipset; can't have 2 A12Cs. */
 	a12dcfound = 1;
 
-	printf(": driver %s\n", "$Revision: 1.23 $");
+	printf(": driver %s\n", "$Revision: 1.24 $");
 
 	tp = a12dc_tty[0] = ttymalloc();
 	tp->t_oproc = a12dcstart;

Index: src/sys/arch/alpha/alpha/compat_13_machdep.c
diff -u src/sys/arch/alpha/alpha/compat_13_machdep.c:1.17 src/sys/arch/alpha/alpha/compat_13_machdep.c:1.18
--- src/sys/arch/alpha/alpha/compat_13_machdep.c:1.17	Thu Apr 24 18:39:20 2008
+++ src/sys/arch/alpha/alpha/compat_13_machdep.c	Sat Nov 21 05:35:40 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_13_machdep.c,v 1.17 2008/04/24 18:39:20 ad Exp $ */
+/* $NetBSD: compat_13_machdep.c,v 1.18 2009/11/21 05:35:40 rmind Exp $ */
 
 /*
  * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
@@ -29,14 +29,13 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: compat_13_machdep.c,v 1.17 2008/04/24 18:39:20 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: compat_13_machdep.c,v 1.18 2009/11/21 05:35:40 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/signalvar.h>
 #include <sys/kernel.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/mount.h>
 #include <sys/syscallargs.h>
 
@@ -66,6 +65,7 @@
 	} */
 	struct sigcontext13 *scp, ksc;
 	struct proc *p = l->l_proc;
+	struct pcb *pcb;
 	sigset13_t mask13;
 	sigset_t mask;
 
@@ -93,9 +93,10 @@
 	alpha_pal_wrusp(ksc.sc_regs[R_SP]);
 
 	/* XXX ksc.sc_ownedfp ? */
-	if (l->l_addr->u_pcb.pcb_fpcpu != NULL)
+	pcb = lwp_getpcb(l);
+	if (pcb->pcb_fpcpu != NULL)
 		fpusave_proc(l, 0);
-	memcpy(&l->l_addr->u_pcb.pcb_fp, (struct fpreg *)ksc.sc_fpregs,
+	memcpy(&pcb->pcb_fp, (struct fpreg *)ksc.sc_fpregs,
 	    sizeof(struct fpreg));
 	/* XXX ksc.sc_fp_control ? */
 

Index: src/sys/arch/alpha/alpha/compat_16_machdep.c
diff -u src/sys/arch/alpha/alpha/compat_16_machdep.c:1.15 src/sys/arch/alpha/alpha/compat_16_machdep.c:1.16
--- src/sys/arch/alpha/alpha/compat_16_machdep.c:1.15	Fri Nov 21 19:48:56 2008
+++ src/sys/arch/alpha/alpha/compat_16_machdep.c	Sat Nov 21 05:35:40 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_16_machdep.c,v 1.15 2008/11/21 19:48:56 he Exp $ */
+/* $NetBSD: compat_16_machdep.c,v 1.16 2009/11/21 05:35:40 rmind Exp $ */
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -77,7 +77,6 @@
 #include <sys/systm.h>
 #include <sys/syscall.h>
 #include <sys/syscallargs.h>
-#include <sys/user.h>
 
 #if defined(COMPAT_13) || defined(COMPAT_OSF1)
 #include <compat/sys/signal.h>
@@ -87,7 +86,7 @@
 #include <machine/cpu.h>
 #include <machine/reg.h>
 
-__KERNEL_RCSID(0, "$NetBSD: compat_16_machdep.c,v 1.15 2008/11/21 19:48:56 he Exp $");
+__KERNEL_RCSID(0, "$NetBSD: compat_16_machdep.c,v 1.16 2009/11/21 05:35:40 rmind Exp $");
 
 
 #ifdef DEBUG
@@ -106,6 +105,7 @@
 {
 	struct lwp *l = curlwp;
 	struct proc *p = l->l_proc;
+	struct pcb *pcb = lwp_getpcb(l);
 	struct sigacts *ps = p->p_sigacts;
 	int onstack, sig = ksi->ksi_signo, error;
 	struct sigframe_sigcontext *fp, frame;
@@ -132,10 +132,10 @@
 	frame.sf_sc.sc_regs[R_SP] = alpha_pal_rdusp();
 
  	/* save the floating-point state, if necessary, then copy it. */
-	if (l->l_addr->u_pcb.pcb_fpcpu != NULL)
+	if (pcb->pcb_fpcpu != NULL)
 		fpusave_proc(l, 1);
 	frame.sf_sc.sc_ownedfp = l->l_md.md_flags & MDP_FPUSED;
-	memcpy((struct fpreg *)frame.sf_sc.sc_fpregs, &l->l_addr->u_pcb.pcb_fp,
+	memcpy((struct fpreg *)frame.sf_sc.sc_fpregs, &pcb->pcb_fp,
 	    sizeof(struct fpreg));
 	frame.sf_sc.sc_fp_control = alpha_read_fp_c(l);
 	memset(frame.sf_sc.sc_reserved, 0, sizeof frame.sf_sc.sc_reserved);
@@ -252,6 +252,7 @@
 	} */
 	struct sigcontext *scp, ksc;
 	struct proc *p = l->l_proc;
+	struct pcb *pcb;
 
 	/*
 	 * The trampoline code hands us the context.
@@ -281,11 +282,12 @@
 	alpha_pal_wrusp(ksc.sc_regs[R_SP]);
 
 	/* XXX ksc.sc_ownedfp ? */
-	if (l->l_addr->u_pcb.pcb_fpcpu != NULL)
+	pcb = lwp_getpcb(l);
+	if (pcb->pcb_fpcpu != NULL)
 		fpusave_proc(l, 0);
-	memcpy(&l->l_addr->u_pcb.pcb_fp, (struct fpreg *)ksc.sc_fpregs,
+	memcpy(&pcb->pcb_fp, (struct fpreg *)ksc.sc_fpregs,
 	    sizeof(struct fpreg));
-	l->l_addr->u_pcb.pcb_fp.fpr_cr = ksc.sc_fpcr;
+	pcb->pcb_fp.fpr_cr = ksc.sc_fpcr;
 	l->l_md.md_flags = ksc.sc_fp_control & MDP_FP_C;
 
 	mutex_enter(p->p_lock);

Index: src/sys/arch/alpha/alpha/core_machdep.c
diff -u src/sys/arch/alpha/alpha/core_machdep.c:1.2 src/sys/arch/alpha/alpha/core_machdep.c:1.3
--- src/sys/arch/alpha/alpha/core_machdep.c:1.2	Sat Aug 15 23:44:57 2009
+++ src/sys/arch/alpha/alpha/core_machdep.c	Sat Nov 21 05:35:40 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: core_machdep.c,v 1.2 2009/08/15 23:44:57 matt Exp $ */
+/* $NetBSD: core_machdep.c,v 1.3 2009/11/21 05:35:40 rmind Exp $ */
 
 /*
  * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
@@ -29,7 +29,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: core_machdep.c,v 1.2 2009/08/15 23:44:57 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: core_machdep.c,v 1.3 2009/11/21 05:35:40 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -37,7 +37,6 @@
 #include <sys/malloc.h>
 #include <sys/buf.h>
 #include <sys/vnode.h>
-#include <sys/user.h>
 #include <sys/core.h>
 #include <sys/exec.h>
 
@@ -72,9 +71,10 @@
 	cpustate.md_tf = *l->l_md.md_tf;
 	cpustate.md_tf.tf_regs[FRAME_SP] = alpha_pal_rdusp();	/* XXX */
 	if (l->l_md.md_flags & MDP_FPUSED) {
-		if (l->l_addr->u_pcb.pcb_fpcpu != NULL)
+		struct pcb *pcb = lwp_getpcb(l);
+		if (pcb->pcb_fpcpu != NULL)
 			fpusave_proc(l, 1);
-		cpustate.md_fpstate = l->l_addr->u_pcb.pcb_fp;
+		cpustate.md_fpstate = pcb->pcb_fp;
 	} else
 		memset(&cpustate.md_fpstate, 0, sizeof(cpustate.md_fpstate));
 

Index: src/sys/arch/alpha/alpha/cpu.c
diff -u src/sys/arch/alpha/alpha/cpu.c:1.86 src/sys/arch/alpha/alpha/cpu.c:1.87
--- src/sys/arch/alpha/alpha/cpu.c:1.86	Sun Sep  6 18:06:24 2009
+++ src/sys/arch/alpha/alpha/cpu.c	Sat Nov 21 05:35:40 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.c,v 1.86 2009/09/06 18:06:24 mhitch Exp $ */
+/* $NetBSD: cpu.c,v 1.87 2009/11/21 05:35:40 rmind Exp $ */
 
 /*-
  * Copyright (c) 1998, 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -59,7 +59,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.86 2009/09/06 18:06:24 mhitch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.87 2009/11/21 05:35:40 rmind Exp $");
 
 #include "opt_ddb.h"
 #include "opt_multiprocessor.h"
@@ -69,7 +69,6 @@
 #include <sys/device.h>
 #include <sys/malloc.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/atomic.h>
 #include <sys/cpu.h>
 
@@ -425,7 +424,7 @@
 	struct pcb *pcb;
 	u_long cpumask;
 
-	pcb = &ci->ci_data.cpu_idlelwp->l_addr->u_pcb;
+	pcb = lwp_getpcb(ci->ci_data.cpu_idlelwp);
 	primary_pcsp = LOCATE_PCS(hwrpb, hwrpb->rpb_primary_cpu_id);
 	pcsp = LOCATE_PCS(hwrpb, ci->ci_cpuid);
 	cpumask = (1UL << ci->ci_cpuid);

Index: src/sys/arch/alpha/alpha/db_trace.c
diff -u src/sys/arch/alpha/alpha/db_trace.c:1.25 src/sys/arch/alpha/alpha/db_trace.c:1.26
--- src/sys/arch/alpha/alpha/db_trace.c:1.25	Wed Oct 21 21:11:58 2009
+++ src/sys/arch/alpha/alpha/db_trace.c	Sat Nov 21 05:35:40 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: db_trace.c,v 1.25 2009/10/21 21:11:58 rmind Exp $ */
+/* $NetBSD: db_trace.c,v 1.26 2009/11/21 05:35:40 rmind Exp $ */
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -35,12 +35,11 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.25 2009/10/21 21:11:58 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.26 2009/11/21 05:35:40 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 
 #include <machine/alpha.h>
 #include <machine/db_machdep.h>
@@ -230,7 +229,7 @@
 				KASSERT(l != NULL);
 			}
 			(*pr)("lid %d ", l->l_lid);
-			pcbp = &l->l_addr->u_pcb;
+			pcbp = lwp_getpcb(l);
 			addr = (db_expr_t)pcbp->pcb_hw.apcb_ksp;
 			callpc = pcbp->pcb_context[7];
 			(*pr)("at 0x%lx\n", addr);

Index: src/sys/arch/alpha/alpha/linux_syscall.c
diff -u src/sys/arch/alpha/alpha/linux_syscall.c:1.29 src/sys/arch/alpha/alpha/linux_syscall.c:1.30
--- src/sys/arch/alpha/alpha/linux_syscall.c:1.29	Tue Oct 21 12:16:58 2008
+++ src/sys/arch/alpha/alpha/linux_syscall.c	Sat Nov 21 05:35:40 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_syscall.c,v 1.29 2008/10/21 12:16:58 ad Exp $ */
+/* $NetBSD: linux_syscall.c,v 1.30 2009/11/21 05:35:40 rmind Exp $ */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -89,12 +89,11 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: linux_syscall.c,v 1.29 2008/10/21 12:16:58 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_syscall.c,v 1.30 2009/11/21 05:35:40 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/signal.h>
 #include <sys/syscall.h>
 #include <sys/syscallvar.h>

Index: src/sys/arch/alpha/alpha/linux_trap.c
diff -u src/sys/arch/alpha/alpha/linux_trap.c:1.7 src/sys/arch/alpha/alpha/linux_trap.c:1.8
--- src/sys/arch/alpha/alpha/linux_trap.c:1.7	Mon Apr 28 20:23:10 2008
+++ src/sys/arch/alpha/alpha/linux_trap.c	Sat Nov 21 05:35:40 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_trap.c,v 1.7 2008/04/28 20:23:10 martin Exp $	*/
+/*	$NetBSD: linux_trap.c,v 1.8 2009/11/21 05:35:40 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -30,12 +30,11 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_trap.c,v 1.7 2008/04/28 20:23:10 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_trap.c,v 1.8 2009/11/21 05:35:40 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/acct.h>
 #include <sys/kernel.h>
 #include <sys/signal.h>

Index: src/sys/arch/alpha/alpha/machdep.c
diff -u src/sys/arch/alpha/alpha/machdep.c:1.321 src/sys/arch/alpha/alpha/machdep.c:1.322
--- src/sys/arch/alpha/alpha/machdep.c:1.321	Sun Oct 25 20:39:45 2009
+++ src/sys/arch/alpha/alpha/machdep.c	Sat Nov 21 05:35:40 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.321 2009/10/25 20:39:45 mhitch Exp $ */
+/* $NetBSD: machdep.c,v 1.322 2009/11/21 05:35:40 rmind Exp $ */
 
 /*-
  * Copyright (c) 1998, 1999, 2000 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.321 2009/10/25 20:39:45 mhitch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.322 2009/11/21 05:35:40 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1597,6 +1597,7 @@
 setregs(register struct lwp *l, struct exec_package *pack, u_long stack)
 {
 	struct trapframe *tfp = l->l_md.md_tf;
+	struct pcb *pcb;
 #ifdef DEBUG
 	int i;
 #endif
@@ -1615,7 +1616,8 @@
 #else
 	memset(tfp->tf_regs, 0, FRAME_SIZE * sizeof tfp->tf_regs[0]);
 #endif
-	memset(&l->l_addr->u_pcb.pcb_fp, 0, sizeof l->l_addr->u_pcb.pcb_fp);
+	pcb = lwp_getpcb(l);
+	memset(&pcb->pcb_fp, 0, sizeof(pcb->pcb_fp));
 	alpha_pal_wrusp(stack);
 	tfp->tf_regs[FRAME_PS] = ALPHA_PSL_USERSET;
 	tfp->tf_regs[FRAME_PC] = pack->ep_entry & ~3;
@@ -1629,9 +1631,9 @@
 	l->l_md.md_flags &= ~MDP_FPUSED;
 	if (__predict_true((l->l_md.md_flags & IEEE_INHERIT) == 0)) {
 		l->l_md.md_flags &= ~MDP_FP_C;
-		l->l_addr->u_pcb.pcb_fp.fpr_cr = FPCR_DYN(FP_RN);
+		pcb->pcb_fp.fpr_cr = FPCR_DYN(FP_RN);
 	}
-	if (l->l_addr->u_pcb.pcb_fpcpu != NULL)
+	if (pcb->pcb_fpcpu != NULL)
 		fpusave_proc(l, 0);
 }
 
@@ -1642,6 +1644,7 @@
 fpusave_cpu(struct cpu_info *ci, int save)
 {
 	struct lwp *l;
+	struct pcb *pcb;
 #if defined(MULTIPROCESSOR)
 	int s;
 #endif
@@ -1657,19 +1660,20 @@
 	if (l == NULL)
 		goto out;
 
+	pcb = lwp_getpcb(l);
 	if (save) {
 		alpha_pal_wrfen(1);
-		savefpstate(&l->l_addr->u_pcb.pcb_fp);
+		savefpstate(&pcb->pcb_fp);
 	}
 
 	alpha_pal_wrfen(0);
 
-	FPCPU_LOCK(&l->l_addr->u_pcb);
+	FPCPU_LOCK(pcb);
 
-	l->l_addr->u_pcb.pcb_fpcpu = NULL;
+	pcb->pcb_fpcpu = NULL;
 	ci->ci_fpcurlwp = NULL;
 
-	FPCPU_UNLOCK(&l->l_addr->u_pcb);
+	FPCPU_UNLOCK(pcb);
 
  out:
 #if defined(MULTIPROCESSOR)
@@ -1687,21 +1691,23 @@
 {
 	struct cpu_info *ci = curcpu();
 	struct cpu_info *oci;
+	struct pcb *pcb;
 #if defined(MULTIPROCESSOR)
 	u_long ipi = save ? ALPHA_IPI_SYNCH_FPU : ALPHA_IPI_DISCARD_FPU;
 	int s, spincount;
 #endif
 
-	KDASSERT(l->l_addr != NULL);
+	pcb = lwp_getpcb(l);
+	KDASSERT(pcb != NULL);
 
 #if defined(MULTIPROCESSOR)
 	s = splhigh();		/* block IPIs for the duration */
 #endif
-	FPCPU_LOCK(&l->l_addr->u_pcb);
+	FPCPU_LOCK(pcb);
 
-	oci = l->l_addr->u_pcb.pcb_fpcpu;
+	oci = pcb->pcb_fpcpu;
 	if (oci == NULL) {
-		FPCPU_UNLOCK(&l->l_addr->u_pcb);
+		FPCPU_UNLOCK(pcb);
 #if defined(MULTIPROCESSOR)
 		splx(s);
 #endif
@@ -1711,7 +1717,7 @@
 #if defined(MULTIPROCESSOR)
 	if (oci == ci) {
 		KASSERT(ci->ci_fpcurlwp == l);
-		FPCPU_UNLOCK(&l->l_addr->u_pcb);
+		FPCPU_UNLOCK(pcb);
 		splx(s);
 		fpusave_cpu(ci, save);
 		return;
@@ -1719,10 +1725,10 @@
 
 	KASSERT(oci->ci_fpcurlwp == l);
 	alpha_send_ipi(oci->ci_cpuid, ipi);
-	FPCPU_UNLOCK(&l->l_addr->u_pcb);
+	FPCPU_UNLOCK(pcb);
 
 	spincount = 0;
-	while (l->l_addr->u_pcb.pcb_fpcpu != NULL) {
+	while (pcb->pcb_fpcpu != NULL) {
 		spincount++;
 		delay(1000);	/* XXX */
 		if (spincount > 10000)
@@ -1730,7 +1736,7 @@
 	}
 #else
 	KASSERT(ci->ci_fpcurlwp == l);
-	FPCPU_UNLOCK(&l->l_addr->u_pcb);
+	FPCPU_UNLOCK(pcb);
 	fpusave_cpu(ci, save);
 #endif /* MULTIPROCESSOR */
 }
@@ -1869,6 +1875,7 @@
 cpu_getmcontext(struct lwp *l, mcontext_t *mcp, unsigned int *flags)
 {
 	struct trapframe *frame = l->l_md.md_tf;
+	struct pcb *pcb = lwp_getpcb(l);
 	__greg_t *gr = mcp->__gregs;
 	__greg_t ras_pc;
 
@@ -1882,8 +1889,8 @@
 		gr[_REG_SP] = alpha_pal_rdusp();
 		gr[_REG_UNIQUE] = alpha_pal_rdunique();
 	} else {
-		gr[_REG_SP] = l->l_addr->u_pcb.pcb_hw.apcb_usp;
-		gr[_REG_UNIQUE] = l->l_addr->u_pcb.pcb_hw.apcb_unique;
+		gr[_REG_SP] = pcb->pcb_hw.apcb_usp;
+		gr[_REG_UNIQUE] = pcb->pcb_hw.apcb_unique;
 	}
 	gr[_REG_PC] = frame->tf_regs[FRAME_PC];
 	gr[_REG_PS] = frame->tf_regs[FRAME_PS];
@@ -1897,7 +1904,7 @@
 	/* Save floating point register context, if any, and copy it. */
 	if (l->l_md.md_flags & MDP_FPUSED) {
 		fpusave_proc(l, 1);
-		(void)memcpy(&mcp->__fpregs, &l->l_addr->u_pcb.pcb_fp,
+		(void)memcpy(&mcp->__fpregs, &pcb->pcb_fp,
 		    sizeof (mcp->__fpregs));
 		mcp->__fpregs.__fp_fpcr = alpha_read_fp_c(l);
 		*flags |= _UC_FPU;
@@ -1909,6 +1916,7 @@
 cpu_setmcontext(struct lwp *l, const mcontext_t *mcp, unsigned int flags)
 {
 	struct trapframe *frame = l->l_md.md_tf;
+	struct pcb *pcb = lwp_getpcb(l);
 	const __greg_t *gr = mcp->__gregs;
 
 	/* Restore register context, if any. */
@@ -1922,7 +1930,7 @@
 		if (l == curlwp)
 			alpha_pal_wrusp(gr[_REG_SP]);
 		else
-			l->l_addr->u_pcb.pcb_hw.apcb_usp = gr[_REG_SP];
+			pcb->pcb_hw.apcb_usp = gr[_REG_SP];
 		frame->tf_regs[FRAME_PC] = gr[_REG_PC];
 		frame->tf_regs[FRAME_PS] = gr[_REG_PS];
 	}
@@ -1930,15 +1938,15 @@
 		if (l == curlwp)
 			alpha_pal_wrunique(gr[_REG_UNIQUE]);
 		else
-			l->l_addr->u_pcb.pcb_hw.apcb_unique = gr[_REG_UNIQUE];
+			pcb->pcb_hw.apcb_unique = gr[_REG_UNIQUE];
 	}
 	/* Restore floating point register context, if any. */
 	if (flags & _UC_FPU) {
 		/* If we have an FP register context, get rid of it. */
-		if (l->l_addr->u_pcb.pcb_fpcpu != NULL)
+		if (pcb->pcb_fpcpu != NULL)
 			fpusave_proc(l, 0);
-		(void)memcpy(&l->l_addr->u_pcb.pcb_fp, &mcp->__fpregs,
-		    sizeof (l->l_addr->u_pcb.pcb_fp));
+		(void)memcpy(&pcb->pcb_fp, &mcp->__fpregs,
+		    sizeof (pcb->pcb_fp));
 		l->l_md.md_flags = mcp->__fpregs.__fp_fpcr & MDP_FP_C;
 		l->l_md.md_flags |= MDP_FPUSED;
 	}

Index: src/sys/arch/alpha/alpha/osf1_syscall.c
diff -u src/sys/arch/alpha/alpha/osf1_syscall.c:1.31 src/sys/arch/alpha/alpha/osf1_syscall.c:1.32
--- src/sys/arch/alpha/alpha/osf1_syscall.c:1.31	Tue Oct 21 12:16:58 2008
+++ src/sys/arch/alpha/alpha/osf1_syscall.c	Sat Nov 21 05:35:40 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: osf1_syscall.c,v 1.31 2008/10/21 12:16:58 ad Exp $ */
+/* $NetBSD: osf1_syscall.c,v 1.32 2009/11/21 05:35:40 rmind Exp $ */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -89,12 +89,11 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: osf1_syscall.c,v 1.31 2008/10/21 12:16:58 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: osf1_syscall.c,v 1.32 2009/11/21 05:35:40 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/signal.h>
 #include <sys/syscall.h>
 #include <sys/syscallvar.h>

Index: src/sys/arch/alpha/alpha/pmap.c
diff -u src/sys/arch/alpha/alpha/pmap.c:1.250 src/sys/arch/alpha/alpha/pmap.c:1.251
--- src/sys/arch/alpha/alpha/pmap.c:1.250	Mon Nov  9 04:31:03 2009
+++ src/sys/arch/alpha/alpha/pmap.c	Sat Nov 21 05:35:40 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.250 2009/11/09 04:31:03 mhitch Exp $ */
+/* $NetBSD: pmap.c,v 1.251 2009/11/21 05:35:40 rmind Exp $ */
 
 /*-
  * Copyright (c) 1998, 1999, 2000, 2001, 2007, 2008 The NetBSD Foundation, Inc.
@@ -140,7 +140,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.250 2009/11/09 04:31:03 mhitch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.251 2009/11/21 05:35:40 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -148,7 +148,6 @@
 #include <sys/proc.h>
 #include <sys/malloc.h>
 #include <sys/pool.h>
-#include <sys/user.h>
 #include <sys/buf.h>
 #include <sys/shm.h>
 #include <sys/atomic.h>
@@ -584,12 +583,12 @@
  */
 #define	PMAP_ACTIVATE(pmap, l, cpu_id)					\
 do {									\
+	struct pcb *pcb = lwp_getpcb(l);				\
 	PMAP_ACTIVATE_ASN_SANITY(pmap, cpu_id);				\
 									\
-	(l)->l_addr->u_pcb.pcb_hw.apcb_ptbr =				\
+	pcb->pcb_hw.apcb_ptbr =				\
 	    ALPHA_K0SEG_TO_PHYS((vaddr_t)(pmap)->pm_lev1map) >> PGSHIFT; \
-	(l)->l_addr->u_pcb.pcb_hw.apcb_asn = 				\
-	    (pmap)->pm_asni[(cpu_id)].pma_asn;				\
+	pcb->pcb_hw.apcb_asn = (pmap)->pm_asni[(cpu_id)].pma_asn;	\
 									\
 	if ((l) == curlwp) {						\
 		/*							\
@@ -749,6 +748,7 @@
 	pt_entry_t *lev2map, *lev3map;
 	pt_entry_t pte;
 	vsize_t bufsz;
+	struct pcb *pcb;
 	int i;
 
 #ifdef DEBUG
@@ -949,10 +949,10 @@
 	 * Set up proc0's PCB such that the ptbr points to the right place
 	 * and has the kernel pmap's (really unused) ASN.
 	 */
-	lwp0.l_addr->u_pcb.pcb_hw.apcb_ptbr =
+	pcb = lwp_getpcb(&lwp0);
+	pcb->pcb_hw.apcb_ptbr =
 	    ALPHA_K0SEG_TO_PHYS((vaddr_t)kernel_lev1map) >> PGSHIFT;
-	lwp0.l_addr->u_pcb.pcb_hw.apcb_asn =
-	    pmap_kernel()->pm_asni[cpu_number()].pma_asn;
+	pcb->pcb_hw.apcb_asn = pmap_kernel()->pm_asni[cpu_number()].pma_asn;
 
 	/*
 	 * Mark the kernel pmap `active' on this processor.

Index: src/sys/arch/alpha/alpha/process_machdep.c
diff -u src/sys/arch/alpha/alpha/process_machdep.c:1.24 src/sys/arch/alpha/alpha/process_machdep.c:1.25
--- src/sys/arch/alpha/alpha/process_machdep.c:1.24	Sun Mar  4 05:59:10 2007
+++ src/sys/arch/alpha/alpha/process_machdep.c	Sat Nov 21 05:35:40 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: process_machdep.c,v 1.24 2007/03/04 05:59:10 christos Exp $ */
+/* $NetBSD: process_machdep.c,v 1.25 2009/11/21 05:35:40 rmind Exp $ */
 
 /*
  * Copyright (c) 1994 Christopher G. Demetriou
@@ -54,13 +54,12 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.24 2007/03/04 05:59:10 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.25 2009/11/21 05:35:40 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/vnode.h>
 #include <sys/ptrace.h>
 
@@ -70,26 +69,26 @@
 #include <machine/alpha.h>
 
 #define	lwp_frame(l)	((l)->l_md.md_tf)
-#define	lwp_pcb(l)	(&(l)->l_addr->u_pcb)
-#define	lwp_fpframe(l)	(&(lwp_pcb(l)->pcb_fp))
 
 int
 process_read_regs(struct lwp *l, struct reg *regs)
 {
+	struct pcb *pcb = lwp_getpcb(l);
 
 	frametoreg(lwp_frame(l), regs);
 	regs->r_regs[R_ZERO] = lwp_frame(l)->tf_regs[FRAME_PC];
-	regs->r_regs[R_SP] = lwp_pcb(l)->pcb_hw.apcb_usp;
+	regs->r_regs[R_SP] = pcb->pcb_hw.apcb_usp;
 	return (0);
 }
 
 int
 process_write_regs(struct lwp *l, const struct reg *regs)
 {
+	struct pcb *pcb = lwp_getpcb(l);
 
 	regtoframe(regs, lwp_frame(l));
 	lwp_frame(l)->tf_regs[FRAME_PC] = regs->r_regs[R_ZERO];
-	lwp_pcb(l)->pcb_hw.apcb_usp = regs->r_regs[R_SP];
+	pcb->pcb_hw.apcb_usp = regs->r_regs[R_SP];
 	return (0);
 }
 
@@ -115,21 +114,23 @@
 int
 process_read_fpregs(struct lwp *l, struct fpreg *regs)
 {
+	struct pcb *pcb = lwp_getpcb(l);
 
-	if (l->l_addr->u_pcb.pcb_fpcpu != NULL)
+	if (pcb->pcb_fpcpu != NULL)
 		fpusave_proc(l, 1);
 
-	memcpy(regs, lwp_fpframe(l), sizeof(struct fpreg));
+	memcpy(regs, &pcb->pcb_fp, sizeof(struct fpreg));
 	return (0);
 }
 
 int
 process_write_fpregs(struct lwp *l, const struct fpreg *regs)
 {
+	struct pcb *pcb = lwp_getpcb(l);
 
-	if (l->l_addr->u_pcb.pcb_fpcpu != NULL)
+	if (pcb->pcb_fpcpu != NULL)
 		fpusave_proc(l, 0);
 
-	memcpy(lwp_fpframe(l), regs, sizeof(struct fpreg));
+	memcpy(&pcb->pcb_fp, regs, sizeof(struct fpreg));
 	return (0);
 }

Index: src/sys/arch/alpha/alpha/prom.c
diff -u src/sys/arch/alpha/alpha/prom.c:1.45 src/sys/arch/alpha/alpha/prom.c:1.46
--- src/sys/arch/alpha/alpha/prom.c:1.45	Sat Jan  5 00:31:50 2008
+++ src/sys/arch/alpha/alpha/prom.c	Sat Nov 21 05:35:40 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: prom.c,v 1.45 2008/01/05 00:31:50 ad Exp $ */
+/* $NetBSD: prom.c,v 1.46 2009/11/21 05:35:40 rmind Exp $ */
 
 /* 
  * Copyright (c) 1992, 1994, 1995, 1996 Carnegie Mellon University
@@ -27,7 +27,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: prom.c,v 1.45 2008/01/05 00:31:50 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: prom.c,v 1.46 2009/11/21 05:35:40 rmind Exp $");
 
 #include "opt_multiprocessor.h"
 
@@ -35,7 +35,6 @@
 #include <sys/systm.h>
 #include <sys/simplelock.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/cpu.h>
 
 #include <uvm/uvm_extern.h>
@@ -302,13 +301,14 @@
 void
 hwrpb_primary_init(void)
 {
+	struct pcb *pcb;
 	struct pcs *p;
 
 	p = LOCATE_PCS(hwrpb, hwrpb->rpb_primary_cpu_id);
 
 	/* Initialize the primary's HWPCB and the Virtual Page Table Base. */
-	memcpy(p->pcs_hwpcb, &lwp0.l_addr->u_pcb.pcb_hw,
-	    sizeof lwp0.l_addr->u_pcb.pcb_hw);
+	pcb = lwp_getpcb(&lwp0);
+	memcpy(p->pcs_hwpcb, &pcb->pcb_hw, sizeof(pcb->pcb_hw));
 	hwrpb->rpb_vptb = VPTBASE;
 
 	hwrpb->rpb_checksum = hwrpb_checksum();

Index: src/sys/arch/alpha/alpha/promcons.c
diff -u src/sys/arch/alpha/alpha/promcons.c:1.34 src/sys/arch/alpha/alpha/promcons.c:1.35
--- src/sys/arch/alpha/alpha/promcons.c:1.34	Mon Nov 19 18:51:36 2007
+++ src/sys/arch/alpha/alpha/promcons.c	Sat Nov 21 05:35:40 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: promcons.c,v 1.34 2007/11/19 18:51:36 ad Exp $ */
+/* $NetBSD: promcons.c,v 1.35 2009/11/21 05:35:40 rmind Exp $ */
 
 /*
  * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
@@ -29,7 +29,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: promcons.c,v 1.34 2007/11/19 18:51:36 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: promcons.c,v 1.35 2009/11/21 05:35:40 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -37,7 +37,6 @@
 #include <sys/select.h>
 #include <sys/tty.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/file.h>
 #include <sys/uio.h>
 #include <sys/kernel.h>
Index: src/sys/arch/alpha/alpha/syscall.c
diff -u src/sys/arch/alpha/alpha/syscall.c:1.34 src/sys/arch/alpha/alpha/syscall.c:1.35
--- src/sys/arch/alpha/alpha/syscall.c:1.34	Tue Oct 21 12:16:58 2008
+++ src/sys/arch/alpha/alpha/syscall.c	Sat Nov 21 05:35:41 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: syscall.c,v 1.34 2008/10/21 12:16:58 ad Exp $ */
+/* $NetBSD: syscall.c,v 1.35 2009/11/21 05:35:41 rmind Exp $ */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -89,7 +89,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: syscall.c,v 1.34 2008/10/21 12:16:58 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: syscall.c,v 1.35 2009/11/21 05:35:41 rmind Exp $");
 
 #include "opt_sa.h"
 
@@ -98,7 +98,6 @@
 #include <sys/proc.h>
 #include <sys/sa.h>
 #include <sys/savar.h>
-#include <sys/user.h>
 #include <sys/signal.h>
 #include <sys/syscall.h>
 #include <sys/syscallvar.h>

Index: src/sys/arch/alpha/alpha/trap.c
diff -u src/sys/arch/alpha/alpha/trap.c:1.120 src/sys/arch/alpha/alpha/trap.c:1.121
--- src/sys/arch/alpha/alpha/trap.c:1.120	Wed Oct 15 06:51:17 2008
+++ src/sys/arch/alpha/alpha/trap.c	Sat Nov 21 05:35:41 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: trap.c,v 1.120 2008/10/15 06:51:17 wrstuden Exp $ */
+/* $NetBSD: trap.c,v 1.121 2009/11/21 05:35:41 rmind Exp $ */
 
 /*-
  * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
@@ -93,14 +93,13 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.120 2008/10/15 06:51:17 wrstuden Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.121 2009/11/21 05:35:41 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/proc.h>
 #include <sys/sa.h>
 #include <sys/savar.h>
-#include <sys/user.h>
 #include <sys/syscall.h>
 #include <sys/buf.h>
 #include <sys/kauth.h>
@@ -396,6 +395,7 @@
 			vaddr_t va;
 			struct vmspace *vm = NULL;
 			struct vm_map *map;
+			struct pcb *pcb;
 			int rv;
 
 			switch (a2) {
@@ -442,12 +442,12 @@
 				 * [fs]uswintr, in case another fault happens
 				 * when they are running.
 				 */
-				if (l->l_addr->u_pcb.pcb_onfault ==
-					(unsigned long)fswintrberr &&
-				    l->l_addr->u_pcb.pcb_accessaddr == a0) {
+				pcb = lwp_getpcb(l);
+				if (pcb->pcb_onfault == (u_long)fswintrberr &&
+				    pcb->pcb_accessaddr == a0) {
 					framep->tf_regs[FRAME_PC] =
-					    l->l_addr->u_pcb.pcb_onfault;
-					l->l_addr->u_pcb.pcb_onfault = 0;
+					    pcb->pcb_onfault;
+					pcb->pcb_onfault = 0;
 					goto out;
 				}
 
@@ -468,8 +468,9 @@
 			 * argument space is lazy-allocated.
 			 */
 do_fault:
+			pcb = lwp_getpcb(l);
 			if (user == 0 && (a0 >= VM_MIN_KERNEL_ADDRESS ||
-			    l->l_addr->u_pcb.pcb_onfault == 0))
+			    pcb->pcb_onfault == 0))
 				map = kernel_map;
 			else {
 				vm = l->l_proc->p_vmspace;
@@ -503,12 +504,15 @@
 
 			if (user == 0) {
 				/* Check for copyin/copyout fault */
-				if (l != NULL &&
-				    l->l_addr->u_pcb.pcb_onfault != 0) {
+				if (l == NULL) {
+					goto dopanic;
+				}
+				pcb = lwp_getpcb(l);
+				if (pcb->pcb_onfault != 0) {
 					framep->tf_regs[FRAME_PC] =
-					    l->l_addr->u_pcb.pcb_onfault;
+					    pcb->pcb_onfault;
 					framep->tf_regs[FRAME_V0] = rv;
-					l->l_addr->u_pcb.pcb_onfault = 0;
+					pcb->pcb_onfault = 0;
 					goto out;
 				}
 				goto dopanic;
@@ -581,6 +585,7 @@
 	int s;
 #endif
 	struct cpu_info *ci = curcpu();
+	struct pcb *pcb;
 
 	if (check && ci->ci_fpcurlwp == l) {
 		alpha_pal_wrfen(1);
@@ -594,22 +599,23 @@
 
 	KDASSERT(ci->ci_fpcurlwp == NULL);
 
+	pcb = lwp_getpcb(l);
 #if defined(MULTIPROCESSOR)
-	if (l->l_addr->u_pcb.pcb_fpcpu != NULL)
+	if (pcb->pcb_fpcpu != NULL)
 		fpusave_proc(l, 1);
 #else
-	KDASSERT(l->l_addr->u_pcb.pcb_fpcpu == NULL);
+	KDASSERT(pcb->pcb_fpcpu == NULL);
 #endif
 
 #if defined(MULTIPROCESSOR)
 	s = splhigh();		/* block IPIs */
 #endif
-	FPCPU_LOCK(&l->l_addr->u_pcb);
+	FPCPU_LOCK(pcb);
 
-	l->l_addr->u_pcb.pcb_fpcpu = ci;
+	pcb->pcb_fpcpu = ci;
 	ci->ci_fpcurlwp = l;
 
-	FPCPU_UNLOCK(&l->l_addr->u_pcb);
+	FPCPU_UNLOCK(pcb);
 #if defined(MULTIPROCESSOR)
 	splx(s);
 #endif
@@ -629,7 +635,7 @@
 		atomic_inc_ulong(&fpevent_reuse.ev_count);
 
 	alpha_pal_wrfen(1);
-	restorefpstate(&l->l_addr->u_pcb.pcb_fp);
+	restorefpstate(&pcb->pcb_fp);
 }
 
 /*
@@ -690,10 +696,10 @@
 	    &(l)->l_md.md_tf->tf_regs[reg_to_framereg[(reg)]])
 
 #define	frp(l, reg)							\
-	(&(l)->l_addr->u_pcb.pcb_fp.fpr_regs[(reg)])
+	(&pcb->pcb_fp.fpr_regs[(reg)])
 
-#define	dump_fp_regs()							\
-	if (l->l_addr->u_pcb.pcb_fpcpu != NULL)				\
+#define	dump_fp_regs(pcb)						\
+	if (pcb->pcb_fpcpu != NULL)					\
 		fpusave_proc(l, 1)
 
 #define	unaligned_load(storage, ptrf, mod)				\
@@ -718,13 +724,17 @@
 #define	unaligned_store_integer(storage)				\
 	unaligned_store(storage, irp, )
 
-#define	unaligned_load_floating(storage, mod)				\
-	dump_fp_regs();							\
-	unaligned_load(storage, frp, mod)
-
-#define	unaligned_store_floating(storage, mod)				\
-	dump_fp_regs();							\
-	unaligned_store(storage, frp, mod)
+#define	unaligned_load_floating(storage, mod) do {			\
+	struct pcb *pcb = lwp_getpcb(l);				\
+	dump_fp_regs(pcb);						\
+	unaligned_load(storage, frp, mod)				\
+} while (/*CONSTCOND*/0)
+
+#define	unaligned_store_floating(storage, mod) do {			\
+	struct pcb *pcb = lwp_getpcb(l);				\
+	dump_fp_regs(pcb);						\
+	unaligned_store(storage, frp, mod)				\
+} while (/*CONSTCOND*/0)
 
 static unsigned long
 Sfloat_to_reg(u_int s)

Index: src/sys/arch/alpha/alpha/vm_machdep.c
diff -u src/sys/arch/alpha/alpha/vm_machdep.c:1.101 src/sys/arch/alpha/alpha/vm_machdep.c:1.102
--- src/sys/arch/alpha/alpha/vm_machdep.c:1.101	Wed Oct 21 21:11:58 2009
+++ src/sys/arch/alpha/alpha/vm_machdep.c	Sat Nov 21 05:35:41 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: vm_machdep.c,v 1.101 2009/10/21 21:11:58 rmind Exp $ */
+/* $NetBSD: vm_machdep.c,v 1.102 2009/11/21 05:35:41 rmind Exp $ */
 
 /*
  * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
@@ -29,7 +29,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.101 2009/10/21 21:11:58 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.102 2009/11/21 05:35:41 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -37,7 +37,6 @@
 #include <sys/malloc.h>
 #include <sys/buf.h>
 #include <sys/vnode.h>
-#include <sys/user.h>
 #include <sys/core.h>
 #include <sys/exec.h>
 
@@ -51,8 +50,9 @@
 void
 cpu_lwp_free(struct lwp *l, int proc)
 {
+	struct pcb *pcb = lwp_getpcb(l);
 
-	if (l->l_addr->u_pcb.pcb_fpcpu != NULL)
+	if (pcb->pcb_fpcpu != NULL)
 		fpusave_proc(l, 0);
 }
 
@@ -84,9 +84,12 @@
 cpu_lwp_fork(struct lwp *l1, struct lwp *l2, void *stack, size_t stacksize,
     void (*func)(void *), void *arg)
 {
-	struct user *up = l2->l_addr;
+	struct pcb *pcb1, *pcb2;
 	extern void lwp_trampoline(void);
 
+	pcb1 = lwp_getpcb(l1);
+	pcb2 = lwp_getpcb(l2);
+
 	l2->l_md.md_tf = l1->l_md.md_tf;
 	l2->l_md.md_flags = l1->l_md.md_flags & (MDP_FPUSED | MDP_FP_C);
 	l2->l_md.md_astpending = 0;
@@ -95,25 +98,25 @@
 	 * Cache the physical address of the pcb, so we can
 	 * swap to it easily.
 	 */
-	l2->l_md.md_pcbpaddr = (void *)vtophys((vaddr_t)&up->u_pcb);
+	l2->l_md.md_pcbpaddr = (void *)vtophys((vaddr_t)pcb2);
 
 	/*
 	 * Copy floating point state from the FP chip to the PCB
 	 * if this process has state stored there.
 	 */
-	if (l1->l_addr->u_pcb.pcb_fpcpu != NULL)
+	if (pcb1->pcb_fpcpu != NULL)
 		fpusave_proc(l1, 1);
 
 	/*
 	 * Copy pcb and user stack pointer from proc p1 to p2.
 	 * If specificed, give the child a different stack.
 	 */
-	l2->l_addr->u_pcb = l1->l_addr->u_pcb;
+	*pcb2 = *pcb1;
 	if (stack != NULL)
-		l2->l_addr->u_pcb.pcb_hw.apcb_usp = (u_long)stack + stacksize;
+		pcb2->pcb_hw.apcb_usp = (u_long)stack + stacksize;
 	else
-		l2->l_addr->u_pcb.pcb_hw.apcb_usp = alpha_pal_rdusp();
-	simple_lock_init(&l2->l_addr->u_pcb.pcb_fpcpu_slock);
+		pcb2->pcb_hw.apcb_usp = alpha_pal_rdusp();
+	simple_lock_init(&pcb2->pcb_fpcpu_slock);
 
 	/*
 	 * Arrange for a non-local goto when the new process
@@ -151,39 +154,38 @@
 		l2tf->tf_regs[FRAME_A3] = 0;		/* no error */
 		l2tf->tf_regs[FRAME_A4] = 1;		/* is child */
 
-		up = l2->l_addr;
-		up->u_pcb.pcb_hw.apcb_ksp =
-		    (u_int64_t)l2->l_md.md_tf;
-		up->u_pcb.pcb_context[0] =
-		    (u_int64_t)func;			/* s0: pc */
-		up->u_pcb.pcb_context[1] =
-		    (u_int64_t)exception_return;	/* s1: ra */
-		up->u_pcb.pcb_context[2] =
-		    (u_int64_t)arg;			/* s2: arg */
-		up->u_pcb.pcb_context[3] =
-		    (u_int64_t)l2;			/* s3: lwp */
-		up->u_pcb.pcb_context[7] =
-		    (u_int64_t)lwp_trampoline;		/* ra: assembly magic */
+		pcb2->pcb_hw.apcb_ksp =
+		    (uint64_t)l2->l_md.md_tf;
+		pcb2->pcb_context[0] =
+		    (uint64_t)func;			/* s0: pc */
+		pcb2->pcb_context[1] =
+		    (uint64_t)exception_return;		/* s1: ra */
+		pcb2->pcb_context[2] =
+		    (uint64_t)arg;			/* s2: arg */
+		pcb2->pcb_context[3] =
+		    (uint64_t)l2;			/* s3: lwp */
+		pcb2->pcb_context[7] =
+		    (uint64_t)lwp_trampoline;		/* ra: assembly magic */
 	}
 }
 
 void
 cpu_setfunc(struct lwp *l, void (*func)(void *), void *arg)
 {
-	struct user *up = l->l_addr;
+	struct pcb *pcb = lwp_getpcb(l);
 	extern void setfunc_trampoline(void);
 
-	up->u_pcb.pcb_hw.apcb_ksp =
-	    (u_int64_t)l->l_md.md_tf;
-	up->u_pcb.pcb_context[0] =
-	    (u_int64_t)func;			/* s0: pc */
-	up->u_pcb.pcb_context[1] =
-	    (u_int64_t)exception_return;	/* s1: ra */
-	up->u_pcb.pcb_context[2] =
-	    (u_int64_t)arg;			/* s2: arg */
-	up->u_pcb.pcb_context[7] =
-	    (u_int64_t)setfunc_trampoline;	/* ra: assembly magic */
-}	
+	pcb->pcb_hw.apcb_ksp =
+	    (uint64_t)l->l_md.md_tf;
+	pcb->pcb_context[0] =
+	    (uint64_t)func;			/* s0: pc */
+	pcb->pcb_context[1] =
+	    (uint64_t)exception_return;		/* s1: ra */
+	pcb->pcb_context[2] =
+	    (uint64_t)arg;			/* s2: arg */
+	pcb->pcb_context[7] =
+	    (uint64_t)setfunc_trampoline;	/* ra: assembly magic */
+}
 
 /*
  * Map a user I/O request into kernel virtual address space.

Index: src/sys/arch/alpha/include/proc.h
diff -u src/sys/arch/alpha/include/proc.h:1.17 src/sys/arch/alpha/include/proc.h:1.18
--- src/sys/arch/alpha/include/proc.h:1.17	Fri Feb  9 21:55:01 2007
+++ src/sys/arch/alpha/include/proc.h	Sat Nov 21 05:35:41 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: proc.h,v 1.17 2007/02/09 21:55:01 ad Exp $ */
+/* $NetBSD: proc.h,v 1.18 2009/11/21 05:35:41 rmind Exp $ */
 
 /*
  * Copyright (c) 1994, 1995 Carnegie-Mellon University.
@@ -30,6 +30,7 @@
 #ifndef _ALPHA_PROC_H
 #define _ALPHA_PROC_H
 
+#include <sys/user.h> /* for sizeof(struct user) */
 #include <machine/frame.h>
 
 /*

Index: src/sys/arch/alpha/jensenio/com_jensenio.c
diff -u src/sys/arch/alpha/jensenio/com_jensenio.c:1.10 src/sys/arch/alpha/jensenio/com_jensenio.c:1.11
--- src/sys/arch/alpha/jensenio/com_jensenio.c:1.10	Mon Apr 28 20:23:11 2008
+++ src/sys/arch/alpha/jensenio/com_jensenio.c	Sat Nov 21 05:35:41 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: com_jensenio.c,v 1.10 2008/04/28 20:23:11 martin Exp $ */
+/* $NetBSD: com_jensenio.c,v 1.11 2009/11/21 05:35:41 rmind Exp $ */
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: com_jensenio.c,v 1.10 2008/04/28 20:23:11 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: com_jensenio.c,v 1.11 2009/11/21 05:35:41 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -39,7 +39,6 @@
 #include <sys/select.h>
 #include <sys/tty.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/conf.h>
 #include <sys/file.h>
 #include <sys/uio.h>

Index: src/sys/arch/alpha/jensenio/lpt_jensenio.c
diff -u src/sys/arch/alpha/jensenio/lpt_jensenio.c:1.9 src/sys/arch/alpha/jensenio/lpt_jensenio.c:1.10
--- src/sys/arch/alpha/jensenio/lpt_jensenio.c:1.9	Mon Apr 28 20:23:11 2008
+++ src/sys/arch/alpha/jensenio/lpt_jensenio.c	Sat Nov 21 05:35:41 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: lpt_jensenio.c,v 1.9 2008/04/28 20:23:11 martin Exp $ */
+/* $NetBSD: lpt_jensenio.c,v 1.10 2009/11/21 05:35:41 rmind Exp $ */
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: lpt_jensenio.c,v 1.9 2008/04/28 20:23:11 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lpt_jensenio.c,v 1.10 2009/11/21 05:35:41 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -39,7 +39,6 @@
 #include <sys/select.h>
 #include <sys/tty.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/conf.h>
 #include <sys/file.h>
 #include <sys/uio.h>

Index: src/sys/arch/alpha/sableio/com_sableio.c
diff -u src/sys/arch/alpha/sableio/com_sableio.c:1.8 src/sys/arch/alpha/sableio/com_sableio.c:1.9
--- src/sys/arch/alpha/sableio/com_sableio.c:1.8	Mon Apr 28 20:23:12 2008
+++ src/sys/arch/alpha/sableio/com_sableio.c	Sat Nov 21 05:35:41 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: com_sableio.c,v 1.8 2008/04/28 20:23:12 martin Exp $ */
+/* $NetBSD: com_sableio.c,v 1.9 2009/11/21 05:35:41 rmind Exp $ */
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: com_sableio.c,v 1.8 2008/04/28 20:23:12 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: com_sableio.c,v 1.9 2009/11/21 05:35:41 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -39,7 +39,6 @@
 #include <sys/select.h>
 #include <sys/tty.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/conf.h>
 #include <sys/file.h>
 #include <sys/uio.h>

Index: src/sys/arch/alpha/sableio/lpt_sableio.c
diff -u src/sys/arch/alpha/sableio/lpt_sableio.c:1.6 src/sys/arch/alpha/sableio/lpt_sableio.c:1.7
--- src/sys/arch/alpha/sableio/lpt_sableio.c:1.6	Mon Apr 28 20:23:12 2008
+++ src/sys/arch/alpha/sableio/lpt_sableio.c	Sat Nov 21 05:35:41 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: lpt_sableio.c,v 1.6 2008/04/28 20:23:12 martin Exp $ */
+/* $NetBSD: lpt_sableio.c,v 1.7 2009/11/21 05:35:41 rmind Exp $ */
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: lpt_sableio.c,v 1.6 2008/04/28 20:23:12 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lpt_sableio.c,v 1.7 2009/11/21 05:35:41 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -39,7 +39,6 @@
 #include <sys/select.h>
 #include <sys/tty.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/conf.h>
 #include <sys/file.h>
 #include <sys/uio.h>

Reply via email to