Changeset View
Changeset View
Standalone View
Standalone View
head/sys/vm/vm_pager.h
Show First 20 Lines • Show All 55 Lines • ▼ Show 20 Lines | |||||
typedef void pgo_getpages_iodone_t(void *, vm_page_t *, int, int); | typedef void pgo_getpages_iodone_t(void *, vm_page_t *, int, int); | ||||
typedef int pgo_getpages_async_t(vm_object_t, vm_page_t *, int, int *, int *, | typedef int pgo_getpages_async_t(vm_object_t, vm_page_t *, int, int *, int *, | ||||
pgo_getpages_iodone_t, void *); | pgo_getpages_iodone_t, void *); | ||||
typedef void pgo_putpages_t(vm_object_t, vm_page_t *, int, int, int *); | typedef void pgo_putpages_t(vm_object_t, vm_page_t *, int, int, int *); | ||||
typedef boolean_t pgo_haspage_t(vm_object_t, vm_pindex_t, int *, int *); | typedef boolean_t pgo_haspage_t(vm_object_t, vm_pindex_t, int *, int *); | ||||
typedef int pgo_populate_t(vm_object_t, vm_pindex_t, int, vm_prot_t, | typedef int pgo_populate_t(vm_object_t, vm_pindex_t, int, vm_prot_t, | ||||
vm_pindex_t *, vm_pindex_t *); | vm_pindex_t *, vm_pindex_t *); | ||||
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); | |||||
struct pagerops { | struct pagerops { | ||||
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; | ||||
/* Operations for specialized writecount handling */ | |||||
pgo_writecount_t *pgo_update_writecount; | |||||
pgo_writecount_t *pgo_release_writecount; | |||||
}; | }; | ||||
extern struct pagerops defaultpagerops; | extern struct pagerops defaultpagerops; | ||||
extern struct pagerops swappagerops; | extern struct pagerops swappagerops; | ||||
extern struct pagerops vnodepagerops; | extern struct pagerops vnodepagerops; | ||||
extern struct pagerops devicepagerops; | extern struct pagerops devicepagerops; | ||||
extern struct pagerops physpagerops; | extern struct pagerops physpagerops; | ||||
extern struct pagerops sgpagerops; | extern struct pagerops sgpagerops; | ||||
▲ Show 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | |||||
*/ | */ | ||||
static __inline void | static __inline void | ||||
vm_pager_page_unswapped(vm_page_t m) | vm_pager_page_unswapped(vm_page_t m) | ||||
{ | { | ||||
VM_OBJECT_ASSERT_LOCKED(m->object); | VM_OBJECT_ASSERT_LOCKED(m->object); | ||||
if (pagertab[m->object->type]->pgo_pageunswapped) | if (pagertab[m->object->type]->pgo_pageunswapped) | ||||
(*pagertab[m->object->type]->pgo_pageunswapped)(m); | (*pagertab[m->object->type]->pgo_pageunswapped)(m); | ||||
} | |||||
static __inline void | |||||
vm_pager_update_writecount(vm_object_t object, vm_offset_t start, | |||||
vm_offset_t end) | |||||
{ | |||||
if (pagertab[object->type]->pgo_update_writecount) | |||||
pagertab[object->type]->pgo_update_writecount(object, start, | |||||
end); | |||||
} | |||||
static __inline void | |||||
vm_pager_release_writecount(vm_object_t object, vm_offset_t start, | |||||
vm_offset_t end) | |||||
{ | |||||
if (pagertab[object->type]->pgo_release_writecount) | |||||
pagertab[object->type]->pgo_release_writecount(object, start, | |||||
end); | |||||
} | } | ||||
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); | ||||
int (*cdev_pg_populate)(vm_object_t vm_obj, vm_pindex_t pidx, | int (*cdev_pg_populate)(vm_object_t vm_obj, vm_pindex_t pidx, | ||||
int fault_type, vm_prot_t max_prot, vm_pindex_t *first, | int fault_type, vm_prot_t max_prot, vm_pindex_t *first, | ||||
vm_pindex_t *last); | vm_pindex_t *last); | ||||
Show All 13 Lines |