-#define SET_NEXT_PAGE(m,n) ((m)->pageq.next = (struct queue_entry *) (n))
-
-#if MACH_ASSERT
-int vm_page_verify_contiguous(
- vm_page_t pages,
- unsigned int npages);
-#endif /* MACH_ASSERT */
-
-cpm_counter(unsigned int vpfls_pages_handled = 0;)
-cpm_counter(unsigned int vpfls_head_insertions = 0;)
-cpm_counter(unsigned int vpfls_tail_insertions = 0;)
-cpm_counter(unsigned int vpfls_general_insertions = 0;)
-cpm_counter(unsigned int vpfc_failed = 0;)
-cpm_counter(unsigned int vpfc_satisfied = 0;)
-
-/*
- * Sort free list by ascending physical address,
- * using a not-particularly-bright sort algorithm.
- * Caller holds vm_page_queue_free_lock.
- */
-static void
-vm_page_free_list_sort(void)
-{
- vm_page_t sort_list;
- vm_page_t sort_list_end;
- vm_page_t m, m1, *prev, next_m;
- vm_offset_t addr;
-#if MACH_ASSERT
- unsigned int npages;
- int old_free_count;
-#endif /* MACH_ASSERT */
-
-#if MACH_ASSERT
- /*
- * Verify pages in the free list..
- */
- npages = 0;
- for (m = vm_page_queue_free; m != VM_PAGE_NULL; m = NEXT_PAGE(m))
- ++npages;
- if (npages != vm_page_free_count)
- panic("vm_sort_free_list: prelim: npages %d free_count %d",
- npages, vm_page_free_count);
- old_free_count = vm_page_free_count;
-#endif /* MACH_ASSERT */
-
- sort_list = sort_list_end = vm_page_queue_free;
- m = NEXT_PAGE(vm_page_queue_free);
- SET_NEXT_PAGE(vm_page_queue_free, VM_PAGE_NULL);
- cpm_counter(vpfls_pages_handled = 0);
- while (m != VM_PAGE_NULL) {
- cpm_counter(++vpfls_pages_handled);
- next_m = NEXT_PAGE(m);
- if (m->phys_addr < sort_list->phys_addr) {
- cpm_counter(++vpfls_head_insertions);
- SET_NEXT_PAGE(m, sort_list);
- sort_list = m;
- } else if (m->phys_addr > sort_list_end->phys_addr) {
- cpm_counter(++vpfls_tail_insertions);
- SET_NEXT_PAGE(sort_list_end, m);
- SET_NEXT_PAGE(m, VM_PAGE_NULL);
- sort_list_end = m;
- } else {
- cpm_counter(++vpfls_general_insertions);
- /* general sorted list insertion */
- prev = &sort_list;
- for (m1=sort_list; m1!=VM_PAGE_NULL; m1=NEXT_PAGE(m1)) {
- if (m1->phys_addr > m->phys_addr) {
- if (*prev != m1)
- panic("vm_sort_free_list: ugh");
- SET_NEXT_PAGE(m, *prev);
- *prev = m;
- break;
- }
- prev = (vm_page_t *) &m1->pageq.next;
- }
- }
- m = next_m;
- }
-
-#if MACH_ASSERT
- /*
- * Verify that pages are sorted into ascending order.
- */
- for (m = sort_list, npages = 0; m != VM_PAGE_NULL; m = NEXT_PAGE(m)) {
- if (m != sort_list &&
- m->phys_addr <= addr) {
- printf("m 0x%x addr 0x%x\n", m, addr);
- panic("vm_sort_free_list");
- }
- addr = m->phys_addr;
- ++npages;
- }
- if (old_free_count != vm_page_free_count)
- panic("vm_sort_free_list: old_free %d free_count %d",
- old_free_count, vm_page_free_count);
- if (npages != vm_page_free_count)
- panic("vm_sort_free_list: npages %d free_count %d",
- npages, vm_page_free_count);
-#endif /* MACH_ASSERT */
-
- vm_page_queue_free = sort_list;
-}
-
-