Module Name: src Committed By: matt Date: Thu Dec 31 00:54:10 UTC 2009
Modified Files: src/sys/arch/algor/algor [matt-nb5-mips64]: interrupt.c machdep.c src/sys/arch/algor/include [matt-nb5-mips64]: vmparam.h src/sys/arch/arc/include [matt-nb5-mips64]: vmparam.h src/sys/arch/evbmips/adm5120 [matt-nb5-mips64]: machdep.c src/sys/arch/evbmips/alchemy [matt-nb5-mips64]: machdep.c src/sys/arch/evbmips/atheros [matt-nb5-mips64]: machdep.c src/sys/arch/evbmips/include [matt-nb5-mips64]: vmparam.h src/sys/arch/evbmips/malta [matt-nb5-mips64]: machdep.c src/sys/arch/evbmips/rmixl [matt-nb5-mips64]: machdep.c src/sys/arch/mips/include [matt-nb5-mips64]: pmap.h src/sys/arch/mips/mips [matt-nb5-mips64]: mips_machdep.c src/sys/arch/pmax/include [matt-nb5-mips64]: vmparam.h src/sys/arch/pmax/pmax [matt-nb5-mips64]: machdep.c src/sys/arch/sbmips/sbmips [matt-nb5-mips64]: machdep.c Log Message: Use mips_page_physload and mips_init_lwp0_uarea. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.13.18.1 src/sys/arch/algor/algor/interrupt.c cvs rdiff -u -r1.38.10.3 -r1.38.10.4 src/sys/arch/algor/algor/machdep.c cvs rdiff -u -r1.1 -r1.1.148.1 src/sys/arch/algor/include/vmparam.h cvs rdiff -u -r1.9 -r1.9.96.1 src/sys/arch/arc/include/vmparam.h cvs rdiff -u -r1.6.10.1 -r1.6.10.2 src/sys/arch/evbmips/adm5120/machdep.c cvs rdiff -u -r1.37.10.1 -r1.37.10.2 src/sys/arch/evbmips/alchemy/machdep.c cvs rdiff -u -r1.13.10.1 -r1.13.10.2 src/sys/arch/evbmips/atheros/machdep.c cvs rdiff -u -r1.1.142.2 -r1.1.142.3 src/sys/arch/evbmips/include/vmparam.h cvs rdiff -u -r1.28.10.2 -r1.28.10.3 src/sys/arch/evbmips/malta/machdep.c cvs rdiff -u -r1.1.2.10 -r1.1.2.11 src/sys/arch/evbmips/rmixl/machdep.c cvs rdiff -u -r1.54.26.2 -r1.54.26.3 src/sys/arch/mips/include/pmap.h cvs rdiff -u -r1.205.4.1.2.1.2.18 -r1.205.4.1.2.1.2.19 \ src/sys/arch/mips/mips/mips_machdep.c cvs rdiff -u -r1.14 -r1.14.148.1 src/sys/arch/pmax/include/vmparam.h cvs rdiff -u -r1.223.8.1.2.3 -r1.223.8.1.2.4 src/sys/arch/pmax/pmax/machdep.c cvs rdiff -u -r1.38.10.4 -r1.38.10.5 src/sys/arch/sbmips/sbmips/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/algor/algor/interrupt.c diff -u src/sys/arch/algor/algor/interrupt.c:1.13 src/sys/arch/algor/algor/interrupt.c:1.13.18.1 --- src/sys/arch/algor/algor/interrupt.c:1.13 Mon Apr 28 20:23:10 2008 +++ src/sys/arch/algor/algor/interrupt.c Thu Dec 31 00:54:08 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: interrupt.c,v 1.13 2008/04/28 20:23:10 martin Exp $ */ +/* $NetBSD: interrupt.c,v 1.13.18.1 2009/12/31 00:54:08 matt Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.13 2008/04/28 20:23:10 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.13.18.1 2009/12/31 00:54:08 matt Exp $"); #include "opt_algor_p4032.h" #include "opt_algor_p5064.h" @@ -109,7 +109,7 @@ } void -cpu_intr(u_int32_t status, u_int32_t cause, u_int32_t pc, u_int32_t ipending) +cpu_intr(u_int32_t status, u_int32_t cause, vaddr_t pc, u_int32_t ipending) { struct clockframe cf; struct cpu_info *ci; Index: src/sys/arch/algor/algor/machdep.c diff -u src/sys/arch/algor/algor/machdep.c:1.38.10.3 src/sys/arch/algor/algor/machdep.c:1.38.10.4 --- src/sys/arch/algor/algor/machdep.c:1.38.10.3 Wed Sep 16 03:44:59 2009 +++ src/sys/arch/algor/algor/machdep.c Thu Dec 31 00:54:08 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.38.10.3 2009/09/16 03:44:59 matt Exp $ */ +/* $NetBSD: machdep.c,v 1.38.10.4 2009/12/31 00:54:08 matt Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -106,7 +106,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.38.10.3 2009/09/16 03:44:59 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.38.10.4 2009/12/31 00:54:08 matt Exp $"); #include "opt_algor_p4032.h" #include "opt_algor_p5064.h" @@ -209,11 +209,9 @@ { extern char kernel_text[], edata[], end[]; vaddr_t kernstart, kernend; - paddr_t kernstartpfn, kernendpfn, pfn0, pfn1; vsize_t size; const char *cp; char *cp0; - void *v; size_t i; /* Disable interrupts. */ @@ -235,9 +233,6 @@ led_display('p', 'g', 's', 'z'); uvm_setpagesize(); - kernstartpfn = atop(MIPS_KSEG0_TO_PHYS(kernstart)); - kernendpfn = atop(MIPS_KSEG0_TO_PHYS(kernend)); - /* * Initialize bus space tags and bring up the console. */ @@ -505,57 +500,19 @@ led_display('v', 'm', 'p', 'g'); for (i = 0; i < mem_cluster_cnt; i++) { physmem += atop(mem_clusters[i].size); - pfn0 = atop(mem_clusters[i].start); - pfn1 = pfn0 + atop(mem_clusters[i].size); - if (pfn0 <= kernstartpfn && kernendpfn <= pfn1) { - /* - * Must compute the location of the kernel - * within the segment. - */ -#if 1 - printf("Cluster %zu contains kernel\n", i); -#endif - if (pfn0 < kernstartpfn) { - /* - * There is a chunk before the kernel. - */ -#if 1 - printf("Loading chunk before kernel: " - "%#"PRIxPADDR" / %#"PRIxPADDR"\n", - pfn0, kernstartpfn); -#endif - uvm_page_physload(pfn0, kernstartpfn, - pfn0, kernstartpfn, VM_FREELIST_DEFAULT); - } - if (kernendpfn < pfn1) { - /* - * There is a chunk after the kernel. - */ -#if 1 - printf("Loading chunk after kernel: " - "%#"PRIxPADDR" / %#"PRIxPADDR"\n", - kernendpfn, pfn1); -#endif - uvm_page_physload(kernendpfn, pfn1, - kernendpfn, pfn1, VM_FREELIST_DEFAULT); - } - } else { - /* - * Just load this cluster as one chunk. - */ -#if 1 - printf("Loading cluster %zu: %#"PRIxPADDR - " / %#"PRIxPADDR"\n", i, pfn0, pfn1); -#endif - uvm_page_physload(pfn0, pfn1, pfn0, pfn1, - VM_FREELIST_DEFAULT); - } } - if (physmem == 0) panic("can't happen: system seems to have no memory!"); maxmem = physmem; + static const struct mips_vmfreelist isadma = { + .fl_start = 8*1024*1024, + .fl_end = 16*1024*1024, + .fl_freelist = VM_FREELIST_ISADMA, + }; + mips_page_physload(kernstart, kernend, + mem_clusters, mem_cluster_cnt, &isadma, 1); + /* * Initialize message buffer (at end of core). */ @@ -571,17 +528,7 @@ * Init mapping for u page(s) for lwp0. */ led_display('u', 's', 'p', 'c'); - v = (void *) uvm_pageboot_alloc(USPACE); - lwp0.l_addr = proc0paddr = (struct user *) v; - lwp0.l_md.md_regs = (struct frame *)((char*)v + USPACE) - 1; -#ifdef _LP64 - lwp0.l_md.md_regs->f_regs[_R_SR] = MIPS_SR_KX; -#endif - proc0paddr->u_pcb.pcb_context.val[_L_SR] = -#ifdef _LP64 - MIPS_SR_KX | -#endif - MIPS_INT_MASK | MIPS_SR_INT_IE; /* SR */ + mips_init_lwp0_uarea(); /* * Initialize debuggers, and break into them, if appropriate. Index: src/sys/arch/algor/include/vmparam.h diff -u src/sys/arch/algor/include/vmparam.h:1.1 src/sys/arch/algor/include/vmparam.h:1.1.148.1 --- src/sys/arch/algor/include/vmparam.h:1.1 Mon May 28 16:22:20 2001 +++ src/sys/arch/algor/include/vmparam.h Thu Dec 31 00:54:08 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: vmparam.h,v 1.1 2001/05/28 16:22:20 thorpej Exp $ */ +/* $NetBSD: vmparam.h,v 1.1.148.1 2009/12/31 00:54:08 matt Exp $ */ #ifndef _ALGOR_VMPARAM_H_ #define _ALGOR_VMPARAM_H_ @@ -10,10 +10,8 @@ * DMA (it's limited to 8MB on the Algorithmics P-5064, for example, * starting at 8MB). */ -#define VM_NFREELIST 2 -#define VM_FREELIST_DEFAULT 0 +#define VM_PHYSSEG_MAX 2 #define VM_FREELIST_ISADMA 1 -#define VM_PHYSSEG_MAX 2 #endif /* !_ALGOR_VMPARAM_H_ */ Index: src/sys/arch/arc/include/vmparam.h diff -u src/sys/arch/arc/include/vmparam.h:1.9 src/sys/arch/arc/include/vmparam.h:1.9.96.1 --- src/sys/arch/arc/include/vmparam.h:1.9 Sun Dec 11 12:16:39 2005 +++ src/sys/arch/arc/include/vmparam.h Thu Dec 31 00:54:08 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: vmparam.h,v 1.9 2005/12/11 12:16:39 christos Exp $ */ +/* $NetBSD: vmparam.h,v 1.9.96.1 2009/12/31 00:54:08 matt Exp $ */ /* $OpenBSD: vmparam.h,v 1.3 1997/04/19 17:19:59 pefo Exp $ */ /* NetBSD: vmparam.h,v 1.5 1994/10/26 21:10:10 cgd Exp */ @@ -14,11 +14,9 @@ /* * Maximum number of contigous physical memory segment. */ +#undef VM_PHYSSEG_MAX #define VM_PHYSSEG_MAX 16 -#define VM_NFREELIST 1 -#define VM_FREELIST_DEFAULT 0 - #ifndef KSEG2IOBUFSIZE #define KSEG2IOBUFSIZE kseg2iobufsize /* reserve PTEs for KSEG2 I/O space */ Index: src/sys/arch/evbmips/adm5120/machdep.c diff -u src/sys/arch/evbmips/adm5120/machdep.c:1.6.10.1 src/sys/arch/evbmips/adm5120/machdep.c:1.6.10.2 --- src/sys/arch/evbmips/adm5120/machdep.c:1.6.10.1 Mon Sep 7 23:20:28 2009 +++ src/sys/arch/evbmips/adm5120/machdep.c Thu Dec 31 00:54:08 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.6.10.1 2009/09/07 23:20:28 matt Exp $ */ +/* $NetBSD: machdep.c,v 1.6.10.2 2009/12/31 00:54:08 matt Exp $ */ /*- * Copyright (c) 2007 Ruslan Ermilov and Vsevolod Lobko. @@ -107,7 +107,7 @@ */ #include <sys/cdefs.h> /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.6.10.1 2009/09/07 23:20:28 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.6.10.2 2009/12/31 00:54:08 matt Exp $"); #include "opt_ddb.h" #include "opt_kgdb.h" @@ -162,13 +162,15 @@ struct user *proc0paddr; /* Our exported CPU info; we can have only one. */ -struct cpu_info cpu_info_store; +struct cpu_info cpu_info_store = { + .ci_curlwp = &lwp0, +}; /* Maps for VM objects. */ struct vm_map *mb_map = NULL; struct vm_map *phys_map = NULL; -int physmem; /* # pages of physical memory */ +int physmem; /* # pages of physical memory */ int maxmem; /* max memory per process */ int mem_cluster_cnt; @@ -313,8 +315,6 @@ struct adm5120_config *admc = &adm5120_configuration; uint32_t memsize; vaddr_t kernend; - u_long first, last; - vaddr_t v; extern char edata[], end[]; /* XXX */ @@ -419,10 +419,8 @@ /* * Load the rest of the available pages into the VM system. */ - first = round_page(MIPS_KSEG0_TO_PHYS(kernend)); - last = mem_clusters[0].start + mem_clusters[0].size; - uvm_page_physload(atop(first), atop(last), atop(first), atop(last), - VM_FREELIST_DEFAULT); + uvm_page_physload(MIPS_KSEG0_START, kernend, + mem_clusters, mem_cluster_cnt, NULL, 0); /* * Initialize message buffer (at end of core). @@ -437,17 +435,7 @@ /* * Init mapping for u page(s) for proc0. */ - v = uvm_pageboot_alloc(USPACE); - lwp0.l_addr = proc0paddr = (struct user *)v; - lwp0.l_md.md_regs = (struct frame *)(v + USPACE) - 1; -#ifdef _LP64 - lwp0.l_md.md_regs->f_regs[_R_SR] = MIPS_SR_KX; -#endif - lwp0.l_addr->u_pcb.pcb_context.val[_L_SR] = -#ifdef _LP64 - MIPS_SR_KX | -#endif - MIPS_INT_MASK | MIPS_SR_INT_IE; /* SR */ + mips_init_lwp0_uarea(); /* * Initialize debuggers, and break into them, if appropriate. Index: src/sys/arch/evbmips/alchemy/machdep.c diff -u src/sys/arch/evbmips/alchemy/machdep.c:1.37.10.1 src/sys/arch/evbmips/alchemy/machdep.c:1.37.10.2 --- src/sys/arch/evbmips/alchemy/machdep.c:1.37.10.1 Mon Sep 7 23:20:28 2009 +++ src/sys/arch/evbmips/alchemy/machdep.c Thu Dec 31 00:54:09 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.37.10.1 2009/09/07 23:20:28 matt Exp $ */ +/* $NetBSD: machdep.c,v 1.37.10.2 2009/12/31 00:54:09 matt Exp $ */ /*- * Copyright (c) 2006 Itronix Inc. @@ -107,7 +107,7 @@ */ #include <sys/cdefs.h> /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.37.10.1 2009/09/07 23:20:28 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.37.10.2 2009/12/31 00:54:09 matt Exp $"); #include "opt_ddb.h" #include "opt_kgdb.h" @@ -161,16 +161,11 @@ #include "ohci.h" -struct user *proc0paddr; - -/* Our exported CPU info; we can have only one. */ -struct cpu_info cpu_info_store; - /* Maps for VM objects. */ struct vm_map *mb_map = NULL; struct vm_map *phys_map = NULL; -int physmem; /* # pages of physical memory */ +int physmem; /* # pages of physical memory */ int maxmem; /* max memory per process */ int mem_cluster_cnt; @@ -187,8 +182,6 @@ bus_space_handle_t sh; void *kernend; const char *cp; - u_long first, last; - void *v; int freqok, howto, i; const struct alchemy_board *board; @@ -345,10 +338,8 @@ /* * Load the rest of the available pages into the VM system. */ - first = round_page(MIPS_KSEG0_TO_PHYS(kernend)); - last = mem_clusters[0].start + mem_clusters[0].size; - uvm_page_physload(atop(first), atop(last), atop(first), atop(last), - VM_FREELIST_DEFAULT); + mips_add_physload(MIPS_KSEG0_START, kernend, + mem_clusters, mem_cluster_cnt, NULL, 0); /* * Initialize message buffer (at end of core). @@ -363,17 +354,7 @@ /* * Init mapping for u page(s) for proc0. */ - v = (void *) uvm_pageboot_alloc(USPACE); - lwp0.l_addr = proc0paddr = (struct user *)v; - lwp0.l_md.md_regs = (struct frame *)((char *)v + USPACE) - 1; -#ifdef _LP64 - lwp0.l_md.md_regs->f_regs[_R_SR] = MIPS_SR_KX; -#endif - lwp0.l_addr->u_pcb.pcb_context.val[_L_SR] = -#ifdef _LP64 - MIPS_SR_KX | -#endif - MIPS_INT_MASK | MIPS_SR_INT_IE; /* SR */ + mips_init_lwp0_uarea(); /* * Initialize debuggers, and break into them, if appropriate. Index: src/sys/arch/evbmips/atheros/machdep.c diff -u src/sys/arch/evbmips/atheros/machdep.c:1.13.10.1 src/sys/arch/evbmips/atheros/machdep.c:1.13.10.2 --- src/sys/arch/evbmips/atheros/machdep.c:1.13.10.1 Mon Sep 7 23:20:29 2009 +++ src/sys/arch/evbmips/atheros/machdep.c Thu Dec 31 00:54:09 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.13.10.1 2009/09/07 23:20:29 matt Exp $ */ +/* $NetBSD: machdep.c,v 1.13.10.2 2009/12/31 00:54:09 matt Exp $ */ /* * Copyright (c) 2006 Urbana-Champaign Independent Media Center. @@ -147,7 +147,7 @@ */ #include <sys/cdefs.h> /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.13.10.1 2009/09/07 23:20:29 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.13.10.2 2009/12/31 00:54:09 matt Exp $"); #include "opt_ddb.h" #include "opt_kgdb.h" @@ -182,16 +182,11 @@ #include <mips/atheros/include/ar531xvar.h> #include <mips/atheros/include/arbusvar.h> -struct user *proc0paddr; - -/* Our exported CPU info; we can have only one. */ -struct cpu_info cpu_info_store; - /* Maps for VM objects. */ struct vm_map *mb_map = NULL; struct vm_map *phys_map = NULL; -int physmem; /* # pages of physical memory */ +int physmem; /* # pages of physical memory */ int maxmem; /* max memory per process */ int mem_cluster_cnt; @@ -289,12 +284,10 @@ mem_cluster_cnt++; /* - * Load the rest of the available pages into the VM system. + * Load the available pages into the VM system. */ - first = round_page(MIPS_KSEG0_TO_PHYS(kernend)); - last = mem_clusters[0].start + mem_clusters[0].size; - uvm_page_physload(atop(first), atop(last), atop(first), atop(last), - VM_FREELIST_DEFAULT); + mips_add_physload(MIPS_KSEG0_START, kernend, + mem_clusters, mem_cluster_cnt, NULL, 0); /* * Initialize message buffer (at end of core). @@ -309,17 +302,7 @@ /* * Init mapping for u page(s) for proc0. */ - v = (void *) uvm_pageboot_alloc(USPACE); - lwp0.l_addr = proc0paddr = (struct user *)v; - lwp0.l_md.md_regs = (struct frame *)((char *)v + USPACE) - 1; -#ifdef _LP64 - lwp0.l_md.md_regs->f_regs[_R_SR] = MIPS_SR_KX; -#endif - lwp0.l_addr->u_pcb.pcb_context.val[_L_SR] = -#ifdef _LP64 - MIPS_SR_KX | -#endif - MIPS_INT_MASK | MIPS_SR_INT_IE; /* SR */ + mips_init_lwp0_uarea(); /* * Initialize busses. @@ -337,9 +320,9 @@ * PROM. VxWorks bootloader seems to leave one set. */ __asm volatile ( - "mtc0 $0, $" ___STRING(MIPS_COP_0_WATCH_LO) " \n\t" + "mtc0 $0, $%0\n\t" "nop\n\t" - "nop\n\t"); + "nop\n\t" :: "n"(MIPS_COP_0_WATCH_LO)); /* * Initialize debuggers, and break into them, if appropriate. Index: src/sys/arch/evbmips/include/vmparam.h diff -u src/sys/arch/evbmips/include/vmparam.h:1.1.142.2 src/sys/arch/evbmips/include/vmparam.h:1.1.142.3 --- src/sys/arch/evbmips/include/vmparam.h:1.1.142.2 Fri Dec 11 20:22:15 2009 +++ src/sys/arch/evbmips/include/vmparam.h Thu Dec 31 00:54:09 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: vmparam.h,v 1.1.142.2 2009/12/11 20:22:15 matt Exp $ */ +/* $NetBSD: vmparam.h,v 1.1.142.3 2009/12/31 00:54:09 matt Exp $ */ #ifndef _EVBMIPS_VMPARAM_H_ #define _EVBMIPS_VMPARAM_H_ @@ -6,5 +6,14 @@ #include <mips/vmparam.h> #define VM_PHYSSEG_MAX 32 + +#undef VMFREELIST_MAX +#define VMFREELIST_MAX 3 +#if defined(_MIPS_PADDR_T_64BIT) || defined(_LP64) +#define VMFREELIST_FIRST4G 2 +#endif +#if !defined(_LP64) +#define VMFREELIST_FIRST512M 1 +#endif #endif /* !_EVBMIPS_VMPARAM_H_ */ Index: src/sys/arch/evbmips/malta/machdep.c diff -u src/sys/arch/evbmips/malta/machdep.c:1.28.10.2 src/sys/arch/evbmips/malta/machdep.c:1.28.10.3 --- src/sys/arch/evbmips/malta/machdep.c:1.28.10.2 Mon Sep 7 23:20:29 2009 +++ src/sys/arch/evbmips/malta/machdep.c Thu Dec 31 00:54:09 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.28.10.2 2009/09/07 23:20:29 matt Exp $ */ +/* $NetBSD: machdep.c,v 1.28.10.3 2009/12/31 00:54:09 matt Exp $ */ /* * Copyright 2001, 2002 Wasabi Systems, Inc. @@ -112,7 +112,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.28.10.2 2009/09/07 23:20:29 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.28.10.3 2009/12/31 00:54:09 matt Exp $"); #include "opt_ddb.h" #include "opt_execfmt.h" @@ -164,9 +164,6 @@ /* For sysctl_hw. */ extern char cpu_model[]; -/* Our exported CPU info; we can have only one. */ -struct cpu_info cpu_info_store; - /* Maps for VM objects. */ struct vm_map *mb_map = NULL; struct vm_map *phys_map = NULL; @@ -189,8 +186,6 @@ */ int safepri = MIPS1_PSL_LOWIPL; -extern struct user *proc0paddr; - /* * Do all the stuff that locore normally does before calling main(). */ @@ -198,11 +193,10 @@ mach_init(int argc, char **argv, yamon_env_var *envp, u_long memsize) { struct malta_config *mcp = &malta_configuration; + uint8_t * const brkres = (uint8_t *)MIPS_PHYS_TO_KSEG1(MALTA_BRKRES); bus_space_handle_t sh; - void *kernend, *v; - u_long first, last; + void *kernend; int freqok; - uint8_t *brkres = (uint8_t *)MIPS_PHYS_TO_KSEG1(MALTA_BRKRES); extern char edata[], end[]; @@ -308,10 +302,8 @@ /* * Load the rest of the available pages into the VM system. */ - first = round_page(MIPS_KSEG0_TO_PHYS(kernend)); - last = mem_clusters[0].start + mem_clusters[0].size; - uvm_page_physload(atop(first), atop(last), atop(first), atop(last), - VM_FREELIST_DEFAULT); + mips_page_physload(MIPS_KSEG0_START, (vaddr_t)kernend, + mem_clusters, mem_cluster_cnt, NULL, 0); /* * Initialize error message buffer (at end of core). @@ -323,17 +315,7 @@ /* * Allocate space for proc0's USPACE. */ - v = (void *)uvm_pageboot_alloc(USPACE); - lwp0.l_addr = proc0paddr = (struct user *)v; - lwp0.l_md.md_regs = (struct frame *)((char *)v + USPACE) - 1; -#ifdef _LP64 - lwp0.l_md.md_regs->f_regs[_R_SR] = MIPS_SR_KX; -#endif - proc0paddr->u_pcb.pcb_context.val[_L_SR] = -#ifdef _LP64 - MIPS_SR_KX | -#endif - MIPS_INT_MASK | MIPS_SR_INT_IE; /* SR */ + mips_init_lwp0_uarea(); /* * Initialize debuggers, and break into them, if appropriate. Index: src/sys/arch/evbmips/rmixl/machdep.c diff -u src/sys/arch/evbmips/rmixl/machdep.c:1.1.2.10 src/sys/arch/evbmips/rmixl/machdep.c:1.1.2.11 --- src/sys/arch/evbmips/rmixl/machdep.c:1.1.2.10 Mon Dec 14 07:23:31 2009 +++ src/sys/arch/evbmips/rmixl/machdep.c Thu Dec 31 00:54:09 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.1.2.10 2009/12/14 07:23:31 cliff Exp $ */ +/* $NetBSD: machdep.c,v 1.1.2.11 2009/12/31 00:54:09 matt Exp $ */ /* * Copyright 2001, 2002 Wasabi Systems, Inc. @@ -112,7 +112,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.1.2.10 2009/12/14 07:23:31 cliff Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.1.2.11 2009/12/31 00:54:09 matt Exp $"); #include "opt_ddb.h" #include "opt_com.h" @@ -258,8 +258,6 @@ */ int safepri = MIPS1_PSL_LOWIPL; -extern struct user *proc0paddr; - /* * Do all the stuff that locore normally does before calling main(). */ @@ -267,7 +265,7 @@ mach_init(int argc, int32_t *argv, void *envp, int64_t infop) { struct rmixl_config *rcp = &rmixl_configuration; - void *kernend, *v; + void *kernend; u_long memsize; u_int vm_cluster_cnt; uint32_t r; @@ -381,17 +379,8 @@ /* * Load vm_clusters[] into the VM system. */ - for (u_int i=0; i < vm_cluster_cnt; i++) { - u_quad_t first, last; - - first = trunc_page(vm_clusters[i].start); - last = round_page(vm_clusters[i].start + vm_clusters[i].size); - DPRINTF(("%s: %d: %#"PRIx64", %#"PRIx64"\n", - __func__, i, first, last)); - - uvm_page_physload(atop(first), atop(last), atop(first), - atop(last), VM_FREELIST_DEFAULT); - } + mips_page_physload(MIPS_KSEG0_START, (vaddr_t) kernend, + vm_clusters, vm_cluster_cnt, NULL, 0); /* * Initialize error message buffer (at end of core). @@ -403,18 +392,7 @@ /* * Allocate space for proc0's USPACE. */ - v = (void *)uvm_pageboot_alloc(USPACE); - lwp0.l_addr = proc0paddr = (struct user *)v; - lwp0.l_md.md_regs = (struct frame *)((char *)v + USPACE) - 1; -#ifdef _LP64 - lwp0.l_md.md_regs->f_regs[_R_SR] = MIPS_SR_KX; -#endif - proc0paddr->u_pcb.pcb_context.val[_L_SR] = -#ifdef _LP64 - MIPS_SR_KX | -#endif - MIPS_INT_MASK | MIPS_SR_INT_IE; /* SR */ - + mips_init_lwp0_uarea(); /* * Initialize debuggers, and break into them, if appropriate. Index: src/sys/arch/mips/include/pmap.h diff -u src/sys/arch/mips/include/pmap.h:1.54.26.2 src/sys/arch/mips/include/pmap.h:1.54.26.3 --- src/sys/arch/mips/include/pmap.h:1.54.26.2 Wed Dec 30 04:51:26 2009 +++ src/sys/arch/mips/include/pmap.h Thu Dec 31 00:54:09 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.54.26.2 2009/12/30 04:51:26 matt Exp $ */ +/* $NetBSD: pmap.h,v 1.54.26.3 2009/12/31 00:54:09 matt Exp $ */ /* * Copyright (c) 1992, 1993 @@ -75,7 +75,7 @@ #define _MIPS_PMAP_H_ #include <mips/cpuregs.h> /* for KSEG0 below */ -#include <mips/pte.h> +//#include <mips/pte.h> /* * The user address space is 2Gb (0x0 - 0x80000000). @@ -111,10 +111,10 @@ }; struct pmap; -typedef bool (*pte_callback_t)(struct pmap *, vaddr_t, vaddr_t, pt_entry_t *, - uintptr_t); -pt_entry_t *pmap_pte_lookup(struct pmap *, vaddr_t); -pt_entry_t *pmap_pte_reserve(struct pmap *, vaddr_t, int); +typedef bool (*pte_callback_t)(struct pmap *, vaddr_t, vaddr_t, + union pt_entry *, uintptr_t); +union pt_entry *pmap_pte_lookup(struct pmap *, vaddr_t); +union pt_entry *pmap_pte_reserve(struct pmap *, vaddr_t, int); void pmap_pte_process(struct pmap *, vaddr_t, vaddr_t, pte_callback_t, uintptr_t); void pmap_segtab_activate(struct lwp *); Index: src/sys/arch/mips/mips/mips_machdep.c diff -u src/sys/arch/mips/mips/mips_machdep.c:1.205.4.1.2.1.2.18 src/sys/arch/mips/mips/mips_machdep.c:1.205.4.1.2.1.2.19 --- src/sys/arch/mips/mips/mips_machdep.c:1.205.4.1.2.1.2.18 Wed Dec 30 04:51:26 2009 +++ src/sys/arch/mips/mips/mips_machdep.c Thu Dec 31 00:54:09 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: mips_machdep.c,v 1.205.4.1.2.1.2.18 2009/12/30 04:51:26 matt Exp $ */ +/* $NetBSD: mips_machdep.c,v 1.205.4.1.2.1.2.19 2009/12/31 00:54:09 matt Exp $ */ /* * Copyright 2002 Wasabi Systems, Inc. @@ -112,7 +112,7 @@ #include <sys/cdefs.h> /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: mips_machdep.c,v 1.205.4.1.2.1.2.18 2009/12/30 04:51:26 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mips_machdep.c,v 1.205.4.1.2.1.2.19 2009/12/31 00:54:09 matt Exp $"); #include "opt_cputype.h" #include "opt_compat_netbsd32.h" @@ -1657,8 +1657,8 @@ const phys_ram_seg_t *segs, size_t nseg, const struct mips_vmfreelist *flp, size_t nfl) { - const paddr_t kernstart = MIPS_KSEG0_TO_PHYS(vkernstart); - const paddr_t kernend = MIPS_KSEG0_TO_PHYS(vkernend); + const paddr_t kernstart = MIPS_KSEG0_TO_PHYS(trunc_page(vkernstart)); + const paddr_t kernend = MIPS_KSEG0_TO_PHYS(round_page(vkernend)); #if defined(VM_FREELIST_FIRST4G) || defined(VM_FREELIST_FIRST512M) #ifdef VM_FREELIST_FIRST512M bool need512m = false; @@ -1690,7 +1690,25 @@ * piecemeal. */ phys_ram_seg_t tmp = *segs++; - printf("phys segment: %#"PRIxPADDR"@%#"PRIxPADDR"\n", tmp.size, tmp.start); + printf("phys segment: %#"PRIxPADDR"@%#"PRIxPADDR"\n", + (paddr_t)tmp.size, + (paddr_t)tmp.start); + + /* + * Make sure everything is in page units. + */ + tmp.size = round_page(tmp.start + tmp.size) - trunc_page(tmp.start) ; + tmp.start = trunc_page(tmp.start); + + /* + * Page 0 is reserved for exception vectors. + */ + if (tmp.start == 0) { + tmp.start = PAGE_SIZE; + tmp.size -= PAGE_SIZE; + if (tmp.size == 0) + continue; + } while (tmp.size > 0) { int freelist = -1; /* unknown freelist */ psize_t segsize = tmp.size; @@ -1786,7 +1804,9 @@ paddr_t first = atop(tmp.start); paddr_t last = first + atop(segsize); printf("adding %#"PRIxPADDR"@%#"PRIxPADDR" to freelist %d\n", - tmp.start, tmp.start + segsize, freelist); + + (paddr_t)tmp.start, (paddr_t)tmp.start + segsize, + freelist); uvm_page_physload(first, last, first, last, freelist); /* Index: src/sys/arch/pmax/include/vmparam.h diff -u src/sys/arch/pmax/include/vmparam.h:1.14 src/sys/arch/pmax/include/vmparam.h:1.14.148.1 --- src/sys/arch/pmax/include/vmparam.h:1.14 Fri Aug 24 15:33:17 2001 +++ src/sys/arch/pmax/include/vmparam.h Thu Dec 31 00:54:09 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: vmparam.h,v 1.14 2001/08/24 15:33:17 mhitch Exp $ */ +/* $NetBSD: vmparam.h,v 1.14.148.1 2009/12/31 00:54:09 matt Exp $ */ #ifndef _PMAX_VMPARAM_H_ #define _PMAX_VMPARAM_H_ @@ -11,10 +11,9 @@ * to DMA into this region, and we want them to have a fighting chance of * allocating their DMA memory during autoconfiguration. */ +#define VM_PHYSSEG_MAX 16 +#undef VM_NFREELIST #define VM_NFREELIST 2 -#define VM_FREELIST_DEFAULT 0 #define VM_FREELIST_FIRST8 1 -#define VM_PHYSSEG_MAX 16 /* 15 + 1 free lists */ - #endif /* !_PMAX_VMPARAM_H_ */ Index: src/sys/arch/pmax/pmax/machdep.c diff -u src/sys/arch/pmax/pmax/machdep.c:1.223.8.1.2.3 src/sys/arch/pmax/pmax/machdep.c:1.223.8.1.2.4 --- src/sys/arch/pmax/pmax/machdep.c:1.223.8.1.2.3 Wed Sep 16 19:23:18 2009 +++ src/sys/arch/pmax/pmax/machdep.c Thu Dec 31 00:54:09 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.223.8.1.2.3 2009/09/16 19:23:18 matt Exp $ */ +/* $NetBSD: machdep.c,v 1.223.8.1.2.4 2009/12/31 00:54:09 matt Exp $ */ /* * Copyright (c) 1992, 1993 @@ -77,7 +77,7 @@ */ #include <sys/cdefs.h> /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.223.8.1.2.3 2009/09/16 19:23:18 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.223.8.1.2.4 2009/12/31 00:54:09 matt Exp $"); #include "fs_mfs.h" #include "opt_ddb.h" @@ -198,7 +198,6 @@ { char *cp; const char *bootinfo_msg; - u_long first, last; int i; char *kernend; #if NKSYMS || defined(DDB) || defined(LKM) @@ -355,23 +354,6 @@ #endif /* - * Alloc u pages for proc0 stealing KSEG0 memory. - */ - lwp0.l_addr = proc0paddr = (struct user *)kernend; - lwp0.l_md.md_regs = (struct frame *)(kernend + USPACE) - 1; - memset(lwp0.l_addr, 0, USPACE); -#ifdef _LP64 - lwp0.l_md.md_regs->f_regs[_R_SR] = MIPS_SR_KX; -#endif - lwp0.l_addr->u_pcb.pcb_context.val[_L_SR] = -#ifdef _LP64 - MIPS_SR_KX | -#endif - MIPS_INT_MASK | MIPS_SR_INT_IE; /* SR */ - - kernend += USPACE; - - /* * Initialize physmem_boardmax; assume no SIMM-bank limits. * Adjust later in model-specific code if necessary. */ @@ -403,22 +385,18 @@ * allocating their DMA memory during autoconfiguration. */ for (i = 0, physmem = 0; i < mem_cluster_cnt; ++i) { - first = mem_clusters[i].start; - if (first == 0) - first = round_page(MIPS_KSEG0_TO_PHYS(kernend)); - last = mem_clusters[i].start + mem_clusters[i].size; physmem += atop(mem_clusters[i].size); - if (i != 0 || last <= (8 * 1024 * 1024)) { - uvm_page_physload(atop(first), atop(last), atop(first), - atop(last), VM_FREELIST_DEFAULT); - } else { - uvm_page_physload(atop(first), atop(8 * 1024 * 1024), - atop(first), atop(8 * 1024 * 1024), VM_FREELIST_FIRST8); - uvm_page_physload(atop(8 * 1024 * 1024), atop(last), - atop(8 * 1024 * 1024), atop(last), VM_FREELIST_DEFAULT); - } } + static const struct mips_vmfreelist first8 = { + .fl_start = 0, + .fl_end = 8 * 1024 * 1024, + .fl_freelist = VM_FREELIST_FIRST8 + }; + mips_page_physload(MIPS_KSEG0_START, (vaddr_t)kernend, + mem_clusters, mem_cluster_cnt, &first8, 1); + + /* * Initialize error message buffer (at end of core). */ @@ -428,6 +406,11 @@ * Initialize the virtual memory system. */ pmap_bootstrap(); + + /* + * Alloc u pages for proc0 stealing KSEG0 memory. + */ + mips_init_lwp0_uarea(); } void Index: src/sys/arch/sbmips/sbmips/machdep.c diff -u src/sys/arch/sbmips/sbmips/machdep.c:1.38.10.4 src/sys/arch/sbmips/sbmips/machdep.c:1.38.10.5 --- src/sys/arch/sbmips/sbmips/machdep.c:1.38.10.4 Tue Dec 8 07:44:44 2009 +++ src/sys/arch/sbmips/sbmips/machdep.c Thu Dec 31 00:54:09 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.38.10.4 2009/12/08 07:44:44 cyber Exp $ */ +/* $NetBSD: machdep.c,v 1.38.10.5 2009/12/31 00:54:09 matt Exp $ */ /* * Copyright 2000, 2001 @@ -58,7 +58,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.38.10.4 2009/12/08 07:44:44 cyber Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.38.10.5 2009/12/31 00:54:09 matt Exp $"); #include "opt_ddb.h" #include "opt_ddbparam.h" /* for SYMTAB_SPACE */ @@ -158,12 +158,11 @@ void mach_init(long fwhandle, long magic, long bootdata, long reserved) { - void *kernend, *p0; - u_long first, last; + void *kernend; extern char edata[], end[]; - int i; uint32_t config; struct bootinfo_v1 *tmp_bi; + int i; /* XXX this code must run on the target CPU */ config = mips3_cp0_config_read(); @@ -172,11 +171,7 @@ mips3_cp0_config_write(config); /* Zero BSS. XXXCGD: uh, is this really necessary still? */ -#ifdef _LP64 - memset((char *)((vaddr_t)edata | 0xffffffff00000000), 0, end - edata); -#else memset(edata, 0, end - edata); -#endif /* * Copy the bootinfo structure from the boot loader. @@ -316,39 +311,21 @@ /* * Load the rest of the available pages into the VM system. - * The first chunk is tricky because we have to avoid the - * kernel, but the rest are easy. */ - first = round_page(MIPS_KSEG0_TO_PHYS(kernend)); - last = mem_clusters[0].start + mem_clusters[0].size; - uvm_page_physload(atop(first), atop(last), atop(first), atop(last), - VM_FREELIST_DEFAULT); - - for (i = 1; i < mem_cluster_cnt; i++) { - first = round_page(mem_clusters[i].start); - last = mem_clusters[i].start + mem_clusters[i].size; - uvm_page_physload(atop(first), atop(last), atop(first), - atop(last), VM_FREELIST_DEFAULT); - } + mips_page_physload(MIPS_KSEG0_START, (vaddr_t) kernend, + mem_clusters, mem_cluster_cnt, NULL, 0); /* * Initialize error message buffer (at end of core). */ mips_init_msgbuf(); + pmap_bootstrap(); + /* * Allocate space for proc0's USPACE */ - p0 = (void *)pmap_steal_memory(USPACE, NULL, NULL); - lwp0.l_addr = proc0paddr = (struct user *)p0; - lwp0.l_md.md_regs = (struct frame *)((char *)p0 + USPACE) - 1; - lwp0.l_addr->u_pcb.pcb_context.val[_L_SR] = -#ifdef _LP64 - MIPS_SR_KX | -#endif - MIPS_INT_MASK | MIPS_SR_INT_IE; /* SR */ - - pmap_bootstrap(); + mips_init_lwp0_uarea(); /* * Initialize debuggers, and break into them, if appropriate.