Module Name:    src
Committed By:   jym
Date:           Wed Feb 24 00:01:12 UTC 2010

Modified Files:
        src/sys/dev/pci: agp.c
        src/sys/uvm: uvm_page.c

Log Message:
- Use ctob() instead of ptoa() to obtain physical addresses from frame
numbers. Using ptoa() will cast to vaddr_t, which might no be adequate
for architectures where sizeof(paddr_t) > sizeof(vaddr_t) (like i386 PAE).

- small fix inside AGP heuristics to avoid masking high order bits for
systems with more than 4GB.

Reviewed by bou...@.

See also http://mail-index.netbsd.org/tech-kern/2010/02/22/msg007373.html


To generate a diff of this commit:
cvs rdiff -u -r1.66 -r1.67 src/sys/dev/pci/agp.c
cvs rdiff -u -r1.153 -r1.154 src/sys/uvm/uvm_page.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/pci/agp.c
diff -u src/sys/dev/pci/agp.c:1.66 src/sys/dev/pci/agp.c:1.67
--- src/sys/dev/pci/agp.c:1.66	Fri Jan  8 19:56:51 2010
+++ src/sys/dev/pci/agp.c	Wed Feb 24 00:01:11 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: agp.c,v 1.66 2010/01/08 19:56:51 dyoung Exp $	*/
+/*	$NetBSD: agp.c,v 1.67 2010/02/24 00:01:11 jym Exp $	*/
 
 /*-
  * Copyright (c) 2000 Doug Rabson
@@ -65,7 +65,7 @@
 
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: agp.c,v 1.66 2010/01/08 19:56:51 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: agp.c,v 1.67 2010/02/24 00:01:11 jym Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -327,7 +327,7 @@
 	 * Work out an upper bound for agp memory allocation. This
 	 * uses a heuristic table from the Linux driver.
 	 */
-	memsize = ptoa(physmem) >> 20;
+	memsize = physmem >> (20 - PAGE_SHIFT); /* memsize is in MB */
 	for (i = 0; i < agp_max_size; i++) {
 		if (memsize <= agp_max[i][0])
 			break;

Index: src/sys/uvm/uvm_page.c
diff -u src/sys/uvm/uvm_page.c:1.153 src/sys/uvm/uvm_page.c:1.154
--- src/sys/uvm/uvm_page.c:1.153	Wed Jan 27 03:56:33 2010
+++ src/sys/uvm/uvm_page.c	Wed Feb 24 00:01:12 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_page.c,v 1.153 2010/01/27 03:56:33 uebayasi Exp $	*/
+/*	$NetBSD: uvm_page.c,v 1.154 2010/02/24 00:01:12 jym Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -71,7 +71,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_page.c,v 1.153 2010/01/27 03:56:33 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_page.c,v 1.154 2010/02/24 00:01:12 jym Exp $");
 
 #include "opt_ddb.h"
 #include "opt_uvmhist.h"
@@ -339,7 +339,7 @@
 void
 uvm_page_init(vaddr_t *kvm_startp, vaddr_t *kvm_endp)
 {
-	vsize_t freepages, pagecount, bucketcount, n;
+	psize_t freepages, pagecount, bucketcount, n;
 	struct pgflbucket *bucketarray, *cpuarray;
 	struct vm_page *pagearray;
 	int lcv;
@@ -439,7 +439,7 @@
 		vm_physmem[lcv].lastpg = vm_physmem[lcv].pgs + (n - 1);
 
 		/* init and free vm_pages (we've already zeroed them) */
-		paddr = ptoa(vm_physmem[lcv].start);
+		paddr = ctob(vm_physmem[lcv].start);
 		for (i = 0 ; i < n ; i++, paddr += PAGE_SIZE) {
 			vm_physmem[lcv].pgs[i].phys_addr = paddr;
 #ifdef __HAVE_VM_PAGE_MD
@@ -642,7 +642,7 @@
 		/* try from front */
 		if (vm_physmem[lcv].avail_start == vm_physmem[lcv].start &&
 		    vm_physmem[lcv].avail_start < vm_physmem[lcv].avail_end) {
-			*paddrp = ptoa(vm_physmem[lcv].avail_start);
+			*paddrp = ctob(vm_physmem[lcv].avail_start);
 			vm_physmem[lcv].avail_start++;
 			vm_physmem[lcv].start++;
 			/* nothing left?   nuke it */
@@ -661,7 +661,7 @@
 		/* try from rear */
 		if (vm_physmem[lcv].avail_end == vm_physmem[lcv].end &&
 		    vm_physmem[lcv].avail_start < vm_physmem[lcv].avail_end) {
-			*paddrp = ptoa(vm_physmem[lcv].avail_end - 1);
+			*paddrp = ctob(vm_physmem[lcv].avail_end - 1);
 			vm_physmem[lcv].avail_end--;
 			vm_physmem[lcv].end--;
 			/* nothing left?   nuke it */
@@ -690,7 +690,7 @@
 		if (vm_physmem[lcv].avail_start >= vm_physmem[lcv].avail_end)
 			continue;  /* nope */
 
-		*paddrp = ptoa(vm_physmem[lcv].avail_start);
+		*paddrp = ctob(vm_physmem[lcv].avail_start);
 		vm_physmem[lcv].avail_start++;
 		/* truncate! */
 		vm_physmem[lcv].start = vm_physmem[lcv].avail_start;
@@ -793,7 +793,7 @@
 		}
 		/* zero data, init phys_addr and free_list, and free pages */
 		memset(pgs, 0, sizeof(struct vm_page) * npages);
-		for (lcv = 0, paddr = ptoa(start) ;
+		for (lcv = 0, paddr = ctob(start) ;
 				 lcv < npages ; lcv++, paddr += PAGE_SIZE) {
 			pgs[lcv].phys_addr = paddr;
 			pgs[lcv].free_list = free_list;

Reply via email to