Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/vm_pager.h
Show First 20 Lines • Show All 63 Lines • ▼ Show 20 Lines | |||||
typedef void pgo_pageunswapped_t(vm_page_t); | typedef void pgo_pageunswapped_t(vm_page_t); | ||||
typedef void pgo_writecount_t(vm_object_t, vm_offset_t, vm_offset_t); | typedef void pgo_writecount_t(vm_object_t, vm_offset_t, vm_offset_t); | ||||
typedef void pgo_set_writeable_dirty_t(vm_object_t); | typedef void pgo_set_writeable_dirty_t(vm_object_t); | ||||
typedef bool pgo_mightbedirty_t(vm_object_t); | typedef bool pgo_mightbedirty_t(vm_object_t); | ||||
typedef void pgo_getvp_t(vm_object_t object, struct vnode **vpp, | typedef void pgo_getvp_t(vm_object_t object, struct vnode **vpp, | ||||
bool *vp_heldp); | bool *vp_heldp); | ||||
typedef void pgo_freespace_t(vm_object_t object, vm_pindex_t start, | typedef void pgo_freespace_t(vm_object_t object, vm_pindex_t start, | ||||
vm_size_t size); | vm_size_t size); | ||||
typedef void pgo_page_inserted_t(vm_object_t object, vm_page_t m); | |||||
typedef void pgo_page_removed_t(vm_object_t object, vm_page_t m); | |||||
typedef boolean_t pgo_can_alloc_page_t(vm_object_t object, vm_pindex_t pindex); | |||||
struct pagerops { | struct pagerops { | ||||
int pgo_kvme_type; | 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. */ | ||||
pgo_getpages_t *pgo_getpages; /* Get (read) page. */ | pgo_getpages_t *pgo_getpages; /* Get (read) page. */ | ||||
pgo_getpages_async_t *pgo_getpages_async; /* Get page asyncly. */ | pgo_getpages_async_t *pgo_getpages_async; /* Get page asyncly. */ | ||||
pgo_putpages_t *pgo_putpages; /* Put (write) page. */ | pgo_putpages_t *pgo_putpages; /* Put (write) page. */ | ||||
pgo_haspage_t *pgo_haspage; /* Query page. */ | pgo_haspage_t *pgo_haspage; /* Query page. */ | ||||
pgo_populate_t *pgo_populate; /* Bulk spec pagein. */ | pgo_populate_t *pgo_populate; /* Bulk spec pagein. */ | ||||
pgo_pageunswapped_t *pgo_pageunswapped; | pgo_pageunswapped_t *pgo_pageunswapped; | ||||
pgo_writecount_t *pgo_update_writecount; | pgo_writecount_t *pgo_update_writecount; | ||||
pgo_writecount_t *pgo_release_writecount; | pgo_writecount_t *pgo_release_writecount; | ||||
pgo_set_writeable_dirty_t *pgo_set_writeable_dirty; | pgo_set_writeable_dirty_t *pgo_set_writeable_dirty; | ||||
pgo_mightbedirty_t *pgo_mightbedirty; | pgo_mightbedirty_t *pgo_mightbedirty; | ||||
pgo_getvp_t *pgo_getvp; | pgo_getvp_t *pgo_getvp; | ||||
pgo_freespace_t *pgo_freespace; | pgo_freespace_t *pgo_freespace; | ||||
pgo_page_inserted_t *pgo_page_inserted; | |||||
pgo_page_removed_t *pgo_page_removed; | |||||
pgo_can_alloc_page_t *pgo_can_alloc_page; | |||||
}; | }; | ||||
extern const struct pagerops defaultpagerops; | extern const struct pagerops defaultpagerops; | ||||
extern const struct pagerops swappagerops; | extern const struct pagerops swappagerops; | ||||
extern const struct pagerops vnodepagerops; | extern const struct pagerops vnodepagerops; | ||||
extern const struct pagerops devicepagerops; | extern const struct pagerops devicepagerops; | ||||
extern const struct pagerops physpagerops; | extern const struct pagerops physpagerops; | ||||
extern const struct pagerops sgpagerops; | extern const struct pagerops sgpagerops; | ||||
▲ Show 20 Lines • Show All 144 Lines • ▼ Show 20 Lines | |||||
vm_pager_freespace(vm_object_t object, vm_pindex_t start, | vm_pager_freespace(vm_object_t object, vm_pindex_t start, | ||||
vm_size_t size) | vm_size_t size) | ||||
{ | { | ||||
pgo_freespace_t *method; | pgo_freespace_t *method; | ||||
method = pagertab[object->type]->pgo_freespace; | method = pagertab[object->type]->pgo_freespace; | ||||
if (method != NULL) | if (method != NULL) | ||||
method(object, start, size); | method(object, start, size); | ||||
} | |||||
static __inline void | |||||
vm_pager_page_inserted(vm_object_t object, vm_page_t m) | |||||
{ | |||||
pgo_page_inserted_t *method; | |||||
method = pagertab[object->type]->pgo_page_inserted; | |||||
if (method != NULL) | |||||
method(object, m); | |||||
} | |||||
static __inline void | |||||
vm_pager_page_removed(vm_object_t object, vm_page_t m) | |||||
{ | |||||
pgo_page_removed_t *method; | |||||
method = pagertab[object->type]->pgo_page_removed; | |||||
if (method != NULL) | |||||
method(object, m); | |||||
} | |||||
static __inline bool | |||||
vm_pager_can_alloc_page(vm_object_t object, vm_pindex_t pindex) | |||||
{ | |||||
pgo_can_alloc_page_t *method; | |||||
method = pagertab[object->type]->pgo_can_alloc_page; | |||||
return (method != NULL ? method(object, pindex) : true); | |||||
} | } | ||||
int vm_pager_alloc_dyn_type(struct pagerops *ops, int base_type); | int vm_pager_alloc_dyn_type(struct pagerops *ops, int base_type); | ||||
void vm_pager_free_dyn_type(objtype_t type); | void vm_pager_free_dyn_type(objtype_t type); | ||||
struct cdev_pager_ops { | struct cdev_pager_ops { | ||||
int (*cdev_pg_fault)(vm_object_t vm_obj, vm_ooffset_t offset, | int (*cdev_pg_fault)(vm_object_t vm_obj, vm_ooffset_t offset, | ||||
int prot, vm_page_t *mres); | int prot, vm_page_t *mres); | ||||
Show All 33 Lines |