FreeBSD virtual memory subsystem code
phys_pager.c File Reference
#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/conf.h>
#include <sys/kernel.h>
#include <sys/lock.h>
#include <sys/proc.h>
#include <sys/mutex.h>
#include <sys/mman.h>
#include <sys/rwlock.h>
#include <sys/sysctl.h>
#include <sys/user.h>
#include <vm/vm.h>
#include <vm/vm_param.h>
#include <vm/vm_object.h>
#include <vm/vm_page.h>
#include <vm/vm_pageout.h>
#include <vm/vm_pager.h>
Include dependency graph for phys_pager.c:

Go to the source code of this file.

Macros

#define PHYSCLUSTER   1024
 
#define PHYSALLOC   16
 

Functions

 __FBSDID ("$FreeBSD$")
 
static int default_phys_pager_getpages (vm_object_t object, vm_page_t *m, int count, int *rbehind, int *rahead)
 
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)
 
static boolean_t default_phys_pager_haspage (vm_object_t object, vm_pindex_t pindex, int *before, int *after)
 
static void phys_pager_init (void)
 
vm_object_t 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)
 
static vm_object_t phys_pager_alloc (void *handle, vm_ooffset_t size, vm_prot_t prot, vm_ooffset_t foff, struct ucred *ucred)
 
static void phys_pager_dealloc (vm_object_t object)
 
static int phys_pager_getpages (vm_object_t object, vm_page_t *m, int count, int *rbehind, int *rahead)
 
 SYSCTL_INT (_vm, OID_AUTO, phys_pager_cluster, CTLFLAG_RWTUN, &phys_pager_cluster, 0, "prefault window size for phys pager")
 
static int 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)
 
static void phys_pager_putpages (vm_object_t object, vm_page_t *m, int count, boolean_t sync, int *rtvals)
 
static boolean_t phys_pager_haspage (vm_object_t object, vm_pindex_t pindex, int *before, int *after)
 

Variables

static struct pagerlst phys_pager_object_list
 
static struct mtx phys_pager_mtx
 
const struct phys_pager_ops default_phys_pg_ops
 
static int phys_pager_cluster = PHYSCLUSTER
 
const struct pagerops physpagerops
 

Macro Definition Documentation

◆ PHYSALLOC

#define PHYSALLOC   16

Definition at line 229 of file phys_pager.c.

◆ PHYSCLUSTER

#define PHYSCLUSTER   1024

Definition at line 216 of file phys_pager.c.

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ default_phys_pager_getpages()

static int default_phys_pager_getpages ( vm_object_t  object,
vm_page_t *  m,
int  count,
int *  rbehind,
int *  rahead 
)
static

Definition at line 177 of file phys_pager.c.

References PG_ZERO, pmap_zero_page(), vm_page_all_valid(), vm_page_none_valid(), vm_page_valid(), and VM_PAGER_OK.

Here is the call graph for this function:

◆ default_phys_pager_haspage()

static boolean_t default_phys_pager_haspage ( vm_object_t  object,
vm_pindex_t  pindex,
int *  before,
int *  after 
)
static

Definition at line 280 of file phys_pager.c.

References phys_pager_cluster.

◆ default_phys_pager_populate()

static int default_phys_pager_populate ( vm_object_t  object,
vm_pindex_t  pidx,
int fault_type  __unused,
vm_prot_t max_prot  __unused,
vm_pindex_t *  first,
vm_pindex_t *  last 
)
static

Definition at line 232 of file phys_pager.c.

References phys_pager_cluster, PHYSALLOC, vm_object::size, VM_ALLOC_COUNT, VM_ALLOC_NORMAL, vm_page_all_valid(), vm_page_grab(), vm_page_zero_invalid(), and VM_PAGER_OK.

Here is the call graph for this function:

◆ phys_pager_alloc()

static vm_object_t phys_pager_alloc ( void *  handle,
vm_ooffset_t  size,
vm_prot_t  prot,
vm_ooffset_t  foff,
struct ucred *  ucred 
)
static

Definition at line 149 of file phys_pager.c.

References default_phys_pg_ops, and phys_pager_allocate().

Here is the call graph for this function:

◆ phys_pager_allocate()

vm_object_t 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 
)

◆ phys_pager_dealloc()

static void phys_pager_dealloc ( vm_object_t  object)
static

◆ phys_pager_getpages()

static int phys_pager_getpages ( vm_object_t  object,
vm_page_t *  m,
int  count,
int *  rbehind,
int *  rahead 
)
static

Definition at line 201 of file phys_pager.c.

References vm_object::ops, vm_object::phys, and vm_object::un_pager.

◆ phys_pager_haspage()

static boolean_t phys_pager_haspage ( vm_object_t  object,
vm_pindex_t  pindex,
int *  before,
int *  after 
)
static

Definition at line 295 of file phys_pager.c.

References vm_object::ops, vm_object::phys, and vm_object::un_pager.

◆ phys_pager_init()

static void phys_pager_init ( void  )
static

Definition at line 70 of file phys_pager.c.

References phys_pager_mtx, and phys_pager_object_list.

◆ phys_pager_populate()

static int 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 
)
static

Definition at line 264 of file phys_pager.c.

References vm_object::ops, vm_object::phys, and vm_object::un_pager.

◆ phys_pager_putpages()

static void phys_pager_putpages ( vm_object_t  object,
vm_page_t *  m,
int  count,
boolean_t  sync,
int *  rtvals 
)
static

Definition at line 272 of file phys_pager.c.

◆ SYSCTL_INT()

SYSCTL_INT ( _vm  ,
OID_AUTO  ,
phys_pager_cluster  ,
CTLFLAG_RWTUN  ,
phys_pager_cluster,
,
"prefault window size for phys pager"   
)

Variable Documentation

◆ default_phys_pg_ops

const struct phys_pager_ops default_phys_pg_ops
Initial value:
= {
.phys_pg_getpages = default_phys_pager_getpages,
.phys_pg_populate = default_phys_pager_populate,
.phys_pg_haspage = default_phys_pager_haspage,
.phys_pg_ctor = NULL,
.phys_pg_dtor = NULL,
}
static int default_phys_pager_getpages(vm_object_t object, vm_page_t *m, int count, int *rbehind, int *rahead)
Definition: phys_pager.c:177
static boolean_t default_phys_pager_haspage(vm_object_t object, vm_pindex_t pindex, int *before, int *after)
Definition: phys_pager.c:280
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)
Definition: phys_pager.c:232

Definition at line 61 of file phys_pager.c.

Referenced by phys_pager_alloc(), and vm_object_init().

◆ phys_pager_cluster

int phys_pager_cluster = PHYSCLUSTER
static

Definition at line 218 of file phys_pager.c.

Referenced by default_phys_pager_haspage(), and default_phys_pager_populate().

◆ phys_pager_mtx

struct mtx phys_pager_mtx
static

Definition at line 53 of file phys_pager.c.

Referenced by phys_pager_allocate(), phys_pager_dealloc(), and phys_pager_init().

◆ phys_pager_object_list

struct pagerlst phys_pager_object_list
static

Definition at line 51 of file phys_pager.c.

Referenced by phys_pager_allocate(), phys_pager_dealloc(), and phys_pager_init().

◆ physpagerops

const struct pagerops physpagerops
Initial value:
= {
.pgo_kvme_type = KVME_TYPE_PHYS,
.pgo_init = phys_pager_init,
.pgo_alloc = phys_pager_alloc,
.pgo_dealloc = phys_pager_dealloc,
.pgo_getpages = phys_pager_getpages,
.pgo_putpages = phys_pager_putpages,
.pgo_haspage = phys_pager_haspage,
.pgo_populate = phys_pager_populate,
}
static vm_object_t phys_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot, vm_ooffset_t foff, struct ucred *ucred)
Definition: phys_pager.c:149
static void phys_pager_init(void)
Definition: phys_pager.c:70
static int phys_pager_getpages(vm_object_t object, vm_page_t *m, int count, int *rbehind, int *rahead)
Definition: phys_pager.c:201
static boolean_t phys_pager_haspage(vm_object_t object, vm_pindex_t pindex, int *before, int *after)
Definition: phys_pager.c:295
static void phys_pager_dealloc(vm_object_t object)
Definition: phys_pager.c:157
static int 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)
Definition: phys_pager.c:264
static void phys_pager_putpages(vm_object_t object, vm_page_t *m, int count, boolean_t sync, int *rtvals)
Definition: phys_pager.c:272

Definition at line 302 of file phys_pager.c.