Module Name: src
Committed By: matt
Date: Fri Aug 21 17:43:14 UTC 2009
Modified Files:
src/sys/arch/mips/mips [matt-nb5-mips64]: vm_machdep.c
Log Message:
Cast MIPS_K* to vaddr_t
Fix comments in cpu_lwp_fork
Stop casting l_md.md_regs
To generate a diff of this commit:
cvs rdiff -u -r1.121.6.1 -r1.121.6.1.2.1 src/sys/arch/mips/mips/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/mips/mips/vm_machdep.c
diff -u src/sys/arch/mips/mips/vm_machdep.c:1.121.6.1 src/sys/arch/mips/mips/vm_machdep.c:1.121.6.1.2.1
--- src/sys/arch/mips/mips/vm_machdep.c:1.121.6.1 Tue Jun 9 17:48:20 2009
+++ src/sys/arch/mips/mips/vm_machdep.c Fri Aug 21 17:43:14 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: vm_machdep.c,v 1.121.6.1 2009/06/09 17:48:20 snj Exp $ */
+/* $NetBSD: vm_machdep.c,v 1.121.6.1.2.1 2009/08/21 17:43:14 matt Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -80,7 +80,7 @@
#include "opt_coredump.h"
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.121.6.1 2009/06/09 17:48:20 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.121.6.1.2.1 2009/08/21 17:43:14 matt Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -106,16 +106,16 @@
paddr_t kvtophys(vaddr_t); /* XXX */
/*
- * Finish a fork operation, with process p2 nearly set up.
+ * Finish a fork operation, with lwp l2 nearly set up.
* Copy and update the pcb and trap frame, making the child ready to run.
*
* Rig the child's kernel stack so that it will start out in
- * lwp_trampoline() and call child_return() with p2 as an
+ * lwp_trampoline() and call child_return() with l2 as an
* argument. This causes the newly-created child process to go
* directly to user level with an apparent return value of 0 from
* fork(), while the parent process returns normally.
*
- * p1 is the process being forked; if p1 == &proc0, we are creating
+ * l1 is the process being forked; if l1 == &lwp0, we are creating
* a kernel thread, and the return path and argument are specified with
* `func' and `arg'.
*
@@ -147,13 +147,13 @@
savefpregs(l1);
/*
- * Copy pcb from proc p1 to p2.
- * Copy p1 trapframe atop on p2 stack space, so return to user mode
+ * Copy pcb from lwp l1 to l2.
+ * Copy l1 trapframe atop on l2 stack space, so return to user mode
* will be to right address, with correct registers.
*/
memcpy(&l2->l_addr->u_pcb, &l1->l_addr->u_pcb, sizeof(struct pcb));
f = (struct frame *)((char *)l2->l_addr + USPACE) - 1;
- memcpy(f, l1->l_md.md_regs, sizeof(struct frame));
+ *f = *l1->l_md.md_regs;
/*
* If specified, give the child a different stack.
@@ -161,7 +161,7 @@
if (stack != NULL)
f->f_regs[_R_SP] = (uintptr_t)stack + stacksize;
- l2->l_md.md_regs = (void *)f;
+ l2->l_md.md_regs = f;
l2->l_md.md_flags = l1->l_md.md_flags & MDP_FPUSED;
x = (MIPS_HAS_R4K_MMU) ?
(MIPS3_PG_G | MIPS3_PG_RO | MIPS3_PG_WIRED) :
@@ -269,7 +269,7 @@
if ((l->l_md.md_flags & MDP_FPUSED) && l == fpcurlwp)
savefpregs(l);
- cpustate.frame = *(struct frame *)l->l_md.md_regs;
+ cpustate.frame = *l->l_md.md_regs;
cpustate.fpregs = l->l_addr->u_pcb.pcb_fpregs;
CORE_SETMAGIC(cseg, CORESEGMAGIC, MID_MACHINE, CORE_CPU);
@@ -361,24 +361,34 @@
goto overrun;
pte = kvtopte(kva);
- if ((size_t) (pte - Sysmap) > Sysmapsize) {
+ if ((size_t) (pte - Sysmap) >= Sysmapsize) {
printf("oops: Sysmap overrun, max %d index %zd\n",
Sysmapsize, pte - Sysmap);
}
if (!mips_pg_v(pte->pt_entry)) {
- printf("kvtophys: pte not valid for %lx\n", kva);
+ printf("kvtophys: pte not valid for %#"PRIxVADDR"\n",
+ kva);
}
phys = mips_tlbpfn_to_paddr(pte->pt_entry) | (kva & PGOFSET);
return phys;
}
- if (kva >= MIPS_KSEG1_START)
+ if (kva >= (vaddr_t)MIPS_KSEG1_START)
return MIPS_KSEG1_TO_PHYS(kva);
- if (kva >= MIPS_KSEG0_START)
+ if (kva >= (vaddr_t)MIPS_KSEG0_START)
return MIPS_KSEG0_TO_PHYS(kva);
+#ifdef _LP64
+#if 0
+ if (kva >= (vaddr_t)MIPS_XKSEG_START)
+ return MIPS_XKPHYS_TO_PHYS(kva);
+#endif
+ if (kva >= (vaddr_t)MIPS_XKPHYS_START
+ && kva < (vaddr_t)MIPS_XKSEG_START)
+ return MIPS_XKPHYS_TO_PHYS(kva);
+#endif
overrun:
- printf("Virtual address %lx: cannot map to physical\n", kva);
+ printf("Virtual address %#"PRIxVADDR": cannot map to physical\n", kva);
#ifdef DDB
Debugger();
return 0; /* XXX */