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