Module Name: src
Committed By: uebayasi
Date: Mon Feb 1 08:16:32 UTC 2010
Modified Files:
src/sys/uvm: uvm_fault.c
Log Message:
Split uvm_fault() into 2 more functions, uvm_fault_check() and
uvm_fault_upper_lookup(). Omit unnecessary arguments passed around.
To generate a diff of this commit:
cvs rdiff -u -r1.140 -r1.141 src/sys/uvm/uvm_fault.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/uvm/uvm_fault.c
diff -u src/sys/uvm/uvm_fault.c:1.140 src/sys/uvm/uvm_fault.c:1.141
--- src/sys/uvm/uvm_fault.c:1.140 Mon Feb 1 06:56:22 2010
+++ src/sys/uvm/uvm_fault.c Mon Feb 1 08:16:32 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: uvm_fault.c,v 1.140 2010/02/01 06:56:22 uebayasi Exp $ */
+/* $NetBSD: uvm_fault.c,v 1.141 2010/02/01 08:16:32 uebayasi Exp $ */
/*
*
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.140 2010/02/01 06:56:22 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.141 2010/02/01 08:16:32 uebayasi Exp $");
#include "opt_uvmhist.h"
@@ -707,41 +707,35 @@
struct vm_anon *anon_spare;
};
+static int
+uvm_fault_check(
+ struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
+ struct vm_anon ***ranons, struct vm_page ***rpages);
typedef int
uvm_fault_subfunc_t(
- struct uvm_faultinfo *ufi,
- struct uvm_faultctx *flt,
- struct vm_amap *amap, struct uvm_object *uobj,
- struct vm_anon **anons_store, struct vm_anon **anons,
- struct vm_page **pages, struct vm_page *uobjpage);
+ struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
+ struct vm_anon **anons, struct vm_page **pages);
+static uvm_fault_subfunc_t uvm_fault_upper_lookup;
+static uvm_fault_subfunc_t uvm_fault_upper;
static uvm_fault_subfunc_t uvm_fault_lower;
static uvm_fault_subfunc_t uvm_fault_lower_special;
+static uvm_fault_subfunc_t uvm_fault_lower_generic_lookup;
static uvm_fault_subfunc_t uvm_fault_lower_generic;
static uvm_fault_subfunc_t uvm_fault_lower_generic1;
-static uvm_fault_subfunc_t uvm_fault_upper;
static uvm_fault_subfunc_t uvm_fault_lower_generic2;
-static void
-uvm_fault_lower_generic_lookup(
- struct uvm_faultinfo *ufi,
- struct uvm_faultctx *flt,
- struct vm_amap *amap, struct uvm_object *uobj,
- struct vm_anon **anons_store, struct vm_anon **anons,
- struct vm_page **pages, struct vm_page **ruobjpage);
int
uvm_fault_internal(struct vm_map *orig_map, vaddr_t vaddr,
vm_prot_t access_type, int fault_flag)
{
struct uvm_faultinfo ufi;
- struct vm_amap *amap;
- struct uvm_object *uobj;
struct uvm_faultctx flt = {
.access_type = access_type,
.wire_fault = (fault_flag & UVM_FAULT_WIRE) != 0,
.maxprot = (fault_flag & UVM_FAULT_MAXPROT) != 0,
};
struct vm_anon *anons_store[UVM_MAXRANGE], **anons;
- struct vm_page *pages[UVM_MAXRANGE], *uobjpage = NULL;
+ struct vm_page *pages_store[UVM_MAXRANGE], **pages;
int error;
UVMHIST_FUNC("uvm_fault"); UVMHIST_CALLED(maphist);
@@ -768,22 +762,25 @@
*/
ReFault:
- goto uvm_fault_prepare;
-uvm_fault_prepare_done:
+ anons = anons_store;
+ pages = pages_store;
- goto uvm_fault_upper_lookup;
-uvm_fault_upper_lookup_done:
+ error = uvm_fault_check(&ufi, &flt, &anons, &pages);
+ if (error == ERESTART)
+ goto ReFault;
+ else if (error)
+ goto done;
+
+ error = uvm_fault_upper_lookup(&ufi, &flt, anons, pages);
+ if (error == ERESTART)
+ goto ReFault;
+ else if (error)
+ goto done;
if (flt.shadowed == true)
- error = uvm_fault_upper(
- &ufi, &flt,
- amap, uobj, anons_store, anons,
- pages, uobjpage);
+ error = uvm_fault_upper(&ufi, &flt, anons, pages);
else
- error = uvm_fault_lower(
- &ufi, &flt,
- amap, uobj, anons_store, anons,
- pages, uobjpage);
+ error = uvm_fault_lower(&ufi, &flt, anons, pages);
if (error == ERESTART)
goto ReFault;
@@ -794,9 +791,15 @@
uvm_anfree(flt.anon_spare);
}
return error;
+}
-uvm_fault_prepare:
- {
+int
+uvm_fault_check(
+ struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
+ struct vm_anon ***ranons, struct vm_page ***rpages)
+{
+ struct vm_amap *amap;
+ struct uvm_object *uobj;
vm_prot_t check_prot;
int nback, nforw;
@@ -804,20 +807,19 @@
* lookup and lock the maps
*/
- if (uvmfault_lookup(&ufi, false) == false) {
+ if (uvmfault_lookup(ufi, false) == false) {
UVMHIST_LOG(maphist, "<- no mapping @ 0x%x", vaddr, 0,0,0);
- error = EFAULT;
- goto done;
+ return EFAULT;
}
/* locked: maps(read) */
#ifdef DIAGNOSTIC
- if ((ufi.map->flags & VM_MAP_PAGEABLE) == 0) {
+ if ((ufi->map->flags & VM_MAP_PAGEABLE) == 0) {
printf("Page fault on non-pageable map:\n");
- printf("ufi.map = %p\n", ufi.map);
- printf("ufi.orig_map = %p\n", ufi.orig_map);
- printf("ufi.orig_rvaddr = 0x%lx\n", (u_long) ufi.orig_rvaddr);
- panic("uvm_fault: (ufi.map->flags & VM_MAP_PAGEABLE) == 0");
+ printf("ufi->map = %p\n", ufi->map);
+ printf("ufi->orig_map = %p\n", ufi->orig_map);
+ printf("ufi->orig_rvaddr = 0x%lx\n", (u_long) ufi->orig_rvaddr);
+ panic("uvm_fault: (ufi->map->flags & VM_MAP_PAGEABLE) == 0");
}
#endif
@@ -825,31 +827,30 @@
* check protection
*/
- check_prot = (fault_flag & UVM_FAULT_MAXPROT) ?
- ufi.entry->max_protection : ufi.entry->protection;
- if ((check_prot & flt.access_type) != flt.access_type) {
+ check_prot = flt->maxprot ?
+ ufi->entry->max_protection : ufi->entry->protection;
+ if ((check_prot & flt->access_type) != flt->access_type) {
UVMHIST_LOG(maphist,
"<- protection failure (prot=0x%x, access=0x%x)",
- ufi.entry->protection, flt.access_type, 0, 0);
- uvmfault_unlockmaps(&ufi, false);
- error = EACCES;
- goto done;
+ ufi->entry->protection, flt->access_type, 0, 0);
+ uvmfault_unlockmaps(ufi, false);
+ return EACCES;
}
/*
* "enter_prot" is the protection we want to enter the page in at.
* for certain pages (e.g. copy-on-write pages) this protection can
- * be more strict than ufi.entry->protection. "wired" means either
+ * be more strict than ufi->entry->protection. "wired" means either
* the entry is wired or we are fault-wiring the pg.
*/
- flt.enter_prot = ufi.entry->protection;
- flt.wired = VM_MAPENT_ISWIRED(ufi.entry) || flt.wire_fault;
- if (flt.wired) {
- flt.access_type = flt.enter_prot; /* full access for wired */
- flt.cow_now = (check_prot & VM_PROT_WRITE) != 0;
+ flt->enter_prot = ufi->entry->protection;
+ flt->wired = VM_MAPENT_ISWIRED(ufi->entry) || flt->wire_fault;
+ if (flt->wired) {
+ flt->access_type = flt->enter_prot; /* full access for wired */
+ flt->cow_now = (check_prot & VM_PROT_WRITE) != 0;
} else {
- flt.cow_now = (flt.access_type & VM_PROT_WRITE) != 0;
+ flt->cow_now = (flt->access_type & VM_PROT_WRITE) != 0;
}
/*
@@ -859,16 +860,16 @@
* needs_copy]).
*/
- if (UVM_ET_ISNEEDSCOPY(ufi.entry)) {
- if (flt.cow_now || (ufi.entry->object.uvm_obj == NULL)) {
- KASSERT((fault_flag & UVM_FAULT_MAXPROT) == 0);
+ if (UVM_ET_ISNEEDSCOPY(ufi->entry)) {
+ if (flt->cow_now || (ufi->entry->object.uvm_obj == NULL)) {
+ KASSERT(!flt->maxprot);
/* need to clear */
UVMHIST_LOG(maphist,
" need to clear needs_copy and refault",0,0,0,0);
- uvmfault_unlockmaps(&ufi, false);
- uvmfault_amapcopy(&ufi);
+ uvmfault_unlockmaps(ufi, false);
+ uvmfault_amapcopy(ufi);
uvmexp.fltamcopy++;
- goto ReFault;
+ return ERESTART;
} else {
@@ -877,7 +878,7 @@
* needs_copy is still true
*/
- flt.enter_prot &= ~VM_PROT_WRITE;
+ flt->enter_prot &= ~VM_PROT_WRITE;
}
}
@@ -885,8 +886,8 @@
* identify the players
*/
- amap = ufi.entry->aref.ar_amap; /* upper layer */
- uobj = ufi.entry->object.uvm_obj; /* lower layer */
+ amap = ufi->entry->aref.ar_amap; /* upper layer */
+ uobj = ufi->entry->object.uvm_obj; /* lower layer */
/*
* check for a case 0 fault. if nothing backing the entry then
@@ -894,10 +895,9 @@
*/
if (amap == NULL && uobj == NULL) {
- uvmfault_unlockmaps(&ufi, false);
+ uvmfault_unlockmaps(ufi, false);
UVMHIST_LOG(maphist,"<- no backing store, no overlay",0,0,0,0);
- error = EFAULT;
- goto done;
+ return EFAULT;
}
/*
@@ -907,42 +907,42 @@
* ReFault we will disable this by setting "narrow" to true.
*/
- if (flt.narrow == false) {
+ if (flt->narrow == false) {
/* wide fault (!narrow) */
- KASSERT(uvmadvice[ufi.entry->advice].advice ==
- ufi.entry->advice);
- nback = MIN(uvmadvice[ufi.entry->advice].nback,
- (ufi.orig_rvaddr - ufi.entry->start) >> PAGE_SHIFT);
- flt.startva = ufi.orig_rvaddr - (nback << PAGE_SHIFT);
- nforw = MIN(uvmadvice[ufi.entry->advice].nforw,
- ((ufi.entry->end - ufi.orig_rvaddr) >>
+ KASSERT(uvmadvice[ufi->entry->advice].advice ==
+ ufi->entry->advice);
+ nback = MIN(uvmadvice[ufi->entry->advice].nback,
+ (ufi->orig_rvaddr - ufi->entry->start) >> PAGE_SHIFT);
+ flt->startva = ufi->orig_rvaddr - (nback << PAGE_SHIFT);
+ nforw = MIN(uvmadvice[ufi->entry->advice].nforw,
+ ((ufi->entry->end - ufi->orig_rvaddr) >>
PAGE_SHIFT) - 1);
/*
* note: "-1" because we don't want to count the
* faulting page as forw
*/
- flt.npages = nback + nforw + 1;
- flt.centeridx = nback;
+ flt->npages = nback + nforw + 1;
+ flt->centeridx = nback;
- flt.narrow = true; /* ensure only once per-fault */
+ flt->narrow = true; /* ensure only once per-fault */
} else {
/* narrow fault! */
nback = nforw = 0;
- flt.startva = ufi.orig_rvaddr;
- flt.npages = 1;
- flt.centeridx = 0;
+ flt->startva = ufi->orig_rvaddr;
+ flt->npages = 1;
+ flt->centeridx = 0;
}
/* offset from entry's start to pgs' start */
- const voff_t eoff = flt.startva - ufi.entry->start;
+ const voff_t eoff = flt->startva - ufi->entry->start;
/* locked: maps(read) */
UVMHIST_LOG(maphist, " narrow=%d, back=%d, forw=%d, startva=0x%x",
- flt.narrow, nback, nforw, flt.startva);
- UVMHIST_LOG(maphist, " entry=0x%x, amap=0x%x, obj=0x%x", ufi.entry,
+ flt->narrow, nback, nforw, flt->startva);
+ UVMHIST_LOG(maphist, " entry=0x%x, amap=0x%x, obj=0x%x", ufi->entry,
amap, uobj, 0);
/*
@@ -951,10 +951,9 @@
if (amap) {
amap_lock(amap);
- anons = anons_store;
- amap_lookups(&ufi.entry->aref, eoff, anons, flt.npages);
+ amap_lookups(&ufi->entry->aref, eoff, *ranons, flt->npages);
} else {
- anons = NULL; /* to be safe */
+ *ranons = NULL; /* to be safe */
}
/* locked: maps(read), amap(if there) */
@@ -965,19 +964,19 @@
* now and then forget about them (for the rest of the fault).
*/
- if (ufi.entry->advice == MADV_SEQUENTIAL && nback != 0) {
+ if (ufi->entry->advice == MADV_SEQUENTIAL && nback != 0) {
UVMHIST_LOG(maphist, " MADV_SEQUENTIAL: flushing backpages",
0,0,0,0);
/* flush back-page anons? */
if (amap)
- uvmfault_anonflush(anons, nback);
+ uvmfault_anonflush(*ranons, nback);
/* flush object? */
if (uobj) {
voff_t uoff;
- uoff = ufi.entry->offset + eoff;
+ uoff = ufi->entry->offset + eoff;
mutex_enter(&uobj->vmobjlock);
(void) (uobj->pgops->pgo_put)(uobj, uoff, uoff +
(nback << PAGE_SHIFT), PGO_DEACTIVATE);
@@ -985,21 +984,30 @@
/* now forget about the backpages */
if (amap)
- anons += nback;
- flt.startva += (nback << PAGE_SHIFT);
- flt.npages -= nback;
- flt.centeridx = 0;
+ *ranons += nback;
+#if 0
+ /* XXXUEBS */
+ if (uobj)
+ *rpages += nback;
+#endif
+ flt->startva += (nback << PAGE_SHIFT);
+ flt->npages -= nback;
+ flt->centeridx = 0;
}
- }
- goto uvm_fault_prepare_done;
-
/*
* => startva is fixed
* => npages is fixed
*/
-uvm_fault_upper_lookup:
- {
+ return 0;
+}
+
+int
+uvm_fault_upper_lookup(
+ struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
+ struct vm_anon **anons, struct vm_page **pages)
+{
+ struct vm_amap *amap = ufi->entry->aref.ar_amap;
int lcv;
vaddr_t currva;
@@ -1012,17 +1020,17 @@
* we go.
*/
- currva = flt.startva;
- flt.shadowed = false;
- for (lcv = 0 ; lcv < flt.npages ; lcv++, currva += PAGE_SIZE) {
+ currva = flt->startva;
+ flt->shadowed = false;
+ for (lcv = 0 ; lcv < flt->npages ; lcv++, currva += PAGE_SIZE) {
struct vm_anon *anon;
/*
* dont play with VAs that are already mapped
* except for center)
*/
- if (lcv != flt.centeridx &&
- pmap_extract(ufi.orig_map->pmap, currva, NULL)) {
+ if (lcv != flt->centeridx &&
+ pmap_extract(ufi->orig_map->pmap, currva, NULL)) {
pages[lcv] = PGO_DONTCARE;
continue;
}
@@ -1040,8 +1048,8 @@
*/
pages[lcv] = PGO_DONTCARE;
- if (lcv == flt.centeridx) { /* save center for later! */
- flt.shadowed = true;
+ if (lcv == flt->centeridx) { /* save center for later! */
+ flt->shadowed = true;
continue;
}
anon = anons[lcv];
@@ -1054,7 +1062,7 @@
mutex_exit(&uvm_pageqlock);
UVMHIST_LOG(maphist,
" MAPPING: n anon: pm=0x%x, va=0x%x, pg=0x%x",
- ufi.orig_map->pmap, currva, anon->an_page, 0);
+ ufi->orig_map->pmap, currva, anon->an_page, 0);
uvmexp.fltnamap++;
/*
@@ -1063,22 +1071,22 @@
* that we enter these right now.
*/
- (void) pmap_enter(ufi.orig_map->pmap, currva,
+ (void) pmap_enter(ufi->orig_map->pmap, currva,
VM_PAGE_TO_PHYS(anon->an_page),
- (anon->an_ref > 1) ? (flt.enter_prot & ~VM_PROT_WRITE) :
- flt.enter_prot,
+ (anon->an_ref > 1) ? (flt->enter_prot & ~VM_PROT_WRITE) :
+ flt->enter_prot,
PMAP_CANFAIL |
- (VM_MAPENT_ISWIRED(ufi.entry) ? PMAP_WIRED : 0));
+ (VM_MAPENT_ISWIRED(ufi->entry) ? PMAP_WIRED : 0));
}
- pmap_update(ufi.orig_map->pmap);
+ pmap_update(ufi->orig_map->pmap);
mutex_exit(&anon->an_lock);
}
/* locked: maps(read), amap(if there) */
KASSERT(amap == NULL || mutex_owned(&amap->am_l));
/* (shadowed == true) if there is an anon at the faulting address */
- UVMHIST_LOG(maphist, " shadowed=%d, will_get=%d", flt.shadowed,
- (uobj && flt.shadowed == false),0,0);
+ UVMHIST_LOG(maphist, " shadowed=%d, will_get=%d", flt->shadowed,
+ (uobj && flt->shadowed == false),0,0);
/*
* note that if we are really short of RAM we could sleep in the above
@@ -1087,17 +1095,16 @@
* XXX Actually, that is bad; pmap_enter() should just fail in that
* XXX case. --thorpej
*/
- }
- goto uvm_fault_upper_lookup_done;
+
+ return 0;
}
static int
uvm_fault_lower(
struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
- struct vm_amap *amap, struct uvm_object *uobj,
- struct vm_anon **anons_store, struct vm_anon **anons,
- struct vm_page **pages, struct vm_page *uobjpage)
+ struct vm_anon **anons, struct vm_page **pages)
{
+ struct uvm_object *uobj = ufi->entry->object.uvm_obj;
int error;
/*
@@ -1109,15 +1116,9 @@
*/
if (uobj && uobj->pgops->pgo_fault != NULL) {
- error = uvm_fault_lower_special(
- ufi, flt,
- amap, uobj, anons_store, anons,
- pages, uobjpage);
+ error = uvm_fault_lower_special(ufi, flt, anons, pages);
} else {
- error = uvm_fault_lower_generic(
- ufi, flt,
- amap, uobj, anons_store, anons,
- pages, uobjpage);
+ error = uvm_fault_lower_generic(ufi, flt, anons, pages);
}
return error;
}
@@ -1125,10 +1126,9 @@
static int
uvm_fault_lower_special(
struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
- struct vm_amap *amap, struct uvm_object *uobj,
- struct vm_anon **anons_store, struct vm_anon **anons,
- struct vm_page **pages, struct vm_page *uobjpage)
+ struct vm_anon **anons, struct vm_page **pages)
{
+ struct uvm_object *uobj = ufi->entry->object.uvm_obj;
int error;
mutex_enter(&uobj->vmobjlock);
@@ -1150,10 +1150,9 @@
static int
uvm_fault_lower_generic(
struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
- struct vm_amap *amap, struct uvm_object *uobj,
- struct vm_anon **anons_store, struct vm_anon **anons,
- struct vm_page **pages, struct vm_page *uobjpage)
+ struct vm_anon **anons, struct vm_page **pages)
{
+ struct uvm_object *uobj = ufi->entry->object.uvm_obj;
/*
* now, if the desired page is not shadowed by the amap and we have
@@ -1165,29 +1164,21 @@
if (uobj == NULL) {
/* zero fill; don't care neighbor pages */
- uobjpage = NULL;
+ pages[flt->centeridx] = NULL;
} else {
- uvm_fault_lower_generic_lookup(
- ufi, flt,
- amap, uobj, anons_store, anons,
- pages, &uobjpage);
- }
- return uvm_fault_lower_generic1(
- ufi, flt,
- amap, uobj, anons_store, anons,
- pages, uobjpage);
+ uvm_fault_lower_generic_lookup(ufi, flt, anons, pages);
+ }
+ return uvm_fault_lower_generic1(ufi, flt, anons, pages);
}
-static void
+static int
uvm_fault_lower_generic_lookup(
struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
- struct vm_amap *amap, struct uvm_object *uobj,
- struct vm_anon **anons_store, struct vm_anon **anons,
- struct vm_page **pages, struct vm_page **ruobjpage)
+ struct vm_anon **anons, struct vm_page **pages)
{
+ struct uvm_object *uobj = ufi->entry->object.uvm_obj;
int lcv, gotpages;
vaddr_t currva;
- struct vm_page *uobjpage;
mutex_enter(&uobj->vmobjlock);
/* locked (!shadowed): maps(read), amap (if there), uobj */
@@ -1206,10 +1197,10 @@
* check for pages to map, if we got any
*/
- uobjpage = NULL;
-
- if (gotpages == 0)
- goto done;
+ if (gotpages == 0) {
+ pages[flt->centeridx] = NULL;
+ return 0;
+ }
currva = flt->startva;
for (lcv = 0; lcv < flt->npages;
@@ -1232,10 +1223,9 @@
*/
if (lcv == flt->centeridx) {
- uobjpage = curpg;
UVMHIST_LOG(maphist, " got uobjpage "
"(0x%x) with locked get",
- uobjpage, 0,0,0);
+ curpg, 0,0,0);
continue;
}
@@ -1288,17 +1278,17 @@
UVM_PAGE_OWN(curpg, NULL);
}
pmap_update(ufi->orig_map->pmap);
-done:
- *ruobjpage = uobjpage;
+ return 0;
}
static int
uvm_fault_lower_generic1(
struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
- struct vm_amap *amap, struct uvm_object *uobj,
- struct vm_anon **anons_store, struct vm_anon **anons,
- struct vm_page **pages, struct vm_page *uobjpage)
+ struct vm_anon **anons, struct vm_page **pages)
{
+ struct vm_amap *amap = ufi->entry->aref.ar_amap;
+ struct uvm_object *uobj = ufi->entry->object.uvm_obj;
+ struct vm_page *uobjpage = pages[flt->centeridx];
/* locked: maps(read), amap(if there), uobj(if !null), uobjpage(if !null) */
KASSERT(!flt->shadowed);
@@ -1325,19 +1315,16 @@
* redirect case 2: if we are not shadowed, go to case 2.
*/
- return uvm_fault_lower_generic2(
- ufi, flt,
- amap, uobj, anons_store, anons,
- pages, uobjpage);
+ return uvm_fault_lower_generic2(ufi, flt, anons, pages);
}
static int
uvm_fault_upper(
struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
- struct vm_amap *amap, struct uvm_object *uobj,
- struct vm_anon **anons_store, struct vm_anon **anons,
- struct vm_page **pages, struct vm_page *uobjpage)
+ struct vm_anon **anons, struct vm_page **pages)
{
+ struct vm_amap *amap = ufi->entry->aref.ar_amap;
+ struct uvm_object *uobj = ufi->entry->object.uvm_obj;
struct vm_anon *anon, *oanon;
int error;
@@ -1617,10 +1604,11 @@
static int
uvm_fault_lower_generic2(
struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
- struct vm_amap *amap, struct uvm_object *uobj,
- struct vm_anon **anons_store, struct vm_anon **anons,
- struct vm_page **pages, struct vm_page *uobjpage)
+ struct vm_anon **anons, struct vm_page **pages)
{
+ struct vm_amap *amap = ufi->entry->aref.ar_amap;
+ struct uvm_object *uobj = ufi->entry->object.uvm_obj;
+ struct vm_page *uobjpage = pages[flt->centeridx];
struct vm_anon *anon;
bool promote;
int error;