From: Matthew Dillon Date: Tue, 14 Jun 2005 17:16:00 +0000 (+0000) Subject: Add additional sanity checks, remove unused arguments to vm_page_startup(). X-Git-Url: https://gitweb.dragonflybsd.org/~syl/dragonfly.git/commitdiff_plain/26bcc0c0a2f1d9c7c86cd9d137b7de7a7761048c Add additional sanity checks, remove unused arguments to vm_page_startup(). --- diff --git a/sys/vm/vm_init.c b/sys/vm/vm_init.c index 34aa9d85ed..e55069107f 100644 --- a/sys/vm/vm_init.c +++ b/sys/vm/vm_init.c @@ -62,7 +62,7 @@ * rights to redistribute these changes. * * $FreeBSD: src/sys/vm/vm_init.c,v 1.20 1999/10/29 18:09:29 phk Exp $ - * $DragonFly: src/sys/vm/vm_init.c,v 1.7 2004/05/31 17:06:41 dillon Exp $ + * $DragonFly: src/sys/vm/vm_init.c,v 1.8 2005/06/14 17:16:00 dillon Exp $ */ /* @@ -105,7 +105,7 @@ vm_mem_init(void *dummy) */ vm_set_page_size(); - virtual_avail = vm_page_startup(avail_start, avail_end, virtual_avail); + virtual_avail = vm_page_startup(virtual_avail); /* * Initialize other VM packages */ diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index ed1fd3911c..93521f8a8e 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -35,7 +35,7 @@ * * from: @(#)vm_page.c 7.4 (Berkeley) 5/7/91 * $FreeBSD: src/sys/vm/vm_page.c,v 1.147.2.18 2002/03/10 05:03:19 alc Exp $ - * $DragonFly: src/sys/vm/vm_page.c,v 1.30 2005/06/02 20:57:21 swildner Exp $ + * $DragonFly: src/sys/vm/vm_page.c,v 1.31 2005/06/14 17:16:00 dillon Exp $ */ /* @@ -167,6 +167,7 @@ vm_add_new_page(vm_paddr_t pa) m->flags = 0; m->pc = (pa >> PAGE_SHIFT) & PQ_L2_MASK; m->queue = m->pc + PQ_FREE; + KKASSERT(m->dirty == 0); vpq = &vm_page_queues[m->queue]; if (vpq->flipflop) @@ -187,9 +188,14 @@ vm_add_new_page(vm_paddr_t pa) * Allocates memory for the page cells, and for the object/offset-to-page * hash table headers. Each page cell is initialized and placed on the * free list. + * + * starta/enda represents the range of physical memory addresses available + * for use (skipping memory already used by the kernel), subject to + * phys_avail[]. Note that phys_avail[] has already mapped out memory + * already in use by the kernel. */ vm_offset_t -vm_page_startup(vm_offset_t starta, vm_offset_t enda, vm_offset_t vaddr) +vm_page_startup(vm_offset_t vaddr) { vm_offset_t mapped; struct vm_page **bucket; @@ -200,8 +206,6 @@ vm_page_startup(vm_offset_t starta, vm_offset_t enda, vm_offset_t vaddr) vm_paddr_t pa; int nblocks; vm_paddr_t last_pa; - - /* the biggest memory array is the second group of pages */ vm_paddr_t end; vm_paddr_t biggestone, biggestsize; @@ -263,7 +267,9 @@ vm_page_startup(vm_offset_t starta, vm_offset_t enda, vm_offset_t vaddr) vm_page_hash_mask = vm_page_bucket_count - 1; /* - * Validate these addresses. + * Cut a chunk out of the largest block of physical memory, + * moving its end point down to accomodate the hash table and + * vm_page_array. */ new_end = end - vm_page_bucket_count * sizeof(struct vm_page *); new_end = trunc_page(new_end); @@ -826,6 +832,8 @@ loop: * a critical section. */ KASSERT(m != NULL, ("vm_page_alloc(): missing page on free queue\n")); + KASSERT(m->dirty == 0, + ("vm_page_alloc: free/cache page %p was dirty", m)); /* * Remove from free queue @@ -847,8 +855,6 @@ loop: m->act_count = 0; m->busy = 0; m->valid = 0; - KASSERT(m->dirty == 0, - ("vm_page_alloc: free/cache page %p was dirty", m)); /* * vm_page_insert() is safe prior to the crit_exit(). Note also that diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h index ec7e9cb81e..b633e37738 100644 --- a/sys/vm/vm_page.h +++ b/sys/vm/vm_page.h @@ -62,7 +62,7 @@ * rights to redistribute these changes. * * $FreeBSD: src/sys/vm/vm_page.h,v 1.75.2.8 2002/03/06 01:07:09 dillon Exp $ - * $DragonFly: src/sys/vm/vm_page.h,v 1.19 2005/06/02 20:57:21 swildner Exp $ + * $DragonFly: src/sys/vm/vm_page.h,v 1.20 2005/06/14 17:16:00 dillon Exp $ */ /* @@ -406,7 +406,7 @@ void vm_page_insert (vm_page_t, vm_object_t, vm_pindex_t); vm_page_t vm_page_lookup (vm_object_t, vm_pindex_t); void vm_page_remove (vm_page_t); void vm_page_rename (vm_page_t, vm_object_t, vm_pindex_t); -vm_offset_t vm_page_startup (vm_offset_t, vm_offset_t, vm_offset_t); +vm_offset_t vm_page_startup (vm_offset_t); vm_page_t vm_add_new_page (vm_paddr_t pa); void vm_page_unmanage (vm_page_t); void vm_page_unwire (vm_page_t, int); @@ -559,13 +559,16 @@ vm_page_sleep_busy(vm_page_t m, int also_m_busy, const char *msg) * Make page all dirty */ static __inline void -vm_page_dirty(vm_page_t m) +_vm_page_dirty(vm_page_t m, const char *info) { - KASSERT(m->queue - m->pc != PQ_CACHE, - ("vm_page_dirty: page in cache!")); + int pqtype = m->queue - m->pc; + KASSERT(pqtype != PQ_CACHE && pqtype != PQ_FREE, + ("vm_page_dirty: page in free/cache queue!")); m->dirty = VM_PAGE_BITS_ALL; } +#define vm_page_dirty(m) _vm_page_dirty(m, __FUNCTION__) + /* * Set page to not be dirty. Note: does not clear pmap modify bits . */