default_pager.c revision 9513
19513Sdg#include <sys/param.h>
29513Sdg#include <sys/systm.h>
39513Sdg#include <sys/kernel.h>
49513Sdg#include <sys/malloc.h>
59513Sdg
69513Sdg#include <vm/vm.h>
79513Sdg#include <vm/vm_pager.h>
89513Sdg#include <vm/vm_page.h>
99513Sdg#include <vm/default_pager.h>
109513Sdg#include <vm/swap_pager.h>
119513Sdg
129513Sdg/*
139513Sdg * pagerops for OBJT_DEFAULT - "default pager".
149513Sdg */
159513Sdgstruct pagerops defaultpagerops = {
169513Sdg	NULL,
179513Sdg	default_pager_alloc,
189513Sdg	default_pager_dealloc,
199513Sdg	default_pager_getpages,
209513Sdg	default_pager_putpages,
219513Sdg	default_pager_haspage,
229513Sdg	NULL
239513Sdg};
249513Sdg
259513Sdg/*
269513Sdg * no_pager_alloc just returns an initialized object.
279513Sdg */
289513Sdgvm_object_t
299513Sdgdefault_pager_alloc(handle, size, prot, offset)
309513Sdg	void *handle;
319513Sdg	register vm_size_t size;
329513Sdg	vm_prot_t prot;
339513Sdg	vm_offset_t offset;
349513Sdg{
359513Sdg	if (handle != NULL)
369513Sdg		panic("default_pager_alloc: handle specified");
379513Sdg
389513Sdg	return vm_object_allocate(OBJT_DEFAULT, offset + size);
399513Sdg}
409513Sdg
419513Sdgvoid
429513Sdgdefault_pager_dealloc(object)
439513Sdg	vm_object_t object;
449513Sdg{
459513Sdg	/*
469513Sdg	 * OBJT_DEFAULT objects have no special resources allocated to them.
479513Sdg	 */
489513Sdg}
499513Sdg
509513Sdg/*
519513Sdg * The default pager has no backing store, so we always return
529513Sdg * failure.
539513Sdg */
549513Sdgint
559513Sdgdefault_pager_getpages(object, m, count, reqpage)
569513Sdg	vm_object_t object;
579513Sdg	vm_page_t *m;
589513Sdg	int count;
599513Sdg	int reqpage;
609513Sdg{
619513Sdg	return VM_PAGER_FAIL;
629513Sdg}
639513Sdg
649513Sdgint
659513Sdgdefault_pager_putpages(object, m, c, sync, rtvals)
669513Sdg	vm_object_t object;
679513Sdg	vm_page_t *m;
689513Sdg	int c;
699513Sdg	boolean_t sync;
709513Sdg	int *rtvals;
719513Sdg{
729513Sdg	int i;
739513Sdg
749513Sdg	/*
759513Sdg	 * Try to convert the object type into a OBJT_SWAP.
769513Sdg	 * If the swp structure allocation fails, convert it
779513Sdg	 * back to OBJT_DEFAULT and return failure. Otherwise
789513Sdg	 * pass this putpages to the swap pager.
799513Sdg	 */
809513Sdg	object->type = OBJT_SWAP;
819513Sdg
829513Sdg	if (swap_pager_swp_alloc(object, M_KERNEL) != 0) {
839513Sdg		object->type = OBJT_DEFAULT;
849513Sdg		for (i = 0; i < c; i++)
859513Sdg			rtvals[i] = VM_PAGER_FAIL;
869513Sdg		return VM_PAGER_FAIL;
879513Sdg	}
889513Sdg
899513Sdg	return swap_pager_putpages(object, m, c, sync, rtvals);
909513Sdg}
919513Sdg
929513Sdgboolean_t
939513Sdgdefault_pager_haspage(object, offset, before, after)
949513Sdg	vm_object_t object;
959513Sdg	vm_offset_t offset;
969513Sdg	int *before;
979513Sdg	int *after;
989513Sdg{
999513Sdg	return FALSE;
1009513Sdg}
101