diff options
-rw-r--r-- | sys/vm/vm_page.c | 24 | ||||
-rw-r--r-- | sys/vm/vm_page.h | 9 | ||||
-rw-r--r-- | sys/vm/vm_pageq.c | 21 |
3 files changed, 24 insertions, 30 deletions
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index 5141708..c7466ed 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -1041,12 +1041,9 @@ vm_page_activate(vm_page_t m) vm_pageq_remove(m); if (m->wire_count == 0 && (m->flags & PG_UNMANAGED) == 0) { - m->queue = PQ_ACTIVE; - vm_page_queues[PQ_ACTIVE].lcnt++; - TAILQ_INSERT_TAIL(&vm_page_queues[PQ_ACTIVE].pl, m, pageq); if (m->act_count < ACT_INIT) m->act_count = ACT_INIT; - cnt.v_active_count++; + vm_pageq_enqueue(PQ_ACTIVE, m); } } else { if (m->act_count < ACT_INIT) @@ -1311,17 +1308,11 @@ vm_page_unwire(vm_page_t m, int activate) cnt.v_wire_count--; if (m->flags & PG_UNMANAGED) { ; - } else if (activate) { - TAILQ_INSERT_TAIL(&vm_page_queues[PQ_ACTIVE].pl, m, pageq); - m->queue = PQ_ACTIVE; - vm_page_queues[PQ_ACTIVE].lcnt++; - cnt.v_active_count++; - } else { + } else if (activate) + vm_pageq_enqueue(PQ_ACTIVE, m); + else { vm_page_flag_clear(m, PG_WINATCFLS); - TAILQ_INSERT_TAIL(&vm_page_queues[PQ_INACTIVE].pl, m, pageq); - m->queue = PQ_INACTIVE; - vm_page_queues[PQ_INACTIVE].lcnt++; - cnt.v_inactive_count++; + vm_pageq_enqueue(PQ_INACTIVE, m); } } } else { @@ -1451,10 +1442,7 @@ vm_page_cache(vm_page_t m) } s = splvm(); vm_pageq_remove_nowakeup(m); - m->queue = PQ_CACHE + m->pc; - vm_page_queues[m->queue].lcnt++; - TAILQ_INSERT_TAIL(&vm_page_queues[m->queue].pl, m, pageq); - cnt.v_cache_count++; + vm_pageq_enqueue(PQ_CACHE + m->pc, m); vm_page_free_wakeup(); splx(s); } diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h index 2e41cf4..d956616 100644 --- a/sys/vm/vm_page.h +++ b/sys/vm/vm_page.h @@ -334,13 +334,13 @@ void vm_page_free_zero(vm_page_t m); int vm_page_sleep_busy(vm_page_t m, int also_m_busy, const char *msg); void vm_page_dirty(vm_page_t m); void vm_page_undirty(vm_page_t m); -vm_page_t vm_page_list_find(int basequeue, int index, boolean_t prefer_zero); void vm_page_wakeup(vm_page_t m); void vm_pageq_init(void); struct vpgqueues *vm_pageq_aquire(int queue); void vm_pageq_release(struct vpgqueues *vpq); vm_page_t vm_pageq_add_new_page(vm_offset_t pa); +void vm_pageq_enqueue(int queue, vm_page_t m); void vm_pageq_remove_nowakeup(vm_page_t m); void vm_pageq_remove(vm_page_t m); vm_page_t vm_pageq_find(int basequeue, int index, boolean_t prefer_zero); @@ -359,12 +359,9 @@ 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_page_t vm_add_new_page (vm_offset_t pa); void vm_page_unmanage (vm_page_t); void vm_page_unwire (vm_page_t, int); void vm_page_wire (vm_page_t); -void vm_page_unqueue (vm_page_t); -void vm_page_unqueue_nowakeup (vm_page_t); void vm_page_set_validclean (vm_page_t, int, int); void vm_page_set_dirty (vm_page_t, int, int); void vm_page_clear_dirty (vm_page_t, int, int); @@ -372,10 +369,6 @@ void vm_page_set_invalid (vm_page_t, int, int); int vm_page_is_valid (vm_page_t, int, int); void vm_page_test_dirty (vm_page_t); int vm_page_bits (int, int); -#if 0 -int vm_page_sleep(vm_page_t m, char *msg, char *busy); -int vm_page_asleep(vm_page_t m, char *msg, char *busy); -#endif void vm_page_zero_invalid(vm_page_t m, boolean_t setvalid); void vm_page_free_toq(vm_page_t m); void vm_page_zero_idle_wakeup(void); diff --git a/sys/vm/vm_pageq.c b/sys/vm/vm_pageq.c index 2e47538..c590bcd 100644 --- a/sys/vm/vm_pageq.c +++ b/sys/vm/vm_pageq.c @@ -82,6 +82,22 @@ vm_pageq_requeue(vm_page_t m) } /* + * vm_pageq_enqueue: + * + */ +void +vm_pageq_enqueue(int queue, vm_page_t m) +{ + struct vpgqueues *vpq; + + vpq = &vm_page_queues[queue]; + m->queue = queue; + TAILQ_INSERT_TAIL(&vpq->pl, m, pageq); + ++*vpq->cnt; + ++vpq->lcnt; +} + +/* * vm_add_new_page: * * Add a new page to the freelist for use by the system. @@ -95,14 +111,11 @@ vm_pageq_add_new_page(vm_offset_t pa) GIANT_REQUIRED; ++cnt.v_page_count; - ++cnt.v_free_count; m = PHYS_TO_VM_PAGE(pa); m->phys_addr = pa; m->flags = 0; m->pc = (pa >> PAGE_SHIFT) & PQ_L2_MASK; - m->queue = m->pc + PQ_FREE; - TAILQ_INSERT_TAIL(&vm_page_queues[m->queue].pl, m, pageq); - vm_page_queues[m->queue].lcnt++; + vm_pageq_enqueue(m->pc + PQ_FREE, m); return (m); } |