Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/vm_pager.c
Show First 20 Lines • Show All 160 Lines • ▼ Show 20 Lines | static const struct pagerops deadpagerops = { | ||||
.pgo_dealloc = dead_pager_dealloc, | .pgo_dealloc = dead_pager_dealloc, | ||||
.pgo_getpages = dead_pager_getpages, | .pgo_getpages = dead_pager_getpages, | ||||
.pgo_putpages = dead_pager_putpages, | .pgo_putpages = dead_pager_putpages, | ||||
.pgo_haspage = dead_pager_haspage, | .pgo_haspage = dead_pager_haspage, | ||||
.pgo_getvp = dead_pager_getvp, | .pgo_getvp = dead_pager_getvp, | ||||
}; | }; | ||||
const struct pagerops *pagertab[16] __read_mostly = { | const struct pagerops *pagertab[16] __read_mostly = { | ||||
[OBJT_DEFAULT] = &defaultpagerops, | |||||
[OBJT_SWAP] = &swappagerops, | [OBJT_SWAP] = &swappagerops, | ||||
[OBJT_VNODE] = &vnodepagerops, | [OBJT_VNODE] = &vnodepagerops, | ||||
[OBJT_DEVICE] = &devicepagerops, | [OBJT_DEVICE] = &devicepagerops, | ||||
[OBJT_PHYS] = &physpagerops, | [OBJT_PHYS] = &physpagerops, | ||||
[OBJT_DEAD] = &deadpagerops, | [OBJT_DEAD] = &deadpagerops, | ||||
[OBJT_SG] = &sgpagerops, | [OBJT_SG] = &sgpagerops, | ||||
[OBJT_MGTDEVICE] = &mgtdevicepagerops, | [OBJT_MGTDEVICE] = &mgtdevicepagerops, | ||||
}; | }; | ||||
static struct mtx pagertab_lock; | static struct mtx pagertab_lock; | ||||
void | void | ||||
vm_pager_init(void) | vm_pager_init(void) | ||||
{ | { | ||||
const struct pagerops **pgops; | const struct pagerops **pgops; | ||||
int i; | int i; | ||||
mtx_init(&pagertab_lock, "dynpag", NULL, MTX_DEF); | mtx_init(&pagertab_lock, "dynpag", NULL, MTX_DEF); | ||||
/* | /* | ||||
* Initialize known pagers | * Initialize known pagers | ||||
*/ | */ | ||||
for (i = 0; i < OBJT_FIRST_DYN; i++) { | for (i = 0; i < OBJT_FIRST_DYN; i++) { | ||||
pgops = &pagertab[i]; | pgops = &pagertab[i]; | ||||
if ((*pgops)->pgo_init != NULL) | if (*pgops != NULL && (*pgops)->pgo_init != NULL) | ||||
(*(*pgops)->pgo_init)(); | (*(*pgops)->pgo_init)(); | ||||
} | } | ||||
} | } | ||||
static int nswbuf_max; | static int nswbuf_max; | ||||
void | void | ||||
vm_pager_bufferinit(void) | vm_pager_bufferinit(void) | ||||
▲ Show 20 Lines • Show All 195 Lines • ▼ Show 20 Lines | |||||
int | int | ||||
vm_pager_alloc_dyn_type(struct pagerops *ops, int base_type) | vm_pager_alloc_dyn_type(struct pagerops *ops, int base_type) | ||||
{ | { | ||||
int res; | int res; | ||||
mtx_lock(&pagertab_lock); | mtx_lock(&pagertab_lock); | ||||
MPASS(base_type == -1 || | MPASS(base_type == -1 || | ||||
(base_type >= OBJT_DEFAULT && base_type < nitems(pagertab))); | (base_type >= OBJT_SWAP && base_type < nitems(pagertab))); | ||||
for (res = OBJT_FIRST_DYN; res < nitems(pagertab); res++) { | for (res = OBJT_FIRST_DYN; res < nitems(pagertab); res++) { | ||||
if (pagertab[res] == NULL) | if (pagertab[res] == NULL) | ||||
break; | break; | ||||
} | } | ||||
if (res == nitems(pagertab)) { | if (res == nitems(pagertab)) { | ||||
mtx_unlock(&pagertab_lock); | mtx_unlock(&pagertab_lock); | ||||
return (-1); | return (-1); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 206 Lines • Show Last 20 Lines |