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>