summaryrefslogtreecommitdiffstats
path: root/sys/vm/device_pager.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2011-03-11 07:07:48 +0000
committeralc <alc@FreeBSD.org>2011-03-11 07:07:48 +0000
commit9e6c31231192f42e2e7ef7c517968078924034de (patch)
treef38e7ae9369d58189815b91348c43b326cdb6944 /sys/vm/device_pager.c
parentd268e58dd43207d9af61a36e076fae3fa4069bd6 (diff)
downloadFreeBSD-src-9e6c31231192f42e2e7ef7c517968078924034de.zip
FreeBSD-src-9e6c31231192f42e2e7ef7c517968078924034de.tar.gz
Eliminate duplication of the fake page code and zone by the device and sg
pagers. Reviewed by: jhb
Diffstat (limited to 'sys/vm/device_pager.c')
-rw-r--r--sys/vm/device_pager.c64
1 files changed, 3 insertions, 61 deletions
diff --git a/sys/vm/device_pager.c b/sys/vm/device_pager.c
index 442eb80..f2131dd 100644
--- a/sys/vm/device_pager.c
+++ b/sys/vm/device_pager.c
@@ -67,13 +67,6 @@ static struct pagerlst dev_pager_object_list;
/* protect list manipulation */
static struct mtx dev_pager_mtx;
-
-static uma_zone_t fakepg_zone;
-
-static vm_page_t dev_pager_getfake(vm_paddr_t, vm_memattr_t);
-static void dev_pager_putfake(vm_page_t);
-static void dev_pager_updatefake(vm_page_t, vm_paddr_t, vm_memattr_t);
-
struct pagerops devicepagerops = {
.pgo_init = dev_pager_init,
.pgo_alloc = dev_pager_alloc,
@@ -88,9 +81,6 @@ dev_pager_init()
{
TAILQ_INIT(&dev_pager_object_list);
mtx_init(&dev_pager_mtx, "dev_pager list", NULL, MTX_DEF);
- fakepg_zone = uma_zcreate("DP fakepg", sizeof(struct vm_page),
- NULL, NULL, NULL, NULL, UMA_ALIGN_PTR,
- UMA_ZONE_NOFREE|UMA_ZONE_VM);
}
/*
@@ -199,7 +189,7 @@ dev_pager_dealloc(object)
*/
while ((m = TAILQ_FIRST(&object->un_pager.devp.devp_pglist)) != NULL) {
TAILQ_REMOVE(&object->un_pager.devp.devp_pglist, m, pageq);
- dev_pager_putfake(m);
+ vm_page_putfake(m);
}
}
@@ -250,7 +240,7 @@ dev_pager_getpages(object, m, count, reqpage)
* the new physical address.
*/
VM_OBJECT_LOCK(object);
- dev_pager_updatefake(page, paddr, memattr);
+ vm_page_updatefake(page, paddr, memattr);
if (count > 1) {
for (i = 0; i < count; i++) {
@@ -266,7 +256,7 @@ dev_pager_getpages(object, m, count, reqpage)
* Replace the passed in reqpage page with our own fake page and
* free up the all of the original pages.
*/
- page = dev_pager_getfake(paddr, memattr);
+ page = vm_page_getfake(paddr, memattr);
VM_OBJECT_LOCK(object);
TAILQ_INSERT_TAIL(&object->un_pager.devp.devp_pglist, page, pageq);
for (i = 0; i < count; i++) {
@@ -305,51 +295,3 @@ dev_pager_haspage(object, pindex, before, after)
*after = 0;
return (TRUE);
}
-
-/*
- * Create a fictitious page with the specified physical address and memory
- * attribute. The memory attribute is the only the machine-dependent aspect
- * of a fictitious page that must be initialized.
- */
-static vm_page_t
-dev_pager_getfake(vm_paddr_t paddr, vm_memattr_t memattr)
-{
- vm_page_t m;
-
- m = uma_zalloc(fakepg_zone, M_WAITOK | M_ZERO);
- m->phys_addr = paddr;
- m->queue = PQ_NONE;
- /* Fictitious pages don't use "segind". */
- m->flags = PG_FICTITIOUS;
- /* Fictitious pages don't use "order" or "pool". */
- m->oflags = VPO_BUSY;
- m->wire_count = 1;
- pmap_page_set_memattr(m, memattr);
- return (m);
-}
-
-/*
- * Release a fictitious page.
- */
-static void
-dev_pager_putfake(vm_page_t m)
-{
-
- if (!(m->flags & PG_FICTITIOUS))
- panic("dev_pager_putfake: bad page");
- uma_zfree(fakepg_zone, m);
-}
-
-/*
- * Update the given fictitious page to the specified physical address and
- * memory attribute.
- */
-static void
-dev_pager_updatefake(vm_page_t m, vm_paddr_t paddr, vm_memattr_t memattr)
-{
-
- if (!(m->flags & PG_FICTITIOUS))
- panic("dev_pager_updatefake: bad page");
- m->phys_addr = paddr;
- pmap_page_set_memattr(m, memattr);
-}
OpenPOWER on IntegriCloud