Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 12 Jan 2009 15:57:17 GMT
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 156012 for review
Message-ID:  <200901121557.n0CFvHbW035826@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=156012

Change 156012 by nwhitehorn@nwhitehorn_trantor on 2009/01/12 15:56:33

	First crack at making /dev/mem work on systems without a direct map.
	This is currently broken if you try to dd multiple consecutive pages,
	but reading at a random offset does work, which is enough to make
	X11 work on my iMac G5.

Affected files ...

.. //depot/projects/ppc-g5/sys/powerpc/powerpc/mem.c#3 edit

Differences ...

==== //depot/projects/ppc-g5/sys/powerpc/powerpc/mem.c#3 (text+ko) ====

@@ -64,6 +64,7 @@
 #include <vm/vm.h>
 #include <vm/pmap.h>
 #include <vm/vm_extern.h>
+#include <vm/vm_page.h>
 
 #include <machine/memdev.h>
 
@@ -77,6 +78,8 @@
 	int error = 0;
 	vm_offset_t va, eva, off, v;
 	vm_prot_t prot;
+	struct vm_page m;
+	vm_page_t marr;
 	vm_size_t cnt;
 
 	cnt = 0;
@@ -102,14 +105,18 @@
 			cnt = min(cnt, PAGE_SIZE - off);
 			cnt = min(cnt, iov->iov_len);
 
-			if (mem_valid(v, cnt)
-			    && pmap_dev_direct_mapped(v, cnt)) {
+			if (mem_valid(v, cnt)) {
 				error = EFAULT;
 				break;
 			}
-
-			uiomove((void *)v, cnt, uio);
-			break;
+	
+			if (!pmap_dev_direct_mapped(v, cnt)) {
+				error = uiomove((void *)v, cnt, uio);
+			} else {
+				m.phys_addr = trunc_page(v);
+				marr = &m;
+				error = uiomove_fromphys(&marr, off, cnt, uio);
+			}
 		}
 		else if (dev2unit(dev) == CDEV_MINOR_KMEM) {
 			va = uio->uio_offset;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200901121557.n0CFvHbW035826>