vm_object_kvme_type(): reimplement by embedding kvme_type into pagerops
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D30168
This commit is contained in:
parent
eb09408085
commit
00a3fe968b
@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include <sys/proc.h>
|
#include <sys/proc.h>
|
||||||
#include <sys/resourcevar.h>
|
#include <sys/resourcevar.h>
|
||||||
#include <sys/rwlock.h>
|
#include <sys/rwlock.h>
|
||||||
|
#include <sys/user.h>
|
||||||
|
|
||||||
#include <vm/vm.h>
|
#include <vm/vm.h>
|
||||||
#include <vm/vm_object.h>
|
#include <vm/vm_object.h>
|
||||||
@ -71,6 +72,7 @@ static boolean_t default_pager_haspage(vm_object_t, vm_pindex_t, int *,
|
|||||||
* object is converted to swap pager type.
|
* object is converted to swap pager type.
|
||||||
*/
|
*/
|
||||||
const struct pagerops defaultpagerops = {
|
const struct pagerops defaultpagerops = {
|
||||||
|
.pgo_kvme_type = KVME_TYPE_DEFAULT,
|
||||||
.pgo_alloc = default_pager_alloc,
|
.pgo_alloc = default_pager_alloc,
|
||||||
.pgo_dealloc = default_pager_dealloc,
|
.pgo_dealloc = default_pager_dealloc,
|
||||||
.pgo_getpages = default_pager_getpages,
|
.pgo_getpages = default_pager_getpages,
|
||||||
|
@ -48,6 +48,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <sys/rwlock.h>
|
#include <sys/rwlock.h>
|
||||||
#include <sys/sx.h>
|
#include <sys/sx.h>
|
||||||
|
#include <sys/user.h>
|
||||||
#include <sys/vmmeter.h>
|
#include <sys/vmmeter.h>
|
||||||
|
|
||||||
#include <vm/vm.h>
|
#include <vm/vm.h>
|
||||||
@ -75,6 +76,7 @@ static struct pagerlst dev_pager_object_list;
|
|||||||
static struct mtx dev_pager_mtx;
|
static struct mtx dev_pager_mtx;
|
||||||
|
|
||||||
const struct pagerops devicepagerops = {
|
const struct pagerops devicepagerops = {
|
||||||
|
.pgo_kvme_type = KVME_TYPE_DEVICE,
|
||||||
.pgo_init = dev_pager_init,
|
.pgo_init = dev_pager_init,
|
||||||
.pgo_alloc = dev_pager_alloc,
|
.pgo_alloc = dev_pager_alloc,
|
||||||
.pgo_dealloc = dev_pager_dealloc,
|
.pgo_dealloc = dev_pager_dealloc,
|
||||||
@ -84,6 +86,7 @@ const struct pagerops devicepagerops = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const struct pagerops mgtdevicepagerops = {
|
const struct pagerops mgtdevicepagerops = {
|
||||||
|
.pgo_kvme_type = KVME_TYPE_MGTDEVICE,
|
||||||
.pgo_alloc = dev_pager_alloc,
|
.pgo_alloc = dev_pager_alloc,
|
||||||
.pgo_dealloc = dev_pager_dealloc,
|
.pgo_dealloc = dev_pager_dealloc,
|
||||||
.pgo_getpages = dev_pager_getpages,
|
.pgo_getpages = dev_pager_getpages,
|
||||||
|
@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <sys/rwlock.h>
|
#include <sys/rwlock.h>
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
|
#include <sys/user.h>
|
||||||
|
|
||||||
#include <vm/vm.h>
|
#include <vm/vm.h>
|
||||||
#include <vm/vm_param.h>
|
#include <vm/vm_param.h>
|
||||||
@ -299,6 +300,7 @@ phys_pager_haspage(vm_object_t object, vm_pindex_t pindex, int *before,
|
|||||||
}
|
}
|
||||||
|
|
||||||
const struct pagerops physpagerops = {
|
const struct pagerops physpagerops = {
|
||||||
|
.pgo_kvme_type = KVME_TYPE_PHYS,
|
||||||
.pgo_init = phys_pager_init,
|
.pgo_init = phys_pager_init,
|
||||||
.pgo_alloc = phys_pager_alloc,
|
.pgo_alloc = phys_pager_alloc,
|
||||||
.pgo_dealloc = phys_pager_dealloc,
|
.pgo_dealloc = phys_pager_dealloc,
|
||||||
|
@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include <sys/mutex.h>
|
#include <sys/mutex.h>
|
||||||
#include <sys/rwlock.h>
|
#include <sys/rwlock.h>
|
||||||
#include <sys/sglist.h>
|
#include <sys/sglist.h>
|
||||||
|
#include <sys/user.h>
|
||||||
#include <sys/vmmeter.h>
|
#include <sys/vmmeter.h>
|
||||||
|
|
||||||
#include <vm/vm.h>
|
#include <vm/vm.h>
|
||||||
@ -60,6 +61,7 @@ static boolean_t sg_pager_haspage(vm_object_t, vm_pindex_t, int *,
|
|||||||
int *);
|
int *);
|
||||||
|
|
||||||
const struct pagerops sgpagerops = {
|
const struct pagerops sgpagerops = {
|
||||||
|
.pgo_kvme_type = KVME_TYPE_SG,
|
||||||
.pgo_alloc = sg_pager_alloc,
|
.pgo_alloc = sg_pager_alloc,
|
||||||
.pgo_dealloc = sg_pager_dealloc,
|
.pgo_dealloc = sg_pager_dealloc,
|
||||||
.pgo_getpages = sg_pager_getpages,
|
.pgo_getpages = sg_pager_getpages,
|
||||||
|
@ -99,6 +99,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include <sys/sysproto.h>
|
#include <sys/sysproto.h>
|
||||||
#include <sys/systm.h>
|
#include <sys/systm.h>
|
||||||
#include <sys/sx.h>
|
#include <sys/sx.h>
|
||||||
|
#include <sys/user.h>
|
||||||
#include <sys/vmmeter.h>
|
#include <sys/vmmeter.h>
|
||||||
#include <sys/vnode.h>
|
#include <sys/vnode.h>
|
||||||
|
|
||||||
@ -442,6 +443,7 @@ static void swap_pager_freespace(vm_object_t object, vm_pindex_t start,
|
|||||||
vm_size_t size);
|
vm_size_t size);
|
||||||
|
|
||||||
const struct pagerops swappagerops = {
|
const struct pagerops swappagerops = {
|
||||||
|
.pgo_kvme_type = KVME_TYPE_SWAP,
|
||||||
.pgo_init = swap_pager_init, /* early system initialization of pager */
|
.pgo_init = swap_pager_init, /* early system initialization of pager */
|
||||||
.pgo_alloc = swap_pager_alloc, /* allocate an OBJT_SWAP object */
|
.pgo_alloc = swap_pager_alloc, /* allocate an OBJT_SWAP object */
|
||||||
.pgo_dealloc = swap_pager_dealloc, /* deallocate an OBJT_SWAP object */
|
.pgo_dealloc = swap_pager_dealloc, /* deallocate an OBJT_SWAP object */
|
||||||
@ -456,6 +458,7 @@ const struct pagerops swappagerops = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const struct pagerops swaptmpfspagerops = {
|
const struct pagerops swaptmpfspagerops = {
|
||||||
|
.pgo_kvme_type = KVME_TYPE_VNODE,
|
||||||
.pgo_alloc = swap_tmpfs_pager_alloc,
|
.pgo_alloc = swap_tmpfs_pager_alloc,
|
||||||
.pgo_dealloc = swap_pager_dealloc,
|
.pgo_dealloc = swap_pager_dealloc,
|
||||||
.pgo_getpages = swap_pager_getpages,
|
.pgo_getpages = swap_pager_getpages,
|
||||||
|
@ -2469,41 +2469,6 @@ vm_object_busy_wait(vm_object_t obj, const char *wmesg)
|
|||||||
(void)blockcount_sleep(&obj->busy, NULL, wmesg, PVM);
|
(void)blockcount_sleep(&obj->busy, NULL, wmesg, PVM);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Return the kvme type of the given object.
|
|
||||||
* If vpp is not NULL, set it to the object's vm_object_vnode() or NULL.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
vm_object_kvme_type(vm_object_t object, struct vnode **vpp)
|
|
||||||
{
|
|
||||||
|
|
||||||
VM_OBJECT_ASSERT_LOCKED(object);
|
|
||||||
if (vpp != NULL)
|
|
||||||
*vpp = vm_object_vnode(object);
|
|
||||||
switch (object->type) {
|
|
||||||
case OBJT_DEFAULT:
|
|
||||||
return (KVME_TYPE_DEFAULT);
|
|
||||||
case OBJT_VNODE:
|
|
||||||
return (KVME_TYPE_VNODE);
|
|
||||||
case OBJT_SWAP:
|
|
||||||
return (KVME_TYPE_SWAP);
|
|
||||||
case OBJT_SWAP_TMPFS:
|
|
||||||
return (KVME_TYPE_VNODE);
|
|
||||||
case OBJT_DEVICE:
|
|
||||||
return (KVME_TYPE_DEVICE);
|
|
||||||
case OBJT_PHYS:
|
|
||||||
return (KVME_TYPE_PHYS);
|
|
||||||
case OBJT_DEAD:
|
|
||||||
return (KVME_TYPE_DEAD);
|
|
||||||
case OBJT_SG:
|
|
||||||
return (KVME_TYPE_SG);
|
|
||||||
case OBJT_MGTDEVICE:
|
|
||||||
return (KVME_TYPE_MGTDEVICE);
|
|
||||||
default:
|
|
||||||
return (KVME_TYPE_UNKNOWN);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
sysctl_vm_object_list(SYSCTL_HANDLER_ARGS)
|
sysctl_vm_object_list(SYSCTL_HANDLER_ARGS)
|
||||||
{
|
{
|
||||||
|
@ -79,6 +79,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include <sys/ucred.h>
|
#include <sys/ucred.h>
|
||||||
#include <sys/malloc.h>
|
#include <sys/malloc.h>
|
||||||
#include <sys/rwlock.h>
|
#include <sys/rwlock.h>
|
||||||
|
#include <sys/user.h>
|
||||||
|
|
||||||
#include <vm/vm.h>
|
#include <vm/vm.h>
|
||||||
#include <vm/vm_param.h>
|
#include <vm/vm_param.h>
|
||||||
@ -155,6 +156,7 @@ dead_pager_getvp(vm_object_t object, struct vnode **vpp, bool *vp_heldp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const struct pagerops deadpagerops = {
|
static const struct pagerops deadpagerops = {
|
||||||
|
.pgo_kvme_type = KVME_TYPE_DEAD,
|
||||||
.pgo_alloc = dead_pager_alloc,
|
.pgo_alloc = dead_pager_alloc,
|
||||||
.pgo_dealloc = dead_pager_dealloc,
|
.pgo_dealloc = dead_pager_dealloc,
|
||||||
.pgo_getpages = dead_pager_getpages,
|
.pgo_getpages = dead_pager_getpages,
|
||||||
@ -530,3 +532,17 @@ vm_object_mightbedirty(vm_object_t object)
|
|||||||
return (false);
|
return (false);
|
||||||
return (method(object));
|
return (method(object));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the kvme type of the given object.
|
||||||
|
* If vpp is not NULL, set it to the object's vm_object_vnode() or NULL.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
vm_object_kvme_type(vm_object_t object, struct vnode **vpp)
|
||||||
|
{
|
||||||
|
VM_OBJECT_ASSERT_LOCKED(object);
|
||||||
|
|
||||||
|
if (vpp != NULL)
|
||||||
|
*vpp = vm_object_vnode(object);
|
||||||
|
return (pagertab[object->type]->pgo_kvme_type);
|
||||||
|
}
|
||||||
|
@ -71,6 +71,7 @@ typedef void pgo_freespace_t(vm_object_t object, vm_pindex_t start,
|
|||||||
vm_size_t size);
|
vm_size_t size);
|
||||||
|
|
||||||
struct pagerops {
|
struct pagerops {
|
||||||
|
int pgo_kvme_type;
|
||||||
pgo_init_t *pgo_init; /* Initialize pager. */
|
pgo_init_t *pgo_init; /* Initialize pager. */
|
||||||
pgo_alloc_t *pgo_alloc; /* Allocate pager. */
|
pgo_alloc_t *pgo_alloc; /* Allocate pager. */
|
||||||
pgo_dealloc_t *pgo_dealloc; /* Disassociate. */
|
pgo_dealloc_t *pgo_dealloc; /* Disassociate. */
|
||||||
|
@ -74,6 +74,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include <sys/rwlock.h>
|
#include <sys/rwlock.h>
|
||||||
#include <sys/sf_buf.h>
|
#include <sys/sf_buf.h>
|
||||||
#include <sys/domainset.h>
|
#include <sys/domainset.h>
|
||||||
|
#include <sys/user.h>
|
||||||
|
|
||||||
#include <machine/atomic.h>
|
#include <machine/atomic.h>
|
||||||
|
|
||||||
@ -108,6 +109,7 @@ static void vnode_pager_release_writecount(vm_object_t, vm_offset_t,
|
|||||||
static void vnode_pager_getvp(vm_object_t, struct vnode **, bool *);
|
static void vnode_pager_getvp(vm_object_t, struct vnode **, bool *);
|
||||||
|
|
||||||
const struct pagerops vnodepagerops = {
|
const struct pagerops vnodepagerops = {
|
||||||
|
.pgo_kvme_type = KVME_TYPE_VNODE,
|
||||||
.pgo_alloc = vnode_pager_alloc,
|
.pgo_alloc = vnode_pager_alloc,
|
||||||
.pgo_dealloc = vnode_pager_dealloc,
|
.pgo_dealloc = vnode_pager_dealloc,
|
||||||
.pgo_getpages = vnode_pager_getpages,
|
.pgo_getpages = vnode_pager_getpages,
|
||||||
|
Loading…
Reference in New Issue
Block a user