kernel - Fix /dev/mem access for memory >=4GB
authorMatthew Dillon <dillon@apollo.backplane.com>
Thu, 3 Nov 2011 17:51:40 +0000 (10:51 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Thu, 3 Nov 2011 17:51:40 +0000 (10:51 -0700)
* The (v) variable was a u_int, chopping off the top 32 bits of a 64 bit
  physical address.  Change to a long.

sys/kern/kern_memio.c

index 37e4032..6dbae93 100644 (file)
@@ -154,8 +154,9 @@ static int
 mmrw(cdev_t dev, struct uio *uio, int flags)
 {
        int o;
-       u_int c, v;
+       u_int c;
        u_int poolsize;
+       u_long v;
        struct iovec *iov;
        int error = 0;
        caddr_t buf = NULL;
@@ -175,7 +176,7 @@ mmrw(cdev_t dev, struct uio *uio, int flags)
                         * minor device 0 is physical memory, /dev/mem 
                         */
                        v = uio->uio_offset;
-                       v &= ~PAGE_MASK;
+                       v &= ~(long)PAGE_MASK;
                        pmap_kenter((vm_offset_t)ptvmmap, v);
                        o = (int)uio->uio_offset & PAGE_MASK;
                        c = (u_int)(PAGE_SIZE - ((uintptr_t)iov->iov_base & PAGE_MASK));