Module Name: src
Committed By: nisimura
Date: Wed Dec 29 13:43:58 UTC 2010
Modified Files:
src/sys/arch/sh3/sh3: exception.c vm_machdep.c
Log Message:
use lwp_getpcb() to hide the detail about how struct pcb is populated.
To generate a diff of this commit:
cvs rdiff -u -r1.56 -r1.57 src/sys/arch/sh3/sh3/exception.c
cvs rdiff -u -r1.67 -r1.68 src/sys/arch/sh3/sh3/vm_machdep.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/sh3/sh3/exception.c
diff -u src/sys/arch/sh3/sh3/exception.c:1.56 src/sys/arch/sh3/sh3/exception.c:1.57
--- src/sys/arch/sh3/sh3/exception.c:1.56 Mon Dec 20 00:25:43 2010
+++ src/sys/arch/sh3/sh3/exception.c Wed Dec 29 13:43:58 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: exception.c,v 1.56 2010/12/20 00:25:43 matt Exp $ */
+/* $NetBSD: exception.c,v 1.57 2010/12/29 13:43:58 nisimura Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc. All rights reserved.
@@ -79,7 +79,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exception.c,v 1.56 2010/12/20 00:25:43 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exception.c,v 1.57 2010/12/29 13:43:58 nisimura Exp $");
#include "opt_ddb.h"
#include "opt_kgdb.h"
@@ -139,6 +139,7 @@
{
int expevt = tf->tf_expevt;
bool usermode = !KERNELMODE(tf->tf_ssr);
+ struct pcb *pcb;
ksiginfo_t ksi;
uint32_t trapcode;
#ifdef DDB
@@ -191,8 +192,9 @@
case EXPEVT_ADDR_ERR_LD: /* FALLTHROUGH */
case EXPEVT_ADDR_ERR_ST:
- KDASSERT(l->l_md.md_pcb->pcb_onfault != NULL);
- tf->tf_spc = (int)l->l_md.md_pcb->pcb_onfault;
+ pcb = lwp_getpcb(l);
+ KDASSERT(pcb->pcb_onfault != NULL);
+ tf->tf_spc = (int)pcb->pcb_onfault;
tf->tf_r0 = EFAULT;
if (tf->tf_spc == 0)
goto do_panic;
Index: src/sys/arch/sh3/sh3/vm_machdep.c
diff -u src/sys/arch/sh3/sh3/vm_machdep.c:1.67 src/sys/arch/sh3/sh3/vm_machdep.c:1.68
--- src/sys/arch/sh3/sh3/vm_machdep.c:1.67 Fri Apr 23 19:18:10 2010
+++ src/sys/arch/sh3/sh3/vm_machdep.c Wed Dec 29 13:43:58 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: vm_machdep.c,v 1.67 2010/04/23 19:18:10 rmind Exp $ */
+/* $NetBSD: vm_machdep.c,v 1.68 2010/12/29 13:43:58 nisimura Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc. All rights reserved.
@@ -81,7 +81,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.67 2010/04/23 19:18:10 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.68 2010/12/29 13:43:58 nisimura Exp $");
#include "opt_kstack_debug.h"
@@ -134,6 +134,7 @@
cpu_lwp_fork(struct lwp *l1, struct lwp *l2, void *stack,
size_t stacksize, void (*func)(void *), void *arg)
{
+ struct pcb *pcb;
struct switchframe *sf;
#if 0 /* FIXME: probably wrong for yamt-idlelwp */
@@ -151,7 +152,8 @@
l2->l_md.md_regs->tf_r15 = (u_int)stack + stacksize;
/* When l2 is switched to, jump to the trampoline */
- sf = &l2->l_md.md_pcb->pcb_sf;
+ pcb = lwp_getpcb(l2);
+ sf = &pcb->pcb_sf;
sf->sf_pr = (int)lwp_trampoline;
sf->sf_r10 = (int)l2; /* "new" lwp for lwp_startup() */
sf->sf_r11 = (int)arg; /* hook function/argument */
@@ -166,14 +168,14 @@
void
cpu_setfunc(struct lwp *l, void (*func)(void *), void *arg)
{
- struct switchframe *sf;
+ struct pcb *pcb = lwp_getpcb(l);
+ struct switchframe *sf = &pcb->pcb_sf;
sh3_setup_uarea(l);
l->l_md.md_regs->tf_ssr = PSL_USERSET;
/* When lwp is switched to, jump to the trampoline */
- sf = &l->l_md.md_pcb->pcb_sf;
sf->sf_pr = (int)lwp_setfunc_trampoline;
sf->sf_r11 = (int)arg; /* hook function/argument */
sf->sf_r12 = (int)func;