diff --git a/sys/vm/device_pager.c b/sys/vm/device_pager.c index 48f4b3595947..655af9882bb3 100644 --- a/sys/vm/device_pager.c +++ b/sys/vm/device_pager.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)device_pager.c 8.1 (Berkeley) 6/11/93 - * $Id: device_pager.c,v 1.32 1998/10/13 08:24:42 dg Exp $ + * $Id: device_pager.c,v 1.33 1998/10/21 23:06:50 dg Exp $ */ #include <sys/param.h> @@ -50,6 +50,7 @@ #include <vm/vm_object.h> #include <vm/vm_page.h> #include <vm/vm_pager.h> +#include <vm/vm_zone.h> static void dev_pager_init __P((void)); static vm_object_t dev_pager_alloc __P((void *, vm_ooffset_t, vm_prot_t, @@ -64,8 +65,8 @@ static boolean_t dev_pager_haspage __P((vm_object_t, vm_pindex_t, int *, /* list of device pager objects */ static struct pagerlst dev_pager_object_list; -/* list of available vm_page_t's */ -static TAILQ_HEAD(, vm_page) dev_pager_fakelist; +static vm_zone_t fakepg_zone; +static struct vm_zone fakepg_zone_store; static vm_page_t dev_pager_getfake __P((vm_offset_t)); static void dev_pager_putfake __P((vm_page_t)); @@ -86,7 +87,8 @@ static void dev_pager_init() { TAILQ_INIT(&dev_pager_object_list); - TAILQ_INIT(&dev_pager_fakelist); + fakepg_zone = &fakepg_zone_store; + zinitna(fakepg_zone, NULL, "DP fakepg", sizeof(struct vm_page), 0, 0, 2); } static vm_object_t @@ -257,15 +259,7 @@ dev_pager_getfake(paddr) vm_page_t m; int i; - if (TAILQ_FIRST(&dev_pager_fakelist) == NULL) { - m = (vm_page_t) malloc(PAGE_SIZE * 2, M_VMPGDATA, M_WAITOK); - for (i = (PAGE_SIZE * 2) / sizeof(*m); i > 0; i--) { - TAILQ_INSERT_TAIL(&dev_pager_fakelist, m, pageq); - m++; - } - } - m = TAILQ_FIRST(&dev_pager_fakelist); - TAILQ_REMOVE(&dev_pager_fakelist, m, pageq); + m = zalloc(fakepg_zone); m->flags = PG_BUSY | PG_FICTITIOUS; m->valid = VM_PAGE_BITS_ALL; @@ -287,5 +281,5 @@ dev_pager_putfake(m) { if (!(m->flags & PG_FICTITIOUS)) panic("dev_pager_putfake: bad page"); - TAILQ_INSERT_TAIL(&dev_pager_fakelist, m, pageq); + zfree(fakepg_zone, m); }