svn commit: r343872 - head/sys/powerpc/powerpc

Leandro Lupori luporl at FreeBSD.org
Thu Feb 7 17:30:45 UTC 2019


Author: luporl
Date: Thu Feb  7 17:30:44 2019
New Revision: 343872
URL: https://svnweb.freebsd.org/changeset/base/343872

Log:
  [ppc64] fix /dev/kmem
  
  For direct mapped kernel addresses, ppc64 function was not
  performing the dmap to physical conversion, before jumping
  to the code that fetched the value from physical memory.
  
  Reviewed by:	jhibbits
  Differential Revision:	https://reviews.freebsd.org/D19086

Modified:
  head/sys/powerpc/powerpc/mem.c

Modified: head/sys/powerpc/powerpc/mem.c
==============================================================================
--- head/sys/powerpc/powerpc/mem.c	Thu Feb  7 14:40:28 2019	(r343871)
+++ head/sys/powerpc/powerpc/mem.c	Thu Feb  7 17:30:44 2019	(r343872)
@@ -112,9 +112,9 @@ memrw(struct cdev *dev, struct uio *uio, int flags)
 			continue;
 		}
 		if (dev2unit(dev) == CDEV_MINOR_MEM) {
-kmem_direct_mapped:	v = uio->uio_offset;
+			v = uio->uio_offset;
 
-			off = uio->uio_offset & PAGE_MASK;
+kmem_direct_mapped:	off = v & PAGE_MASK;
 			cnt = PAGE_SIZE - ((vm_offset_t)iov->iov_base &
 			    PAGE_MASK);
 			cnt = min(cnt, PAGE_SIZE - off);
@@ -137,8 +137,10 @@ kmem_direct_mapped:	v = uio->uio_offset;
 		else if (dev2unit(dev) == CDEV_MINOR_KMEM) {
 			va = uio->uio_offset;
 
-			if ((va < VM_MIN_KERNEL_ADDRESS) || (va > virtual_end))
+			if ((va < VM_MIN_KERNEL_ADDRESS) || (va > virtual_end)) {
+				v = DMAP_TO_PHYS(va);
 				goto kmem_direct_mapped;
+			}
 
 			va = trunc_page(uio->uio_offset);
 			eva = round_page(uio->uio_offset


More information about the svn-src-head mailing list