Module Name: src Committed By: matt Date: Sat Dec 19 06:58:30 UTC 2009
Modified Files: src/sys/arch/mips/mips [matt-nb5-mips64]: pmap.c Log Message: Change pmap_steal_memory to map allocated memory in XKPHYS is _LP64 kernels. The CCA used is the one used for KSEG0. To generate a diff of this commit: cvs rdiff -u -r1.179.16.5 -r1.179.16.6 src/sys/arch/mips/mips/pmap.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/pmap.c diff -u src/sys/arch/mips/mips/pmap.c:1.179.16.5 src/sys/arch/mips/mips/pmap.c:1.179.16.6 --- src/sys/arch/mips/mips/pmap.c:1.179.16.5 Tue Sep 8 08:11:29 2009 +++ src/sys/arch/mips/mips/pmap.c Sat Dec 19 06:58:30 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.179.16.5 2009/09/08 08:11:29 matt Exp $ */ +/* $NetBSD: pmap.c,v 1.179.16.6 2009/12/19 06:58:30 matt Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.179.16.5 2009/09/08 08:11:29 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.179.16.6 2009/12/19 06:58:30 matt Exp $"); /* * Manages physical address maps. @@ -436,7 +436,6 @@ vaddr_t pmap_steal_memory(vsize_t size, vaddr_t *vstartp, vaddr_t *vendp) { - int bank, x; u_int npgs; paddr_t pa; vaddr_t va; @@ -444,7 +443,7 @@ size = round_page(size); npgs = atop(size); - for (bank = 0; bank < vm_nphysseg; bank++) { + for (u_int bank = 0; bank < vm_nphysseg; bank++) { if (uvm.page_init_done == true) panic("pmap_steal_memory: called _after_ bootstrap"); @@ -472,21 +471,30 @@ /* Remove this segment from the list. */ vm_nphysseg--; - for (x = bank; x < vm_nphysseg; x++) { + for (u_int x = bank; x < vm_nphysseg; x++) { /* structure copy */ vm_physmem[x] = vm_physmem[x + 1]; } } +#ifdef _LP64 /* - * We don't use XKPHYS here since we don't know what CCA - * to use for cached access yet. + * Use the same CCA as used to access KSEG0 for XKPHYS. */ - if (pa + size > MIPS_KSEG1_START) - panic("pmap_steal_memory: " - "pa can not be mapped into K0"); + uint32_t v; + + __asm __volatile("mfc0 %0,$%1" + : "=r"(v) + : "n"(MIPS_COP_0_CONFIG)); + va = MIPS_PHYS_TO_XKPHYS(v & MIPS3_CONFIG_K0_MASK, pa); +#else + if (pa + size > MIPS_PHYS_MASK + 1) + panic("pmap_steal_memory: pa %"PRIxPADDR + " can not be mapped into KSEG0", pa); va = MIPS_PHYS_TO_KSEG0(pa); +#endif + memset((void *)va, 0, size); return va; }