Module Name:    src
Committed By:   uebayasi
Date:           Thu Oct  6 12:26:03 UTC 2011

Modified Files:
        src/sys/uvm: uvm_page.c uvm_pager.c

Log Message:
Correct pagermap emergva allocation.  From yamt@.

Tested by building i386 kernel with DTRACE defined which died 100%.


To generate a diff of this commit:
cvs rdiff -u -r1.177 -r1.178 src/sys/uvm/uvm_page.c
cvs rdiff -u -r1.105 -r1.106 src/sys/uvm/uvm_pager.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_page.c
diff -u src/sys/uvm/uvm_page.c:1.177 src/sys/uvm/uvm_page.c:1.178
--- src/sys/uvm/uvm_page.c:1.177	Fri Sep 30 05:29:12 2011
+++ src/sys/uvm/uvm_page.c	Thu Oct  6 12:26:03 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_page.c,v 1.177 2011/09/30 05:29:12 mrg Exp $	*/
+/*	$NetBSD: uvm_page.c,v 1.178 2011/10/06 12:26:03 uebayasi Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_page.c,v 1.177 2011/09/30 05:29:12 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_page.c,v 1.178 2011/10/06 12:26:03 uebayasi Exp $");
 
 #include "opt_ddb.h"
 #include "opt_uvmhist.h"
@@ -393,6 +393,7 @@ uvm_page_init(vaddr_t *kvm_startp, vaddr
 	if (uvmexp.ncolors == 0)
 		uvmexp.ncolors = 1;
 	uvmexp.colormask = uvmexp.ncolors - 1;
+	KASSERT((uvmexp.colormask & uvmexp.ncolors) == 0);
 
 	/*
 	 * we now know we have (PAGE_SIZE * freepages) bytes of memory we can
@@ -986,6 +987,8 @@ uvm_page_recolor(int newncolors)
 	int lcv, color, i, ocolors;
 	struct uvm_cpu *ucpu;
 
+	KASSERT(((newncolors - 1) & newncolors) == 0);
+
 	if (newncolors <= uvmexp.ncolors)
 		return;
 

Index: src/sys/uvm/uvm_pager.c
diff -u src/sys/uvm/uvm_pager.c:1.105 src/sys/uvm/uvm_pager.c:1.106
--- src/sys/uvm/uvm_pager.c:1.105	Wed Sep 28 22:52:15 2011
+++ src/sys/uvm/uvm_pager.c	Thu Oct  6 12:26:03 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_pager.c,v 1.105 2011/09/28 22:52:15 matt Exp $	*/
+/*	$NetBSD: uvm_pager.c,v 1.106 2011/10/06 12:26:03 uebayasi Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_pager.c,v 1.105 2011/09/28 22:52:15 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_pager.c,v 1.106 2011/10/06 12:26:03 uebayasi Exp $");
 
 #include "opt_uvmhist.h"
 #include "opt_readahead.h"
@@ -95,7 +95,7 @@ uvm_pager_realloc_emerg(void)
 	KASSERT(!emerginuse);
 
 	new_emergva = uvm_km_alloc(kernel_map,
-	    round_page(MAXPHYS) + ptoa(uvmexp.ncolors), 0,
+	    round_page(MAXPHYS) + ptoa(uvmexp.ncolors), ptoa(uvmexp.ncolors),
 	    UVM_KMF_VAONLY);
 
 	KASSERT(new_emergva != 0);
@@ -264,6 +264,7 @@ uvm_pagermapout(vaddr_t kva, int npages)
 
 	if ((kva & ~ptoa(uvmexp.colormask)) == emergva) {
 		mutex_enter(&pager_map_wanted_lock);
+		KASSERT(emerginuse);
 		emerginuse = false;
 		wakeup(&emergva);
 		mutex_exit(&pager_map_wanted_lock);

Reply via email to