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