From 31dc1e9681e109a04459d9059874264f4925605d Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Fri, 14 Oct 2016 20:01:07 +0000 Subject: [PATCH] Drop support for using mmap() with /dev/kmem. Using the device pager with /dev/kmem is not stable since KVA mappings are transient, but the device pager caches the PA associated with a given offset forever. Interestingly, mips' implementation of memmap() already refused requests for /dev/kmem. Note that kvm_read/kvm_write do not use mmap, but use read and write on /dev/kmem, so this should not affect libkvm users. Reviewed by: kib MFC after: 2 months --- sys/amd64/amd64/mem.c | 7 +++---- sys/arm/arm/mem.c | 9 ++++----- sys/arm64/arm64/mem.c | 9 ++++----- sys/i386/i386/mem.c | 9 ++++----- sys/powerpc/powerpc/mem.c | 2 -- 5 files changed, 15 insertions(+), 21 deletions(-) diff --git a/sys/amd64/amd64/mem.c b/sys/amd64/amd64/mem.c index 716fcfb118d..51f46507436 100644 --- a/sys/amd64/amd64/mem.c +++ b/sys/amd64/amd64/mem.c @@ -172,10 +172,9 @@ memmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr, if (offset >= (1ULL << cpu_maxphyaddr)) return (-1); *paddr = offset; - } else if (dev2unit(dev) == CDEV_MINOR_KMEM) - *paddr = vtophys(offset); - /* else panic! */ - return (0); + return (0); + } + return (-1); } /* diff --git a/sys/arm/arm/mem.c b/sys/arm/arm/mem.c index 096988dc0b7..c2cf320b2b6 100644 --- a/sys/arm/arm/mem.c +++ b/sys/arm/arm/mem.c @@ -161,10 +161,9 @@ int memmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr, int prot __unused, vm_memattr_t *memattr __unused) { - if (dev2unit(dev) == CDEV_MINOR_MEM) + if (dev2unit(dev) == CDEV_MINOR_MEM) { *paddr = offset; - else if (dev2unit(dev) == CDEV_MINOR_KMEM) - *paddr = vtophys(offset); - /* else panic! */ - return (0); + return (0); + } + return (-1); } diff --git a/sys/arm64/arm64/mem.c b/sys/arm64/arm64/mem.c index 9044fb3ba7f..e0ea4889cb5 100644 --- a/sys/arm64/arm64/mem.c +++ b/sys/arm64/arm64/mem.c @@ -123,10 +123,9 @@ int memmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr, int prot __unused, vm_memattr_t *memattr __unused) { - if (dev2unit(dev) == CDEV_MINOR_MEM) + if (dev2unit(dev) == CDEV_MINOR_MEM) { *paddr = offset; - else if (dev2unit(dev) == CDEV_MINOR_KMEM) - *paddr = vtophys(offset); - /* else panic! */ - return (0); + return (0); + } + return (-1); } diff --git a/sys/i386/i386/mem.c b/sys/i386/i386/mem.c index b036bd3ec3c..43fb99451f7 100644 --- a/sys/i386/i386/mem.c +++ b/sys/i386/i386/mem.c @@ -161,12 +161,11 @@ int memmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr, int prot __unused, vm_memattr_t *memattr __unused) { - if (dev2unit(dev) == CDEV_MINOR_MEM) + if (dev2unit(dev) == CDEV_MINOR_MEM) { *paddr = offset; - else if (dev2unit(dev) == CDEV_MINOR_KMEM) - *paddr = vtophys(offset); - /* else panic! */ - return (0); + return (0); + } + return (-1); } /* diff --git a/sys/powerpc/powerpc/mem.c b/sys/powerpc/powerpc/mem.c index a7fbfa3edf8..2bc89fd4b5a 100644 --- a/sys/powerpc/powerpc/mem.c +++ b/sys/powerpc/powerpc/mem.c @@ -179,8 +179,6 @@ memmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr, if (dev2unit(dev) == CDEV_MINOR_MEM) *paddr = offset; - else if (dev2unit(dev) == CDEV_MINOR_KMEM) - *paddr = vtophys(offset); else return (EFAULT);