Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/phys_pager.c
Show First 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | |||||
static struct mtx phys_pager_mtx; | static struct mtx phys_pager_mtx; | ||||
static int default_phys_pager_getpages(vm_object_t object, vm_page_t *m, | static int default_phys_pager_getpages(vm_object_t object, vm_page_t *m, | ||||
int count, int *rbehind, int *rahead); | int count, int *rbehind, int *rahead); | ||||
static int default_phys_pager_populate(vm_object_t object, vm_pindex_t pidx, | static int default_phys_pager_populate(vm_object_t object, vm_pindex_t pidx, | ||||
int fault_type, vm_prot_t max_prot, vm_pindex_t *first, vm_pindex_t *last); | int fault_type, vm_prot_t max_prot, vm_pindex_t *first, vm_pindex_t *last); | ||||
static boolean_t default_phys_pager_haspage(vm_object_t object, | static boolean_t default_phys_pager_haspage(vm_object_t object, | ||||
vm_pindex_t pindex, int *before, int *after); | vm_pindex_t pindex, int *before, int *after); | ||||
struct phys_pager_ops default_phys_pg_ops = { | const struct phys_pager_ops default_phys_pg_ops = { | ||||
.phys_pg_getpages = default_phys_pager_getpages, | .phys_pg_getpages = default_phys_pager_getpages, | ||||
.phys_pg_populate = default_phys_pager_populate, | .phys_pg_populate = default_phys_pager_populate, | ||||
.phys_pg_haspage = default_phys_pager_haspage, | .phys_pg_haspage = default_phys_pager_haspage, | ||||
.phys_pg_ctor = NULL, | .phys_pg_ctor = NULL, | ||||
.phys_pg_dtor = NULL, | .phys_pg_dtor = NULL, | ||||
}; | }; | ||||
static void | static void | ||||
phys_pager_init(void) | phys_pager_init(void) | ||||
{ | { | ||||
TAILQ_INIT(&phys_pager_object_list); | TAILQ_INIT(&phys_pager_object_list); | ||||
mtx_init(&phys_pager_mtx, "phys_pager list", NULL, MTX_DEF); | mtx_init(&phys_pager_mtx, "phys_pager list", NULL, MTX_DEF); | ||||
} | } | ||||
vm_object_t | vm_object_t | ||||
phys_pager_allocate(void *handle, struct phys_pager_ops *ops, void *data, | phys_pager_allocate(void *handle, const struct phys_pager_ops *ops, void *data, | ||||
vm_ooffset_t size, vm_prot_t prot, vm_ooffset_t foff, struct ucred *cred) | vm_ooffset_t size, vm_prot_t prot, vm_ooffset_t foff, struct ucred *cred) | ||||
{ | { | ||||
vm_object_t object, object1; | vm_object_t object, object1; | ||||
vm_pindex_t pindex; | vm_pindex_t pindex; | ||||
bool init; | bool init; | ||||
/* | /* | ||||
* Offset should be page aligned. | * Offset should be page aligned. | ||||
▲ Show 20 Lines • Show All 207 Lines • ▼ Show 20 Lines | |||||
static boolean_t | static boolean_t | ||||
phys_pager_haspage(vm_object_t object, vm_pindex_t pindex, int *before, | phys_pager_haspage(vm_object_t object, vm_pindex_t pindex, int *before, | ||||
int *after) | int *after) | ||||
{ | { | ||||
return (object->un_pager.phys.ops->phys_pg_haspage(object, pindex, | return (object->un_pager.phys.ops->phys_pg_haspage(object, pindex, | ||||
before, after)); | before, after)); | ||||
} | } | ||||
struct pagerops physpagerops = { | const struct pagerops physpagerops = { | ||||
.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, | ||||
.pgo_getpages = phys_pager_getpages, | .pgo_getpages = phys_pager_getpages, | ||||
.pgo_putpages = phys_pager_putpages, | .pgo_putpages = phys_pager_putpages, | ||||
.pgo_haspage = phys_pager_haspage, | .pgo_haspage = phys_pager_haspage, | ||||
.pgo_populate = phys_pager_populate, | .pgo_populate = phys_pager_populate, | ||||
}; | }; |