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

Reply via email to