Module Name: src Committed By: matt Date: Sat Jan 19 00:27:34 UTC 2013
Modified Files: src/sys/dev: mm.c Log Message: Fix __HAVE_MM_MD_CACHE_ALIASING case to use UVM_KMF_COLORMATCH so that uvm returns a page of the correct color. To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/sys/dev/mm.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/dev/mm.c diff -u src/sys/dev/mm.c:1.16 src/sys/dev/mm.c:1.17 --- src/sys/dev/mm.c:1.16 Tue Feb 21 21:57:06 2012 +++ src/sys/dev/mm.c Sat Jan 19 00:27:34 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: mm.c,v 1.16 2012/02/21 21:57:06 rmind Exp $ */ +/* $NetBSD: mm.c,v 1.17 2013/01/19 00:27:34 matt Exp $ */ /*- * Copyright (c) 2002, 2008, 2010 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mm.c,v 1.16 2012/02/21 21:57:06 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mm.c,v 1.17 2013/01/19 00:27:34 matt Exp $"); #include "opt_compat_netbsd.h" @@ -113,11 +113,9 @@ static inline vaddr_t dev_mem_getva(paddr_t pa) { #ifdef __HAVE_MM_MD_CACHE_ALIASING - const vsize_t coloroff = trunc_page(pa) & ptoa(uvmexp.colormask); - const vaddr_t kva = uvm_km_alloc(kernel_map, PAGE_SIZE + coloroff, - ptoa(uvmexp.ncolors), UVM_KMF_VAONLY | UVM_KMF_WAITVA); - - return kva + coloroff; + return uvm_km_alloc(kernel_map, PAGE_SIZE, + atop(pa) & uvmexp.colormask, + UVM_KMF_VAONLY | UVM_KMF_WAITVA | UVM_KMF_COLORMATCH); #else return dev_mem_addr; #endif @@ -127,10 +125,7 @@ static inline void dev_mem_relva(paddr_t pa, vaddr_t va) { #ifdef __HAVE_MM_MD_CACHE_ALIASING - const vsize_t coloroff = trunc_page(pa) & ptoa(uvmexp.colormask); - const vaddr_t origva = va - coloroff; - - uvm_km_free(kernel_map, origva, PAGE_SIZE + coloroff, UVM_KMF_VAONLY); + uvm_km_free(kernel_map, va, PAGE_SIZE, UVM_KMF_VAONLY); #else KASSERT(dev_mem_addr == va); #endif