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
This commit is contained in:
John Baldwin 2016-10-14 20:01:07 +00:00
parent 65de32210c
commit 31dc1e9681
5 changed files with 15 additions and 21 deletions

View file

@ -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);
}
/*

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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);
}
/*

View file

@ -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);