Module Name:    src
Committed By:   matt
Date:           Fri Nov  2 16:43:16 UTC 2012

Modified Files:
        src/sys/uvm: uvm_map.c

Log Message:
When uvm_io reserves kernel address space, make sure it's starts with the
same color as the user address space being copied.


To generate a diff of this commit:
cvs rdiff -u -r1.323 -r1.324 src/sys/uvm/uvm_map.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/uvm/uvm_map.c
diff -u src/sys/uvm/uvm_map.c:1.323 src/sys/uvm/uvm_map.c:1.324
--- src/sys/uvm/uvm_map.c:1.323	Mon Oct 29 16:00:05 2012
+++ src/sys/uvm/uvm_map.c	Fri Nov  2 16:43:16 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_map.c,v 1.323 2012/10/29 16:00:05 para Exp $	*/
+/*	$NetBSD: uvm_map.c,v 1.324 2012/11/02 16:43:16 matt Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_map.c,v 1.323 2012/10/29 16:00:05 para Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_map.c,v 1.324 2012/11/02 16:43:16 matt Exp $");
 
 #include "opt_ddb.h"
 #include "opt_uvmhist.h"
@@ -2369,7 +2369,7 @@ uvm_map_reserve(struct vm_map *map, vsiz
     vaddr_t offset	/* hint for pmap_prefer */,
     vsize_t align	/* alignment */,
     vaddr_t *raddr	/* IN:hint, OUT: reserved VA */,
-    uvm_flag_t flags	/* UVM_FLAG_FIXED or 0 */)
+    uvm_flag_t flags	/* UVM_FLAG_FIXED or UVM_FLAG_COLORMATCH or 0 */)
 {
 	UVMHIST_FUNC("uvm_map_reserve"); UVMHIST_CALLED(maphist);
 
@@ -2576,8 +2576,11 @@ uvm_map_extract(struct vm_map *srcmap, v
 
 	if ((flags & UVM_EXTRACT_RESERVED) == 0) {
 		dstaddr = vm_map_min(dstmap);
-		if (!uvm_map_reserve(dstmap, len, start, 0, &dstaddr, 0))
+		if (!uvm_map_reserve(dstmap, len, start, 
+		    atop(start) & uvmexp.colormask, &dstaddr,
+		    UVM_FLAG_COLORMATCH))
 			return (ENOMEM);
+		KASSERT((atop(start ^ dstaddr) & uvmexp.colormask) == 0);
 		*dstaddrp = dstaddr;	/* pass address back to caller */
 		UVMHIST_LOG(maphist, "  dstaddr=0x%x", dstaddr,0,0,0);
 	} else {

Reply via email to