Module Name: src Committed By: skrll Date: Fri Jul 29 15:43:02 UTC 2016
Modified Files: src/sys/arch/mips/mips: pmap_machdep.c Log Message: Fix up va for pmap_md_map_ephemeral_page and so that cache ops get the correct address To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/mips/mips/pmap_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/pmap_machdep.c diff -u src/sys/arch/mips/mips/pmap_machdep.c:1.1 src/sys/arch/mips/mips/pmap_machdep.c:1.2 --- src/sys/arch/mips/mips/pmap_machdep.c:1.1 Mon Jul 11 16:15:36 2016 +++ src/sys/arch/mips/mips/pmap_machdep.c Fri Jul 29 15:43:02 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_machdep.c,v 1.1 2016/07/11 16:15:36 matt Exp $ */ +/* $NetBSD: pmap_machdep.c,v 1.2 2016/07/29 15:43:02 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap_machdep.c,v 1.1 2016/07/11 16:15:36 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_machdep.c,v 1.2 2016/07/29 15:43:02 skrll Exp $"); /* * Manages physical address maps. @@ -181,7 +181,7 @@ pmap_md_map_ephemeral_page(struct vm_pag KASSERT(!locked_p || VM_PAGEMD_PVLIST_LOCKED_P(mdpg)); if (!MIPS_CACHE_VIRTUAL_ALIAS || !mips_cache_badalias(pv->pv_va, pa)) { -#ifndef __mips_o32 +#ifdef _LP64 va = MIPS_PHYS_TO_XKPHYS_CACHED(pa); #else if (pa < MIPS_PHYS_MASK) { @@ -198,13 +198,14 @@ pmap_md_map_ephemeral_page(struct vm_pag struct cpu_info * const ci = curcpu(); KASSERT(ci->ci_pmap_dstbase != 0); - va = (prot & VM_PROT_WRITE + vaddr_t nva = (prot & VM_PROT_WRITE ? ci->ci_pmap_dstbase : ci->ci_pmap_srcbase) + mips_cache_indexof(MIPS_CACHE_VIRTUAL_ALIAS ? pv->pv_va : pa); + va = (intptr_t)nva; /* * Now to make and write the new PTE to map the PA. */ @@ -229,8 +230,8 @@ pmap_md_map_ephemeral_page(struct vm_pag (void)VM_PAGEMD_PVLIST_READLOCK(mdpg); if (VM_PAGEMD_CACHED_P(mdpg) && mips_cache_badalias(pv->pv_va, va)) { - mips_dcache_wbinv_range_index(trunc_page(pv->pv_va), - PAGE_SIZE); + register_t ova = (intptr_t)trunc_page(pv->pv_va); + mips_dcache_wbinv_range_index(ova, PAGE_SIZE); /* * If there is no active mapping, remember this new one. */