kernel - Refactor cpu localization for VM page allocations
[dragonfly.git] / sys / vm / vm_page.c
1 /*
2  * (MPSAFE)
3  *
4  * Copyright (c) 1991 Regents of the University of California.
5  * All rights reserved.
6  *
7  * This code is derived from software contributed to Berkeley by
8  * The Mach Operating System project at Carnegie-Mellon University.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  * 3. Neither the name of the University nor the names of its contributors
19  *    may be used to endorse or promote products derived from this software
20  *    without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32  * SUCH DAMAGE.
33  *
34  *      from: @(#)vm_page.c     7.4 (Berkeley) 5/7/91
35  * $FreeBSD: src/sys/vm/vm_page.c,v 1.147.2.18 2002/03/10 05:03:19 alc Exp $
36  */
37
38 /*
39  * Copyright (c) 1987, 1990 Carnegie-Mellon University.
40  * All rights reserved.
41  *
42  * Authors: Avadis Tevanian, Jr., Michael Wayne Young
43  *
44  * Permission to use, copy, modify and distribute this software and
45  * its documentation is hereby granted, provided that both the copyright
46  * notice and this permission notice appear in all copies of the
47  * software, derivative works or modified versions, and any portions
48  * thereof, and that both notices appear in supporting documentation.
49  *
50  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
51  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
52  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
53  *
54  * Carnegie Mellon requests users of this software to return to
55  *
56  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
57  *  School of Computer Science
58  *  Carnegie Mellon University
59  *  Pittsburgh PA 15213-3890
60  *
61  * any improvements or extensions that they make and grant Carnegie the
62  * rights to redistribute these changes.
63  */
64 /*
65  * Resident memory management module.  The module manipulates 'VM pages'.
66  * A VM page is the core building block for memory management.
67  */
68
69 #include <sys/param.h>
70 #include <sys/systm.h>
71 #include <sys/malloc.h>
72 #include <sys/proc.h>
73 #include <sys/vmmeter.h>
74 #include <sys/vnode.h>
75 #include <sys/kernel.h>
76 #include <sys/alist.h>
77 #include <sys/sysctl.h>
78 #include <sys/cpu_topology.h>
79
80 #include <vm/vm.h>
81 #include <vm/vm_param.h>
82 #include <sys/lock.h>
83 #include <vm/vm_kern.h>
84 #include <vm/pmap.h>
85 #include <vm/vm_map.h>
86 #include <vm/vm_object.h>
87 #include <vm/vm_page.h>
88 #include <vm/vm_pageout.h>
89 #include <vm/vm_pager.h>
90 #include <vm/vm_extern.h>
91 #include <vm/swap_pager.h>
92
93 #include <machine/inttypes.h>
94 #include <machine/md_var.h>
95 #include <machine/specialreg.h>
96
97 #include <vm/vm_page2.h>
98 #include <sys/spinlock2.h>
99
100 #define VMACTION_HSIZE  256
101 #define VMACTION_HMASK  (VMACTION_HSIZE - 1)
102
103 static void vm_page_queue_init(void);
104 static void vm_page_free_wakeup(void);
105 static vm_page_t vm_page_select_cache(u_short pg_color);
106 static vm_page_t _vm_page_list_find2(int basequeue, int index);
107 static void _vm_page_deactivate_locked(vm_page_t m, int athead);
108
109 /*
110  * Array of tailq lists
111  */
112 __cachealign struct vpgqueues vm_page_queues[PQ_COUNT];
113
114 LIST_HEAD(vm_page_action_list, vm_page_action);
115 struct vm_page_action_list      action_list[VMACTION_HSIZE];
116 static volatile int vm_pages_waiting;
117
118 static struct alist vm_contig_alist;
119 static struct almeta vm_contig_ameta[ALIST_RECORDS_65536];
120 static struct spinlock vm_contig_spin = SPINLOCK_INITIALIZER(&vm_contig_spin, "vm_contig_spin");
121
122 static u_long vm_dma_reserved = 0;
123 TUNABLE_ULONG("vm.dma_reserved", &vm_dma_reserved);
124 SYSCTL_ULONG(_vm, OID_AUTO, dma_reserved, CTLFLAG_RD, &vm_dma_reserved, 0,
125             "Memory reserved for DMA");
126 SYSCTL_UINT(_vm, OID_AUTO, dma_free_pages, CTLFLAG_RD,
127             &vm_contig_alist.bl_free, 0, "Memory reserved for DMA");
128
129 static int vm_contig_verbose = 0;
130 TUNABLE_INT("vm.contig_verbose", &vm_contig_verbose);
131
132 RB_GENERATE2(vm_page_rb_tree, vm_page, rb_entry, rb_vm_page_compare,
133              vm_pindex_t, pindex);
134
135 static void
136 vm_page_queue_init(void) 
137 {
138         int i;
139
140         for (i = 0; i < PQ_L2_SIZE; i++)
141                 vm_page_queues[PQ_FREE+i].cnt = &vmstats.v_free_count;
142         for (i = 0; i < PQ_L2_SIZE; i++)
143                 vm_page_queues[PQ_CACHE+i].cnt = &vmstats.v_cache_count;
144         for (i = 0; i < PQ_L2_SIZE; i++)
145                 vm_page_queues[PQ_INACTIVE+i].cnt = &vmstats.v_inactive_count;
146         for (i = 0; i < PQ_L2_SIZE; i++)
147                 vm_page_queues[PQ_ACTIVE+i].cnt = &vmstats.v_active_count;
148         for (i = 0; i < PQ_L2_SIZE; i++)
149                 vm_page_queues[PQ_HOLD+i].cnt = &vmstats.v_active_count;
150         /* PQ_NONE has no queue */
151
152         for (i = 0; i < PQ_COUNT; i++) {
153                 TAILQ_INIT(&vm_page_queues[i].pl);
154                 spin_init(&vm_page_queues[i].spin, "vm_page_queue_init");
155         }
156
157         for (i = 0; i < VMACTION_HSIZE; i++)
158                 LIST_INIT(&action_list[i]);
159 }
160
161 /*
162  * note: place in initialized data section?  Is this necessary?
163  */
164 long first_page = 0;
165 int vm_page_array_size = 0;
166 vm_page_t vm_page_array = NULL;
167 vm_paddr_t vm_low_phys_reserved;
168
169 /*
170  * (low level boot)
171  *
172  * Sets the page size, perhaps based upon the memory size.
173  * Must be called before any use of page-size dependent functions.
174  */
175 void
176 vm_set_page_size(void)
177 {
178         if (vmstats.v_page_size == 0)
179                 vmstats.v_page_size = PAGE_SIZE;
180         if (((vmstats.v_page_size - 1) & vmstats.v_page_size) != 0)
181                 panic("vm_set_page_size: page size not a power of two");
182 }
183
184 /*
185  * (low level boot)
186  *
187  * Add a new page to the freelist for use by the system.  New pages
188  * are added to both the head and tail of the associated free page
189  * queue in a bottom-up fashion, so both zero'd and non-zero'd page
190  * requests pull 'recent' adds (higher physical addresses) first.
191  *
192  * Beware that the page zeroing daemon will also be running soon after
193  * boot, moving pages from the head to the tail of the PQ_FREE queues.
194  *
195  * Must be called in a critical section.
196  */
197 static void
198 vm_add_new_page(vm_paddr_t pa)
199 {
200         struct vpgqueues *vpq;
201         vm_page_t m;
202
203         m = PHYS_TO_VM_PAGE(pa);
204         m->phys_addr = pa;
205         m->flags = 0;
206         m->pc = (pa >> PAGE_SHIFT) & PQ_L2_MASK;
207         m->pat_mode = PAT_WRITE_BACK;
208         /*
209          * Twist for cpu localization in addition to page coloring, so
210          * different cpus selecting by m->queue get different page colors.
211          */
212         m->pc ^= ((pa >> PAGE_SHIFT) / PQ_L2_SIZE) & PQ_L2_MASK;
213         m->pc ^= ((pa >> PAGE_SHIFT) / (PQ_L2_SIZE * PQ_L2_SIZE)) & PQ_L2_MASK;
214         /*
215          * Reserve a certain number of contiguous low memory pages for
216          * contigmalloc() to use.
217          */
218         if (pa < vm_low_phys_reserved) {
219                 atomic_add_int(&vmstats.v_page_count, 1);
220                 atomic_add_int(&vmstats.v_dma_pages, 1);
221                 m->queue = PQ_NONE;
222                 m->wire_count = 1;
223                 atomic_add_int(&vmstats.v_wire_count, 1);
224                 alist_free(&vm_contig_alist, pa >> PAGE_SHIFT, 1);
225                 return;
226         }
227
228         /*
229          * General page
230          */
231         m->queue = m->pc + PQ_FREE;
232         KKASSERT(m->dirty == 0);
233
234         atomic_add_int(&vmstats.v_page_count, 1);
235         atomic_add_int(&vmstats.v_free_count, 1);
236         vpq = &vm_page_queues[m->queue];
237 #if 0
238         /* too expensive time-wise in large-mem configurations */
239         if ((vpq->flipflop & 15) == 0) {
240                 pmap_zero_page(VM_PAGE_TO_PHYS(m));
241                 m->flags |= PG_ZERO;
242                 TAILQ_INSERT_TAIL(&vpq->pl, m, pageq);
243                 ++vpq->zero_count;
244         } else {
245 #endif
246                 TAILQ_INSERT_HEAD(&vpq->pl, m, pageq);
247 #if 0
248         }
249         ++vpq->flipflop;
250 #endif
251         ++vpq->lcnt;
252 }
253
254 /*
255  * (low level boot)
256  *
257  * Initializes the resident memory module.
258  *
259  * Preallocates memory for critical VM structures and arrays prior to
260  * kernel_map becoming available.
261  *
262  * Memory is allocated from (virtual2_start, virtual2_end) if available,
263  * otherwise memory is allocated from (virtual_start, virtual_end).
264  *
265  * On x86-64 (virtual_start, virtual_end) is only 2GB and may not be
266  * large enough to hold vm_page_array & other structures for machines with
267  * large amounts of ram, so we want to use virtual2* when available.
268  */
269 void
270 vm_page_startup(void)
271 {
272         vm_offset_t vaddr = virtual2_start ? virtual2_start : virtual_start;
273         vm_offset_t mapped;
274         vm_size_t npages;
275         vm_paddr_t page_range;
276         vm_paddr_t new_end;
277         int i;
278         vm_paddr_t pa;
279         int nblocks;
280         vm_paddr_t last_pa;
281         vm_paddr_t end;
282         vm_paddr_t biggestone, biggestsize;
283         vm_paddr_t total;
284
285         total = 0;
286         biggestsize = 0;
287         biggestone = 0;
288         nblocks = 0;
289         vaddr = round_page(vaddr);
290
291         for (i = 0; phys_avail[i + 1]; i += 2) {
292                 phys_avail[i] = round_page64(phys_avail[i]);
293                 phys_avail[i + 1] = trunc_page64(phys_avail[i + 1]);
294         }
295
296         for (i = 0; phys_avail[i + 1]; i += 2) {
297                 vm_paddr_t size = phys_avail[i + 1] - phys_avail[i];
298
299                 if (size > biggestsize) {
300                         biggestone = i;
301                         biggestsize = size;
302                 }
303                 ++nblocks;
304                 total += size;
305         }
306
307         end = phys_avail[biggestone+1];
308         end = trunc_page(end);
309
310         /*
311          * Initialize the queue headers for the free queue, the active queue
312          * and the inactive queue.
313          */
314         vm_page_queue_init();
315
316 #if !defined(_KERNEL_VIRTUAL)
317         /*
318          * VKERNELs don't support minidumps and as such don't need
319          * vm_page_dump
320          *
321          * Allocate a bitmap to indicate that a random physical page
322          * needs to be included in a minidump.
323          *
324          * The amd64 port needs this to indicate which direct map pages
325          * need to be dumped, via calls to dump_add_page()/dump_drop_page().
326          *
327          * However, i386 still needs this workspace internally within the
328          * minidump code.  In theory, they are not needed on i386, but are
329          * included should the sf_buf code decide to use them.
330          */
331         page_range = phys_avail[(nblocks - 1) * 2 + 1] / PAGE_SIZE;
332         vm_page_dump_size = round_page(roundup2(page_range, NBBY) / NBBY);
333         end -= vm_page_dump_size;
334         vm_page_dump = (void *)pmap_map(&vaddr, end, end + vm_page_dump_size,
335             VM_PROT_READ | VM_PROT_WRITE);
336         bzero((void *)vm_page_dump, vm_page_dump_size);
337 #endif
338         /*
339          * Compute the number of pages of memory that will be available for
340          * use (taking into account the overhead of a page structure per
341          * page).
342          */
343         first_page = phys_avail[0] / PAGE_SIZE;
344         page_range = phys_avail[(nblocks - 1) * 2 + 1] / PAGE_SIZE - first_page;
345         npages = (total - (page_range * sizeof(struct vm_page))) / PAGE_SIZE;
346
347 #ifndef _KERNEL_VIRTUAL
348         /*
349          * (only applies to real kernels)
350          *
351          * Reserve a large amount of low memory for potential 32-bit DMA
352          * space allocations.  Once device initialization is complete we
353          * release most of it, but keep (vm_dma_reserved) memory reserved
354          * for later use.  Typically for X / graphics.  Through trial and
355          * error we find that GPUs usually requires ~60-100MB or so.
356          *
357          * By default, 128M is left in reserve on machines with 2G+ of ram.
358          */
359         vm_low_phys_reserved = (vm_paddr_t)65536 << PAGE_SHIFT;
360         if (vm_low_phys_reserved > total / 4)
361                 vm_low_phys_reserved = total / 4;
362         if (vm_dma_reserved == 0) {
363                 vm_dma_reserved = 128 * 1024 * 1024;    /* 128MB */
364                 if (vm_dma_reserved > total / 16)
365                         vm_dma_reserved = total / 16;
366         }
367 #endif
368         alist_init(&vm_contig_alist, 65536, vm_contig_ameta,
369                    ALIST_RECORDS_65536);
370
371         /*
372          * Initialize the mem entry structures now, and put them in the free
373          * queue.
374          */
375         new_end = trunc_page(end - page_range * sizeof(struct vm_page));
376         mapped = pmap_map(&vaddr, new_end, end, VM_PROT_READ | VM_PROT_WRITE);
377         vm_page_array = (vm_page_t)mapped;
378
379 #if defined(__x86_64__) && !defined(_KERNEL_VIRTUAL)
380         /*
381          * since pmap_map on amd64 returns stuff out of a direct-map region,
382          * we have to manually add these pages to the minidump tracking so
383          * that they can be dumped, including the vm_page_array.
384          */
385         for (pa = new_end; pa < phys_avail[biggestone + 1]; pa += PAGE_SIZE)
386                 dump_add_page(pa);
387 #endif
388
389         /*
390          * Clear all of the page structures
391          */
392         bzero((caddr_t) vm_page_array, page_range * sizeof(struct vm_page));
393         vm_page_array_size = page_range;
394
395         /*
396          * Construct the free queue(s) in ascending order (by physical
397          * address) so that the first 16MB of physical memory is allocated
398          * last rather than first.  On large-memory machines, this avoids
399          * the exhaustion of low physical memory before isa_dmainit has run.
400          */
401         vmstats.v_page_count = 0;
402         vmstats.v_free_count = 0;
403         for (i = 0; phys_avail[i + 1] && npages > 0; i += 2) {
404                 pa = phys_avail[i];
405                 if (i == biggestone)
406                         last_pa = new_end;
407                 else
408                         last_pa = phys_avail[i + 1];
409                 while (pa < last_pa && npages-- > 0) {
410                         vm_add_new_page(pa);
411                         pa += PAGE_SIZE;
412                 }
413         }
414         if (virtual2_start)
415                 virtual2_start = vaddr;
416         else
417                 virtual_start = vaddr;
418 }
419
420 /*
421  * We tended to reserve a ton of memory for contigmalloc().  Now that most
422  * drivers have initialized we want to return most the remaining free
423  * reserve back to the VM page queues so they can be used for normal
424  * allocations.
425  *
426  * We leave vm_dma_reserved bytes worth of free pages in the reserve pool.
427  */
428 static void
429 vm_page_startup_finish(void *dummy __unused)
430 {
431         alist_blk_t blk;
432         alist_blk_t rblk;
433         alist_blk_t count;
434         alist_blk_t xcount;
435         alist_blk_t bfree;
436         vm_page_t m;
437
438         spin_lock(&vm_contig_spin);
439         for (;;) {
440                 bfree = alist_free_info(&vm_contig_alist, &blk, &count);
441                 if (bfree <= vm_dma_reserved / PAGE_SIZE)
442                         break;
443                 if (count == 0)
444                         break;
445
446                 /*
447                  * Figure out how much of the initial reserve we have to
448                  * free in order to reach our target.
449                  */
450                 bfree -= vm_dma_reserved / PAGE_SIZE;
451                 if (count > bfree) {
452                         blk += count - bfree;
453                         count = bfree;
454                 }
455
456                 /*
457                  * Calculate the nearest power of 2 <= count.
458                  */
459                 for (xcount = 1; xcount <= count; xcount <<= 1)
460                         ;
461                 xcount >>= 1;
462                 blk += count - xcount;
463                 count = xcount;
464
465                 /*
466                  * Allocate the pages from the alist, then free them to
467                  * the normal VM page queues.
468                  *
469                  * Pages allocated from the alist are wired.  We have to
470                  * busy, unwire, and free them.  We must also adjust
471                  * vm_low_phys_reserved before freeing any pages to prevent
472                  * confusion.
473                  */
474                 rblk = alist_alloc(&vm_contig_alist, blk, count);
475                 if (rblk != blk) {
476                         kprintf("vm_page_startup_finish: Unable to return "
477                                 "dma space @0x%08x/%d -> 0x%08x\n",
478                                 blk, count, rblk);
479                         break;
480                 }
481                 atomic_add_int(&vmstats.v_dma_pages, -count);
482                 spin_unlock(&vm_contig_spin);
483
484                 m = PHYS_TO_VM_PAGE((vm_paddr_t)blk << PAGE_SHIFT);
485                 vm_low_phys_reserved = VM_PAGE_TO_PHYS(m);
486                 while (count) {
487                         vm_page_busy_wait(m, FALSE, "cpgfr");
488                         vm_page_unwire(m, 0);
489                         vm_page_free(m);
490                         --count;
491                         ++m;
492                 }
493                 spin_lock(&vm_contig_spin);
494         }
495         spin_unlock(&vm_contig_spin);
496
497         /*
498          * Print out how much DMA space drivers have already allocated and
499          * how much is left over.
500          */
501         kprintf("DMA space used: %jdk, remaining available: %jdk\n",
502                 (intmax_t)(vmstats.v_dma_pages - vm_contig_alist.bl_free) *
503                 (PAGE_SIZE / 1024),
504                 (intmax_t)vm_contig_alist.bl_free * (PAGE_SIZE / 1024));
505 }
506 SYSINIT(vm_pgend, SI_SUB_PROC0_POST, SI_ORDER_ANY,
507         vm_page_startup_finish, NULL);
508
509
510 /*
511  * Scan comparison function for Red-Black tree scans.  An inclusive
512  * (start,end) is expected.  Other fields are not used.
513  */
514 int
515 rb_vm_page_scancmp(struct vm_page *p, void *data)
516 {
517         struct rb_vm_page_scan_info *info = data;
518
519         if (p->pindex < info->start_pindex)
520                 return(-1);
521         if (p->pindex > info->end_pindex)
522                 return(1);
523         return(0);
524 }
525
526 int
527 rb_vm_page_compare(struct vm_page *p1, struct vm_page *p2)
528 {
529         if (p1->pindex < p2->pindex)
530                 return(-1);
531         if (p1->pindex > p2->pindex)
532                 return(1);
533         return(0);
534 }
535
536 void
537 vm_page_init(vm_page_t m)
538 {
539         /* do nothing for now.  Called from pmap_page_init() */
540 }
541
542 /*
543  * Each page queue has its own spin lock, which is fairly optimal for
544  * allocating and freeing pages at least.
545  *
546  * The caller must hold the vm_page_spin_lock() before locking a vm_page's
547  * queue spinlock via this function.  Also note that m->queue cannot change
548  * unless both the page and queue are locked.
549  */
550 static __inline
551 void
552 _vm_page_queue_spin_lock(vm_page_t m)
553 {
554         u_short queue;
555
556         queue = m->queue;
557         if (queue != PQ_NONE) {
558                 spin_lock(&vm_page_queues[queue].spin);
559                 KKASSERT(queue == m->queue);
560         }
561 }
562
563 static __inline
564 void
565 _vm_page_queue_spin_unlock(vm_page_t m)
566 {
567         u_short queue;
568
569         queue = m->queue;
570         cpu_ccfence();
571         if (queue != PQ_NONE)
572                 spin_unlock(&vm_page_queues[queue].spin);
573 }
574
575 static __inline
576 void
577 _vm_page_queues_spin_lock(u_short queue)
578 {
579         cpu_ccfence();
580         if (queue != PQ_NONE)
581                 spin_lock(&vm_page_queues[queue].spin);
582 }
583
584
585 static __inline
586 void
587 _vm_page_queues_spin_unlock(u_short queue)
588 {
589         cpu_ccfence();
590         if (queue != PQ_NONE)
591                 spin_unlock(&vm_page_queues[queue].spin);
592 }
593
594 void
595 vm_page_queue_spin_lock(vm_page_t m)
596 {
597         _vm_page_queue_spin_lock(m);
598 }
599
600 void
601 vm_page_queues_spin_lock(u_short queue)
602 {
603         _vm_page_queues_spin_lock(queue);
604 }
605
606 void
607 vm_page_queue_spin_unlock(vm_page_t m)
608 {
609         _vm_page_queue_spin_unlock(m);
610 }
611
612 void
613 vm_page_queues_spin_unlock(u_short queue)
614 {
615         _vm_page_queues_spin_unlock(queue);
616 }
617
618 /*
619  * This locks the specified vm_page and its queue in the proper order
620  * (page first, then queue).  The queue may change so the caller must
621  * recheck on return.
622  */
623 static __inline
624 void
625 _vm_page_and_queue_spin_lock(vm_page_t m)
626 {
627         vm_page_spin_lock(m);
628         _vm_page_queue_spin_lock(m);
629 }
630
631 static __inline
632 void
633 _vm_page_and_queue_spin_unlock(vm_page_t m)
634 {
635         _vm_page_queues_spin_unlock(m->queue);
636         vm_page_spin_unlock(m);
637 }
638
639 void
640 vm_page_and_queue_spin_unlock(vm_page_t m)
641 {
642         _vm_page_and_queue_spin_unlock(m);
643 }
644
645 void
646 vm_page_and_queue_spin_lock(vm_page_t m)
647 {
648         _vm_page_and_queue_spin_lock(m);
649 }
650
651 /*
652  * Helper function removes vm_page from its current queue.
653  * Returns the base queue the page used to be on.
654  *
655  * The vm_page and the queue must be spinlocked.
656  * This function will unlock the queue but leave the page spinlocked.
657  */
658 static __inline u_short
659 _vm_page_rem_queue_spinlocked(vm_page_t m)
660 {
661         struct vpgqueues *pq;
662         u_short queue;
663         u_short oqueue;
664
665         queue = m->queue;
666         if (queue != PQ_NONE) {
667                 pq = &vm_page_queues[queue];
668                 TAILQ_REMOVE(&pq->pl, m, pageq);
669                 atomic_add_int(pq->cnt, -1);
670                 pq->lcnt--;
671                 m->queue = PQ_NONE;
672                 oqueue = queue;
673                 if ((queue - m->pc) == PQ_FREE && (m->flags & PG_ZERO))
674                         --pq->zero_count;
675                 if ((queue - m->pc) == PQ_CACHE || (queue - m->pc) == PQ_FREE)
676                         queue -= m->pc;
677                 vm_page_queues_spin_unlock(oqueue);     /* intended */
678         }
679         return queue;
680 }
681
682 /*
683  * Helper function places the vm_page on the specified queue.
684  *
685  * The vm_page must be spinlocked.
686  * This function will return with both the page and the queue locked.
687  */
688 static __inline void
689 _vm_page_add_queue_spinlocked(vm_page_t m, u_short queue, int athead)
690 {
691         struct vpgqueues *pq;
692
693         KKASSERT(m->queue == PQ_NONE);
694
695         if (queue != PQ_NONE) {
696                 vm_page_queues_spin_lock(queue);
697                 pq = &vm_page_queues[queue];
698                 ++pq->lcnt;
699                 atomic_add_int(pq->cnt, 1);
700                 m->queue = queue;
701
702                 /*
703                  * Put zero'd pages on the end ( where we look for zero'd pages
704                  * first ) and non-zerod pages at the head.
705                  */
706                 if (queue - m->pc == PQ_FREE) {
707                         if (m->flags & PG_ZERO) {
708                                 TAILQ_INSERT_TAIL(&pq->pl, m, pageq);
709                                 ++pq->zero_count;
710                         } else {
711                                 TAILQ_INSERT_HEAD(&pq->pl, m, pageq);
712                         }
713                 } else if (athead) {
714                         TAILQ_INSERT_HEAD(&pq->pl, m, pageq);
715                 } else {
716                         TAILQ_INSERT_TAIL(&pq->pl, m, pageq);
717                 }
718                 /* leave the queue spinlocked */
719         }
720 }
721
722 /*
723  * Wait until page is no longer PG_BUSY or (if also_m_busy is TRUE)
724  * m->busy is zero.  Returns TRUE if it had to sleep, FALSE if we
725  * did not.  Only one sleep call will be made before returning.
726  *
727  * This function does NOT busy the page and on return the page is not
728  * guaranteed to be available.
729  */
730 void
731 vm_page_sleep_busy(vm_page_t m, int also_m_busy, const char *msg)
732 {
733         u_int32_t flags;
734
735         for (;;) {
736                 flags = m->flags;
737                 cpu_ccfence();
738
739                 if ((flags & PG_BUSY) == 0 &&
740                     (also_m_busy == 0 || (flags & PG_SBUSY) == 0)) {
741                         break;
742                 }
743                 tsleep_interlock(m, 0);
744                 if (atomic_cmpset_int(&m->flags, flags,
745                                       flags | PG_WANTED | PG_REFERENCED)) {
746                         tsleep(m, PINTERLOCKED, msg, 0);
747                         break;
748                 }
749         }
750 }
751
752 /*
753  * Wait until PG_BUSY can be set, then set it.  If also_m_busy is TRUE we
754  * also wait for m->busy to become 0 before setting PG_BUSY.
755  */
756 void
757 VM_PAGE_DEBUG_EXT(vm_page_busy_wait)(vm_page_t m,
758                                      int also_m_busy, const char *msg
759                                      VM_PAGE_DEBUG_ARGS)
760 {
761         u_int32_t flags;
762
763         for (;;) {
764                 flags = m->flags;
765                 cpu_ccfence();
766                 if (flags & PG_BUSY) {
767                         tsleep_interlock(m, 0);
768                         if (atomic_cmpset_int(&m->flags, flags,
769                                           flags | PG_WANTED | PG_REFERENCED)) {
770                                 tsleep(m, PINTERLOCKED, msg, 0);
771                         }
772                 } else if (also_m_busy && (flags & PG_SBUSY)) {
773                         tsleep_interlock(m, 0);
774                         if (atomic_cmpset_int(&m->flags, flags,
775                                           flags | PG_WANTED | PG_REFERENCED)) {
776                                 tsleep(m, PINTERLOCKED, msg, 0);
777                         }
778                 } else {
779                         if (atomic_cmpset_int(&m->flags, flags,
780                                               flags | PG_BUSY)) {
781 #ifdef VM_PAGE_DEBUG
782                                 m->busy_func = func;
783                                 m->busy_line = lineno;
784 #endif
785                                 break;
786                         }
787                 }
788         }
789 }
790
791 /*
792  * Attempt to set PG_BUSY.  If also_m_busy is TRUE we only succeed if m->busy
793  * is also 0.
794  *
795  * Returns non-zero on failure.
796  */
797 int
798 VM_PAGE_DEBUG_EXT(vm_page_busy_try)(vm_page_t m, int also_m_busy
799                                     VM_PAGE_DEBUG_ARGS)
800 {
801         u_int32_t flags;
802
803         for (;;) {
804                 flags = m->flags;
805                 cpu_ccfence();
806                 if (flags & PG_BUSY)
807                         return TRUE;
808                 if (also_m_busy && (flags & PG_SBUSY))
809                         return TRUE;
810                 if (atomic_cmpset_int(&m->flags, flags, flags | PG_BUSY)) {
811 #ifdef VM_PAGE_DEBUG
812                                 m->busy_func = func;
813                                 m->busy_line = lineno;
814 #endif
815                         return FALSE;
816                 }
817         }
818 }
819
820 /*
821  * Clear the PG_BUSY flag and return non-zero to indicate to the caller
822  * that a wakeup() should be performed.
823  *
824  * The vm_page must be spinlocked and will remain spinlocked on return.
825  * The related queue must NOT be spinlocked (which could deadlock us).
826  *
827  * (inline version)
828  */
829 static __inline
830 int
831 _vm_page_wakeup(vm_page_t m)
832 {
833         u_int32_t flags;
834
835         for (;;) {
836                 flags = m->flags;
837                 cpu_ccfence();
838                 if (atomic_cmpset_int(&m->flags, flags,
839                                       flags & ~(PG_BUSY | PG_WANTED))) {
840                         break;
841                 }
842         }
843         return(flags & PG_WANTED);
844 }
845
846 /*
847  * Clear the PG_BUSY flag and wakeup anyone waiting for the page.  This
848  * is typically the last call you make on a page before moving onto
849  * other things.
850  */
851 void
852 vm_page_wakeup(vm_page_t m)
853 {
854         KASSERT(m->flags & PG_BUSY, ("vm_page_wakeup: page not busy!!!"));
855         vm_page_spin_lock(m);
856         if (_vm_page_wakeup(m)) {
857                 vm_page_spin_unlock(m);
858                 wakeup(m);
859         } else {
860                 vm_page_spin_unlock(m);
861         }
862 }
863
864 /*
865  * Holding a page keeps it from being reused.  Other parts of the system
866  * can still disassociate the page from its current object and free it, or
867  * perform read or write I/O on it and/or otherwise manipulate the page,
868  * but if the page is held the VM system will leave the page and its data
869  * intact and not reuse the page for other purposes until the last hold
870  * reference is released.  (see vm_page_wire() if you want to prevent the
871  * page from being disassociated from its object too).
872  *
873  * The caller must still validate the contents of the page and, if necessary,
874  * wait for any pending I/O (e.g. vm_page_sleep_busy() loop) to complete
875  * before manipulating the page.
876  *
877  * XXX get vm_page_spin_lock() here and move FREE->HOLD if necessary
878  */
879 void
880 vm_page_hold(vm_page_t m)
881 {
882         vm_page_spin_lock(m);
883         atomic_add_int(&m->hold_count, 1);
884         if (m->queue - m->pc == PQ_FREE) {
885                 _vm_page_queue_spin_lock(m);
886                 _vm_page_rem_queue_spinlocked(m);
887                 _vm_page_add_queue_spinlocked(m, PQ_HOLD + m->pc, 0);
888                 _vm_page_queue_spin_unlock(m);
889         }
890         vm_page_spin_unlock(m);
891 }
892
893 /*
894  * The opposite of vm_page_hold().  If the page is on the HOLD queue
895  * it was freed while held and must be moved back to the FREE queue.
896  */
897 void
898 vm_page_unhold(vm_page_t m)
899 {
900         KASSERT(m->hold_count > 0 && m->queue - m->pc != PQ_FREE,
901                 ("vm_page_unhold: pg %p illegal hold_count (%d) or on FREE queue (%d)",
902                  m, m->hold_count, m->queue - m->pc));
903         vm_page_spin_lock(m);
904         atomic_add_int(&m->hold_count, -1);
905         if (m->hold_count == 0 && m->queue - m->pc == PQ_HOLD) {
906                 _vm_page_queue_spin_lock(m);
907                 _vm_page_rem_queue_spinlocked(m);
908                 _vm_page_add_queue_spinlocked(m, PQ_FREE + m->pc, 0);
909                 _vm_page_queue_spin_unlock(m);
910         }
911         vm_page_spin_unlock(m);
912 }
913
914 /*
915  *      vm_page_getfake:
916  *
917  *      Create a fictitious page with the specified physical address and
918  *      memory attribute.  The memory attribute is the only the machine-
919  *      dependent aspect of a fictitious page that must be initialized.
920  */
921
922 void
923 vm_page_initfake(vm_page_t m, vm_paddr_t paddr, vm_memattr_t memattr)
924 {
925
926         if ((m->flags & PG_FICTITIOUS) != 0) {
927                 /*
928                  * The page's memattr might have changed since the
929                  * previous initialization.  Update the pmap to the
930                  * new memattr.
931                  */
932                 goto memattr;
933         }
934         m->phys_addr = paddr;
935         m->queue = PQ_NONE;
936         /* Fictitious pages don't use "segind". */
937         /* Fictitious pages don't use "order" or "pool". */
938         m->flags = PG_FICTITIOUS | PG_UNMANAGED | PG_BUSY;
939         m->wire_count = 1;
940         pmap_page_init(m);
941 memattr:
942         pmap_page_set_memattr(m, memattr);
943 }
944
945 /*
946  * Inserts the given vm_page into the object and object list.
947  *
948  * The pagetables are not updated but will presumably fault the page
949  * in if necessary, or if a kernel page the caller will at some point
950  * enter the page into the kernel's pmap.  We are not allowed to block
951  * here so we *can't* do this anyway.
952  *
953  * This routine may not block.
954  * This routine must be called with the vm_object held.
955  * This routine must be called with a critical section held.
956  *
957  * This routine returns TRUE if the page was inserted into the object
958  * successfully, and FALSE if the page already exists in the object.
959  */
960 int
961 vm_page_insert(vm_page_t m, vm_object_t object, vm_pindex_t pindex)
962 {
963         ASSERT_LWKT_TOKEN_HELD_EXCL(vm_object_token(object));
964         if (m->object != NULL)
965                 panic("vm_page_insert: already inserted");
966
967         object->generation++;
968
969         /*
970          * Record the object/offset pair in this page and add the
971          * pv_list_count of the page to the object.
972          *
973          * The vm_page spin lock is required for interactions with the pmap.
974          */
975         vm_page_spin_lock(m);
976         m->object = object;
977         m->pindex = pindex;
978         if (vm_page_rb_tree_RB_INSERT(&object->rb_memq, m)) {
979                 m->object = NULL;
980                 m->pindex = 0;
981                 vm_page_spin_unlock(m);
982                 return FALSE;
983         }
984         ++object->resident_page_count;
985         ++mycpu->gd_vmtotal.t_rm;
986         /* atomic_add_int(&object->agg_pv_list_count, m->md.pv_list_count); */
987         vm_page_spin_unlock(m);
988
989         /*
990          * Since we are inserting a new and possibly dirty page,
991          * update the object's OBJ_WRITEABLE and OBJ_MIGHTBEDIRTY flags.
992          */
993         if ((m->valid & m->dirty) ||
994             (m->flags & (PG_WRITEABLE | PG_NEED_COMMIT)))
995                 vm_object_set_writeable_dirty(object);
996
997         /*
998          * Checks for a swap assignment and sets PG_SWAPPED if appropriate.
999          */
1000         swap_pager_page_inserted(m);
1001         return TRUE;
1002 }
1003
1004 /*
1005  * Removes the given vm_page_t from the (object,index) table
1006  *
1007  * The underlying pmap entry (if any) is NOT removed here.
1008  * This routine may not block.
1009  *
1010  * The page must be BUSY and will remain BUSY on return.
1011  * No other requirements.
1012  *
1013  * NOTE: FreeBSD side effect was to unbusy the page on return.  We leave
1014  *       it busy.
1015  */
1016 void
1017 vm_page_remove(vm_page_t m)
1018 {
1019         vm_object_t object;
1020
1021         if (m->object == NULL) {
1022                 return;
1023         }
1024
1025         if ((m->flags & PG_BUSY) == 0)
1026                 panic("vm_page_remove: page not busy");
1027
1028         object = m->object;
1029
1030         vm_object_hold(object);
1031
1032         /*
1033          * Remove the page from the object and update the object.
1034          *
1035          * The vm_page spin lock is required for interactions with the pmap.
1036          */
1037         vm_page_spin_lock(m);
1038         vm_page_rb_tree_RB_REMOVE(&object->rb_memq, m);
1039         --object->resident_page_count;
1040         --mycpu->gd_vmtotal.t_rm;
1041         /* atomic_add_int(&object->agg_pv_list_count, -m->md.pv_list_count); */
1042         m->object = NULL;
1043         vm_page_spin_unlock(m);
1044
1045         object->generation++;
1046
1047         vm_object_drop(object);
1048 }
1049
1050 /*
1051  * Locate and return the page at (object, pindex), or NULL if the
1052  * page could not be found.
1053  *
1054  * The caller must hold the vm_object token.
1055  */
1056 vm_page_t
1057 vm_page_lookup(vm_object_t object, vm_pindex_t pindex)
1058 {
1059         vm_page_t m;
1060
1061         /*
1062          * Search the hash table for this object/offset pair
1063          */
1064         ASSERT_LWKT_TOKEN_HELD(vm_object_token(object));
1065         m = vm_page_rb_tree_RB_LOOKUP(&object->rb_memq, pindex);
1066         KKASSERT(m == NULL || (m->object == object && m->pindex == pindex));
1067         return(m);
1068 }
1069
1070 vm_page_t
1071 VM_PAGE_DEBUG_EXT(vm_page_lookup_busy_wait)(struct vm_object *object,
1072                                             vm_pindex_t pindex,
1073                                             int also_m_busy, const char *msg
1074                                             VM_PAGE_DEBUG_ARGS)
1075 {
1076         u_int32_t flags;
1077         vm_page_t m;
1078
1079         ASSERT_LWKT_TOKEN_HELD(vm_object_token(object));
1080         m = vm_page_rb_tree_RB_LOOKUP(&object->rb_memq, pindex);
1081         while (m) {
1082                 KKASSERT(m->object == object && m->pindex == pindex);
1083                 flags = m->flags;
1084                 cpu_ccfence();
1085                 if (flags & PG_BUSY) {
1086                         tsleep_interlock(m, 0);
1087                         if (atomic_cmpset_int(&m->flags, flags,
1088                                           flags | PG_WANTED | PG_REFERENCED)) {
1089                                 tsleep(m, PINTERLOCKED, msg, 0);
1090                                 m = vm_page_rb_tree_RB_LOOKUP(&object->rb_memq,
1091                                                               pindex);
1092                         }
1093                 } else if (also_m_busy && (flags & PG_SBUSY)) {
1094                         tsleep_interlock(m, 0);
1095                         if (atomic_cmpset_int(&m->flags, flags,
1096                                           flags | PG_WANTED | PG_REFERENCED)) {
1097                                 tsleep(m, PINTERLOCKED, msg, 0);
1098                                 m = vm_page_rb_tree_RB_LOOKUP(&object->rb_memq,
1099                                                               pindex);
1100                         }
1101                 } else if (atomic_cmpset_int(&m->flags, flags,
1102                                              flags | PG_BUSY)) {
1103 #ifdef VM_PAGE_DEBUG
1104                         m->busy_func = func;
1105                         m->busy_line = lineno;
1106 #endif
1107                         break;
1108                 }
1109         }
1110         return m;
1111 }
1112
1113 /*
1114  * Attempt to lookup and busy a page.
1115  *
1116  * Returns NULL if the page could not be found
1117  *
1118  * Returns a vm_page and error == TRUE if the page exists but could not
1119  * be busied.
1120  *
1121  * Returns a vm_page and error == FALSE on success.
1122  */
1123 vm_page_t
1124 VM_PAGE_DEBUG_EXT(vm_page_lookup_busy_try)(struct vm_object *object,
1125                                            vm_pindex_t pindex,
1126                                            int also_m_busy, int *errorp
1127                                            VM_PAGE_DEBUG_ARGS)
1128 {
1129         u_int32_t flags;
1130         vm_page_t m;
1131
1132         ASSERT_LWKT_TOKEN_HELD(vm_object_token(object));
1133         m = vm_page_rb_tree_RB_LOOKUP(&object->rb_memq, pindex);
1134         *errorp = FALSE;
1135         while (m) {
1136                 KKASSERT(m->object == object && m->pindex == pindex);
1137                 flags = m->flags;
1138                 cpu_ccfence();
1139                 if (flags & PG_BUSY) {
1140                         *errorp = TRUE;
1141                         break;
1142                 }
1143                 if (also_m_busy && (flags & PG_SBUSY)) {
1144                         *errorp = TRUE;
1145                         break;
1146                 }
1147                 if (atomic_cmpset_int(&m->flags, flags, flags | PG_BUSY)) {
1148 #ifdef VM_PAGE_DEBUG
1149                         m->busy_func = func;
1150                         m->busy_line = lineno;
1151 #endif
1152                         break;
1153                 }
1154         }
1155         return m;
1156 }
1157
1158 /*
1159  * Attempt to repurpose the passed-in page.  If the passed-in page cannot
1160  * be repurposed it will be released, *must_reenter will be set to 1, and
1161  * this function will fall-through to vm_page_lookup_busy_try().
1162  *
1163  * The passed-in page must be wired and not busy.  The returned page will
1164  * be busied and not wired.
1165  *
1166  * A different page may be returned.  The returned page will be busied and
1167  * not wired.
1168  *
1169  * NULL can be returned.  If so, the required page could not be busied.
1170  * The passed-in page will be unwired.
1171  */
1172 vm_page_t
1173 vm_page_repurpose(struct vm_object *object, vm_pindex_t pindex,
1174                   int also_m_busy, int *errorp, vm_page_t m,
1175                   int *must_reenter, int *iswired)
1176 {
1177         if (m) {
1178                 vm_page_busy_wait(m, TRUE, "biodep");
1179                 if ((m->flags & (PG_UNMANAGED | PG_MAPPED | PG_FICTITIOUS)) ||
1180                     m->busy || m->wire_count != 1 || m->hold_count) {
1181                         vm_page_unwire(m, 0);
1182                         vm_page_wakeup(m);
1183                         /* fall through to normal lookup */
1184                 } else if (m->dirty || (m->flags & PG_NEED_COMMIT)) {
1185                         vm_page_unwire(m, 0);
1186                         vm_page_deactivate(m);
1187                         vm_page_wakeup(m);
1188                         /* fall through to normal lookup */
1189                 } else {
1190                         /*
1191                          * We can safely repurpose the page.  It should
1192                          * already be unqueued.
1193                          */
1194                         KKASSERT(m->queue == PQ_NONE && m->dirty == 0);
1195                         vm_page_remove(m);
1196                         m->valid = 0;
1197                         m->act_count = 0;
1198                         if (vm_page_insert(m, object, pindex)) {
1199                                 *errorp = 0;
1200                                 *iswired = 1;
1201
1202                                 return m;
1203                         }
1204                         vm_page_unwire(m, 0);
1205                         vm_page_free(m);
1206                         /* fall through to normal lookup */
1207                 }
1208         }
1209         *must_reenter = 1;
1210         *iswired = 0;
1211         m = vm_page_lookup_busy_try(object, pindex, also_m_busy, errorp);
1212
1213         return m;
1214 }
1215
1216 /*
1217  * Caller must hold the related vm_object
1218  */
1219 vm_page_t
1220 vm_page_next(vm_page_t m)
1221 {
1222         vm_page_t next;
1223
1224         next = vm_page_rb_tree_RB_NEXT(m);
1225         if (next && next->pindex != m->pindex + 1)
1226                 next = NULL;
1227         return (next);
1228 }
1229
1230 /*
1231  * vm_page_rename()
1232  *
1233  * Move the given vm_page from its current object to the specified
1234  * target object/offset.  The page must be busy and will remain so
1235  * on return.
1236  *
1237  * new_object must be held.
1238  * This routine might block. XXX ?
1239  *
1240  * NOTE: Swap associated with the page must be invalidated by the move.  We
1241  *       have to do this for several reasons:  (1) we aren't freeing the
1242  *       page, (2) we are dirtying the page, (3) the VM system is probably
1243  *       moving the page from object A to B, and will then later move
1244  *       the backing store from A to B and we can't have a conflict.
1245  *
1246  * NOTE: We *always* dirty the page.  It is necessary both for the
1247  *       fact that we moved it, and because we may be invalidating
1248  *       swap.  If the page is on the cache, we have to deactivate it
1249  *       or vm_page_dirty() will panic.  Dirty pages are not allowed
1250  *       on the cache.
1251  */
1252 void
1253 vm_page_rename(vm_page_t m, vm_object_t new_object, vm_pindex_t new_pindex)
1254 {
1255         KKASSERT(m->flags & PG_BUSY);
1256         ASSERT_LWKT_TOKEN_HELD_EXCL(vm_object_token(new_object));
1257         if (m->object) {
1258                 ASSERT_LWKT_TOKEN_HELD_EXCL(vm_object_token(m->object));
1259                 vm_page_remove(m);
1260         }
1261         if (vm_page_insert(m, new_object, new_pindex) == FALSE) {
1262                 panic("vm_page_rename: target exists (%p,%"PRIu64")",
1263                       new_object, new_pindex);
1264         }
1265         if (m->queue - m->pc == PQ_CACHE)
1266                 vm_page_deactivate(m);
1267         vm_page_dirty(m);
1268 }
1269
1270 /*
1271  * vm_page_unqueue() without any wakeup.  This routine is used when a page
1272  * is to remain BUSYied by the caller.
1273  *
1274  * This routine may not block.
1275  */
1276 void
1277 vm_page_unqueue_nowakeup(vm_page_t m)
1278 {
1279         vm_page_and_queue_spin_lock(m);
1280         (void)_vm_page_rem_queue_spinlocked(m);
1281         vm_page_spin_unlock(m);
1282 }
1283
1284 /*
1285  * vm_page_unqueue() - Remove a page from its queue, wakeup the pagedemon
1286  * if necessary.
1287  *
1288  * This routine may not block.
1289  */
1290 void
1291 vm_page_unqueue(vm_page_t m)
1292 {
1293         u_short queue;
1294
1295         vm_page_and_queue_spin_lock(m);
1296         queue = _vm_page_rem_queue_spinlocked(m);
1297         if (queue == PQ_FREE || queue == PQ_CACHE) {
1298                 vm_page_spin_unlock(m);
1299                 pagedaemon_wakeup();
1300         } else {
1301                 vm_page_spin_unlock(m);
1302         }
1303 }
1304
1305 /*
1306  * vm_page_list_find()
1307  *
1308  * Find a page on the specified queue with color optimization.
1309  *
1310  * The page coloring optimization attempts to locate a page that does
1311  * not overload other nearby pages in the object in the cpu's L1 or L2
1312  * caches.  We need this optimization because cpu caches tend to be
1313  * physical caches, while object spaces tend to be virtual.
1314  *
1315  * On MP systems each PQ_FREE and PQ_CACHE color queue has its own spinlock
1316  * and the algorithm is adjusted to localize allocations on a per-core basis.
1317  * This is done by 'twisting' the colors.
1318  *
1319  * The page is returned spinlocked and removed from its queue (it will
1320  * be on PQ_NONE), or NULL. The page is not PG_BUSY'd.  The caller
1321  * is responsible for dealing with the busy-page case (usually by
1322  * deactivating the page and looping).
1323  *
1324  * NOTE:  This routine is carefully inlined.  A non-inlined version
1325  *        is available for outside callers but the only critical path is
1326  *        from within this source file.
1327  *
1328  * NOTE:  This routine assumes that the vm_pages found in PQ_CACHE and PQ_FREE
1329  *        represent stable storage, allowing us to order our locks vm_page
1330  *        first, then queue.
1331  */
1332 static __inline
1333 vm_page_t
1334 _vm_page_list_find(int basequeue, int index, boolean_t prefer_zero)
1335 {
1336         vm_page_t m;
1337
1338         for (;;) {
1339                 if (prefer_zero)
1340                         m = TAILQ_LAST(&vm_page_queues[basequeue+index].pl, pglist);
1341                 else
1342                         m = TAILQ_FIRST(&vm_page_queues[basequeue+index].pl);
1343                 if (m == NULL) {
1344                         m = _vm_page_list_find2(basequeue, index);
1345                         return(m);
1346                 }
1347                 vm_page_and_queue_spin_lock(m);
1348                 if (m->queue == basequeue + index) {
1349                         _vm_page_rem_queue_spinlocked(m);
1350                         /* vm_page_t spin held, no queue spin */
1351                         break;
1352                 }
1353                 vm_page_and_queue_spin_unlock(m);
1354         }
1355         return(m);
1356 }
1357
1358 static vm_page_t
1359 _vm_page_list_find2(int basequeue, int index)
1360 {
1361         int i;
1362         vm_page_t m = NULL;
1363         struct vpgqueues *pq;
1364
1365         pq = &vm_page_queues[basequeue];
1366
1367         /*
1368          * Note that for the first loop, index+i and index-i wind up at the
1369          * same place.  Even though this is not totally optimal, we've already
1370          * blown it by missing the cache case so we do not care.
1371          *
1372          * NOTE: Fan out from our starting index for localization purposes.
1373          */
1374         for (i = 1; i <= PQ_L2_SIZE / 2; ++i) {
1375                 for (;;) {
1376                         m = TAILQ_FIRST(&pq[(index + i) & PQ_L2_MASK].pl);
1377                         if (m) {
1378                                 _vm_page_and_queue_spin_lock(m);
1379                                 if (m->queue ==
1380                                     basequeue + ((index + i) & PQ_L2_MASK)) {
1381                                         _vm_page_rem_queue_spinlocked(m);
1382                                         return(m);
1383                                 }
1384                                 _vm_page_and_queue_spin_unlock(m);
1385                                 continue;
1386                         }
1387                         m = TAILQ_FIRST(&pq[(index - i) & PQ_L2_MASK].pl);
1388                         if (m) {
1389                                 _vm_page_and_queue_spin_lock(m);
1390                                 if (m->queue ==
1391                                     basequeue + ((index - i) & PQ_L2_MASK)) {
1392                                         _vm_page_rem_queue_spinlocked(m);
1393                                         return(m);
1394                                 }
1395                                 _vm_page_and_queue_spin_unlock(m);
1396                                 continue;
1397                         }
1398                         break;  /* next i */
1399                 }
1400         }
1401         return(m);
1402 }
1403
1404 /*
1405  * Returns a vm_page candidate for allocation.  The page is not busied so
1406  * it can move around.  The caller must busy the page (and typically
1407  * deactivate it if it cannot be busied!)
1408  *
1409  * Returns a spinlocked vm_page that has been removed from its queue.
1410  */
1411 vm_page_t
1412 vm_page_list_find(int basequeue, int index, boolean_t prefer_zero)
1413 {
1414         return(_vm_page_list_find(basequeue, index, prefer_zero));
1415 }
1416
1417 /*
1418  * Find a page on the cache queue with color optimization, remove it
1419  * from the queue, and busy it.  The returned page will not be spinlocked.
1420  *
1421  * A candidate failure will be deactivated.  Candidates can fail due to
1422  * being busied by someone else, in which case they will be deactivated.
1423  *
1424  * This routine may not block.
1425  *
1426  */
1427 static vm_page_t
1428 vm_page_select_cache(u_short pg_color)
1429 {
1430         vm_page_t m;
1431
1432         for (;;) {
1433                 m = _vm_page_list_find(PQ_CACHE, pg_color & PQ_L2_MASK, FALSE);
1434                 if (m == NULL)
1435                         break;
1436                 /*
1437                  * (m) has been removed from its queue and spinlocked
1438                  */
1439                 if (vm_page_busy_try(m, TRUE)) {
1440                         _vm_page_deactivate_locked(m, 0);
1441                         vm_page_spin_unlock(m);
1442                 } else {
1443                         /*
1444                          * We successfully busied the page
1445                          */
1446                         if ((m->flags & (PG_UNMANAGED | PG_NEED_COMMIT)) == 0 &&
1447                             m->hold_count == 0 &&
1448                             m->wire_count == 0 &&
1449                             (m->dirty & m->valid) == 0) {
1450                                 vm_page_spin_unlock(m);
1451                                 pagedaemon_wakeup();
1452                                 return(m);
1453                         }
1454
1455                         /*
1456                          * The page cannot be recycled, deactivate it.
1457                          */
1458                         _vm_page_deactivate_locked(m, 0);
1459                         if (_vm_page_wakeup(m)) {
1460                                 vm_page_spin_unlock(m);
1461                                 wakeup(m);
1462                         } else {
1463                                 vm_page_spin_unlock(m);
1464                         }
1465                 }
1466         }
1467         return (m);
1468 }
1469
1470 /*
1471  * Find a free or zero page, with specified preference.  We attempt to
1472  * inline the nominal case and fall back to _vm_page_select_free() 
1473  * otherwise.  A busied page is removed from the queue and returned.
1474  *
1475  * This routine may not block.
1476  */
1477 static __inline vm_page_t
1478 vm_page_select_free(u_short pg_color, boolean_t prefer_zero)
1479 {
1480         vm_page_t m;
1481
1482         for (;;) {
1483                 m = _vm_page_list_find(PQ_FREE, pg_color & PQ_L2_MASK,
1484                                        prefer_zero);
1485                 if (m == NULL)
1486                         break;
1487                 if (vm_page_busy_try(m, TRUE)) {
1488                         /*
1489                          * Various mechanisms such as a pmap_collect can
1490                          * result in a busy page on the free queue.  We
1491                          * have to move the page out of the way so we can
1492                          * retry the allocation.  If the other thread is not
1493                          * allocating the page then m->valid will remain 0 and
1494                          * the pageout daemon will free the page later on.
1495                          *
1496                          * Since we could not busy the page, however, we
1497                          * cannot make assumptions as to whether the page
1498                          * will be allocated by the other thread or not,
1499                          * so all we can do is deactivate it to move it out
1500                          * of the way.  In particular, if the other thread
1501                          * wires the page it may wind up on the inactive
1502                          * queue and the pageout daemon will have to deal
1503                          * with that case too.
1504                          */
1505                         _vm_page_deactivate_locked(m, 0);
1506                         vm_page_spin_unlock(m);
1507                 } else {
1508                         /*
1509                          * Theoretically if we are able to busy the page
1510                          * atomic with the queue removal (using the vm_page
1511                          * lock) nobody else should be able to mess with the
1512                          * page before us.
1513                          */
1514                         KKASSERT((m->flags & (PG_UNMANAGED |
1515                                               PG_NEED_COMMIT)) == 0);
1516                         KASSERT(m->hold_count == 0, ("m->hold_count is not zero "
1517                                                      "pg %p q=%d flags=%08x hold=%d wire=%d",
1518                                                      m, m->queue, m->flags, m->hold_count, m->wire_count));
1519                         KKASSERT(m->wire_count == 0);
1520                         vm_page_spin_unlock(m);
1521                         pagedaemon_wakeup();
1522
1523                         /* return busied and removed page */
1524                         return(m);
1525                 }
1526         }
1527         return(m);
1528 }
1529
1530 /*
1531  * This implements a per-cpu cache of free, zero'd, ready-to-go pages.
1532  * The idea is to populate this cache prior to acquiring any locks so
1533  * we don't wind up potentially zeroing VM pages (under heavy loads) while
1534  * holding potentialy contending locks.
1535  *
1536  * Note that we allocate the page uninserted into anything and use a pindex
1537  * of 0, the vm_page_alloc() will effectively add gd_cpuid so these
1538  * allocations should wind up being uncontended.  However, we still want
1539  * to rove across PQ_L2_SIZE.
1540  */
1541 void
1542 vm_page_pcpu_cache(void)
1543 {
1544 #if 0
1545         globaldata_t gd = mycpu;
1546         vm_page_t m;
1547
1548         if (gd->gd_vmpg_count < GD_MINVMPG) {
1549                 crit_enter_gd(gd);
1550                 while (gd->gd_vmpg_count < GD_MAXVMPG) {
1551                         m = vm_page_alloc(NULL, ticks & ~ncpus2_mask,
1552                                           VM_ALLOC_NULL_OK | VM_ALLOC_NORMAL |
1553                                           VM_ALLOC_NULL_OK | VM_ALLOC_ZERO);
1554                         if (gd->gd_vmpg_count < GD_MAXVMPG) {
1555                                 if ((m->flags & PG_ZERO) == 0) {
1556                                         pmap_zero_page(VM_PAGE_TO_PHYS(m));
1557                                         vm_page_flag_set(m, PG_ZERO);
1558                                 }
1559                                 gd->gd_vmpg_array[gd->gd_vmpg_count++] = m;
1560                         } else {
1561                                 vm_page_free(m);
1562                         }
1563                 }
1564                 crit_exit_gd(gd);
1565         }
1566 #endif
1567 }
1568
1569 /*
1570  * vm_page_alloc()
1571  *
1572  * Allocate and return a memory cell associated with this VM object/offset
1573  * pair.  If object is NULL an unassociated page will be allocated.
1574  *
1575  * The returned page will be busied and removed from its queues.  This
1576  * routine can block and may return NULL if a race occurs and the page
1577  * is found to already exist at the specified (object, pindex).
1578  *
1579  *      VM_ALLOC_NORMAL         allow use of cache pages, nominal free drain
1580  *      VM_ALLOC_QUICK          like normal but cannot use cache
1581  *      VM_ALLOC_SYSTEM         greater free drain
1582  *      VM_ALLOC_INTERRUPT      allow free list to be completely drained
1583  *      VM_ALLOC_ZERO           advisory request for pre-zero'd page only
1584  *      VM_ALLOC_FORCE_ZERO     advisory request for pre-zero'd page only
1585  *      VM_ALLOC_NULL_OK        ok to return NULL on insertion collision
1586  *                              (see vm_page_grab())
1587  *      VM_ALLOC_USE_GD         ok to use per-gd cache
1588  *
1589  * The object must be held if not NULL
1590  * This routine may not block
1591  *
1592  * Additional special handling is required when called from an interrupt
1593  * (VM_ALLOC_INTERRUPT).  We are not allowed to mess with the page cache
1594  * in this case.
1595  */
1596 vm_page_t
1597 vm_page_alloc(vm_object_t object, vm_pindex_t pindex, int page_req)
1598 {
1599         globaldata_t gd = mycpu;
1600         vm_object_t obj;
1601         vm_page_t m;
1602         u_short pg_color;
1603         int phys_id;
1604         int core_id;
1605         int object_pg_color;
1606
1607 #if 0
1608         /*
1609          * Special per-cpu free VM page cache.  The pages are pre-busied
1610          * and pre-zerod for us.
1611          */
1612         if (gd->gd_vmpg_count && (page_req & VM_ALLOC_USE_GD)) {
1613                 crit_enter_gd(gd);
1614                 if (gd->gd_vmpg_count) {
1615                         m = gd->gd_vmpg_array[--gd->gd_vmpg_count];
1616                         crit_exit_gd(gd);
1617                         goto done;
1618                 }
1619                 crit_exit_gd(gd);
1620         }
1621 #endif
1622         m = NULL;
1623
1624         /*
1625          * CPU LOCALIZATION
1626          *
1627          * CPU localization algorithm.  Break the page queues up by physical
1628          * id and core id (note that two cpu threads will have the same core
1629          * id, and core_id != gd_cpuid).
1630          *
1631          * This is nowhere near perfect, for example the last pindex in a
1632          * subgroup will overflow into the next cpu or package.  But this
1633          * should get us good page reuse locality in heavy mixed loads.
1634          */
1635         phys_id = get_cpu_phys_id(gd->gd_cpuid);
1636         core_id = get_cpu_core_id(gd->gd_cpuid);
1637         object_pg_color = object ? object->pg_color : 0;
1638
1639         if (cpu_topology_phys_ids && cpu_topology_core_ids) {
1640                 if (PQ_L2_SIZE / ncpus >= 16) {
1641                         /*
1642                          * Enough space for a full break-down.
1643                          */
1644                         pg_color = PQ_L2_SIZE * core_id /
1645                                    cpu_topology_core_ids;
1646                         pg_color += PQ_L2_SIZE * phys_id *
1647                                     cpu_topology_core_ids /
1648                                     cpu_topology_phys_ids;
1649                         pg_color += (pindex + object_pg_color) %
1650                                     (PQ_L2_SIZE / (cpu_topology_core_ids *
1651                                                    cpu_topology_phys_ids));
1652                 } else {
1653                         /*
1654                          * Hopefully enough space to at least break the
1655                          * queues down by package id.
1656                          */
1657                         pg_color = PQ_L2_SIZE * phys_id / cpu_topology_phys_ids;
1658                         pg_color += (pindex + object_pg_color) %
1659                                     (PQ_L2_SIZE / cpu_topology_phys_ids);
1660                 }
1661         } else {
1662                 /*
1663                  * Unknown topology, distribute things evenly.
1664                  */
1665                 pg_color = gd->gd_cpuid * PQ_L2_SIZE / ncpus;
1666                 pg_color += pindex + object_pg_color;
1667         }
1668
1669         KKASSERT(page_req & 
1670                 (VM_ALLOC_NORMAL|VM_ALLOC_QUICK|
1671                  VM_ALLOC_INTERRUPT|VM_ALLOC_SYSTEM));
1672
1673         /*
1674          * Certain system threads (pageout daemon, buf_daemon's) are
1675          * allowed to eat deeper into the free page list.
1676          */
1677         if (curthread->td_flags & TDF_SYSTHREAD)
1678                 page_req |= VM_ALLOC_SYSTEM;
1679
1680         /*
1681          * Impose various limitations.  Note that the v_free_reserved test
1682          * must match the opposite of vm_page_count_target() to avoid
1683          * livelocks, be careful.
1684          */
1685 loop:
1686         if (vmstats.v_free_count >= vmstats.v_free_reserved ||
1687             ((page_req & VM_ALLOC_INTERRUPT) && vmstats.v_free_count > 0) ||
1688             ((page_req & VM_ALLOC_SYSTEM) && vmstats.v_cache_count == 0 &&
1689                 vmstats.v_free_count > vmstats.v_interrupt_free_min)
1690         ) {
1691                 /*
1692                  * The free queue has sufficient free pages to take one out.
1693                  */
1694                 if (page_req & (VM_ALLOC_ZERO | VM_ALLOC_FORCE_ZERO))
1695                         m = vm_page_select_free(pg_color, TRUE);
1696                 else
1697                         m = vm_page_select_free(pg_color, FALSE);
1698         } else if (page_req & VM_ALLOC_NORMAL) {
1699                 /*
1700                  * Allocatable from the cache (non-interrupt only).  On
1701                  * success, we must free the page and try again, thus
1702                  * ensuring that vmstats.v_*_free_min counters are replenished.
1703                  */
1704 #ifdef INVARIANTS
1705                 if (curthread->td_preempted) {
1706                         kprintf("vm_page_alloc(): warning, attempt to allocate"
1707                                 " cache page from preempting interrupt\n");
1708                         m = NULL;
1709                 } else {
1710                         m = vm_page_select_cache(pg_color);
1711                 }
1712 #else
1713                 m = vm_page_select_cache(pg_color);
1714 #endif
1715                 /*
1716                  * On success move the page into the free queue and loop.
1717                  *
1718                  * Only do this if we can safely acquire the vm_object lock,
1719                  * because this is effectively a random page and the caller
1720                  * might be holding the lock shared, we don't want to
1721                  * deadlock.
1722                  */
1723                 if (m != NULL) {
1724                         KASSERT(m->dirty == 0,
1725                                 ("Found dirty cache page %p", m));
1726                         if ((obj = m->object) != NULL) {
1727                                 if (vm_object_hold_try(obj)) {
1728                                         vm_page_protect(m, VM_PROT_NONE);
1729                                         vm_page_free(m);
1730                                         /* m->object NULL here */
1731                                         vm_object_drop(obj);
1732                                 } else {
1733                                         vm_page_deactivate(m);
1734                                         vm_page_wakeup(m);
1735                                 }
1736                         } else {
1737                                 vm_page_protect(m, VM_PROT_NONE);
1738                                 vm_page_free(m);
1739                         }
1740                         goto loop;
1741                 }
1742
1743                 /*
1744                  * On failure return NULL
1745                  */
1746 #if defined(DIAGNOSTIC)
1747                 if (vmstats.v_cache_count > 0)
1748                         kprintf("vm_page_alloc(NORMAL): missing pages on cache queue: %d\n", vmstats.v_cache_count);
1749 #endif
1750                 vm_pageout_deficit++;
1751                 pagedaemon_wakeup();
1752                 return (NULL);
1753         } else {
1754                 /*
1755                  * No pages available, wakeup the pageout daemon and give up.
1756                  */
1757                 vm_pageout_deficit++;
1758                 pagedaemon_wakeup();
1759                 return (NULL);
1760         }
1761
1762         /*
1763          * v_free_count can race so loop if we don't find the expected
1764          * page.
1765          */
1766         if (m == NULL)
1767                 goto loop;
1768
1769         /*
1770          * Good page found.  The page has already been busied for us and
1771          * removed from its queues.
1772          */
1773         KASSERT(m->dirty == 0,
1774                 ("vm_page_alloc: free/cache page %p was dirty", m));
1775         KKASSERT(m->queue == PQ_NONE);
1776
1777 #if 0
1778 done:
1779 #endif
1780         /*
1781          * Initialize the structure, inheriting some flags but clearing
1782          * all the rest.  The page has already been busied for us.
1783          */
1784         vm_page_flag_clear(m, ~(PG_ZERO | PG_BUSY | PG_SBUSY));
1785         KKASSERT(m->wire_count == 0);
1786         KKASSERT(m->busy == 0);
1787         m->act_count = 0;
1788         m->valid = 0;
1789
1790         /*
1791          * Caller must be holding the object lock (asserted by
1792          * vm_page_insert()).
1793          *
1794          * NOTE: Inserting a page here does not insert it into any pmaps
1795          *       (which could cause us to block allocating memory).
1796          *
1797          * NOTE: If no object an unassociated page is allocated, m->pindex
1798          *       can be used by the caller for any purpose.
1799          */
1800         if (object) {
1801                 if (vm_page_insert(m, object, pindex) == FALSE) {
1802                         vm_page_free(m);
1803                         if ((page_req & VM_ALLOC_NULL_OK) == 0)
1804                                 panic("PAGE RACE %p[%ld]/%p",
1805                                       object, (long)pindex, m);
1806                         m = NULL;
1807                 }
1808         } else {
1809                 m->pindex = pindex;
1810         }
1811
1812         /*
1813          * Don't wakeup too often - wakeup the pageout daemon when
1814          * we would be nearly out of memory.
1815          */
1816         pagedaemon_wakeup();
1817
1818         /*
1819          * A PG_BUSY page is returned.
1820          */
1821         return (m);
1822 }
1823
1824 /*
1825  * Returns number of pages available in our DMA memory reserve
1826  * (adjusted with vm.dma_reserved=<value>m in /boot/loader.conf)
1827  */
1828 vm_size_t
1829 vm_contig_avail_pages(void)
1830 {
1831         alist_blk_t blk;
1832         alist_blk_t count;
1833         alist_blk_t bfree;
1834         spin_lock(&vm_contig_spin);
1835         bfree = alist_free_info(&vm_contig_alist, &blk, &count);
1836         spin_unlock(&vm_contig_spin);
1837
1838         return bfree;
1839 }
1840
1841 /*
1842  * Attempt to allocate contiguous physical memory with the specified
1843  * requirements.
1844  */
1845 vm_page_t
1846 vm_page_alloc_contig(vm_paddr_t low, vm_paddr_t high,
1847                      unsigned long alignment, unsigned long boundary,
1848                      unsigned long size, vm_memattr_t memattr)
1849 {
1850         alist_blk_t blk;
1851         vm_page_t m;
1852         int i;
1853
1854         alignment >>= PAGE_SHIFT;
1855         if (alignment == 0)
1856                 alignment = 1;
1857         boundary >>= PAGE_SHIFT;
1858         if (boundary == 0)
1859                 boundary = 1;
1860         size = (size + PAGE_MASK) >> PAGE_SHIFT;
1861
1862         spin_lock(&vm_contig_spin);
1863         blk = alist_alloc(&vm_contig_alist, 0, size);
1864         if (blk == ALIST_BLOCK_NONE) {
1865                 spin_unlock(&vm_contig_spin);
1866                 if (bootverbose) {
1867                         kprintf("vm_page_alloc_contig: %ldk nospace\n",
1868                                 (size + PAGE_MASK) * (PAGE_SIZE / 1024));
1869                 }
1870                 return(NULL);
1871         }
1872         if (high && ((vm_paddr_t)(blk + size) << PAGE_SHIFT) > high) {
1873                 alist_free(&vm_contig_alist, blk, size);
1874                 spin_unlock(&vm_contig_spin);
1875                 if (bootverbose) {
1876                         kprintf("vm_page_alloc_contig: %ldk high "
1877                                 "%016jx failed\n",
1878                                 (size + PAGE_MASK) * (PAGE_SIZE / 1024),
1879                                 (intmax_t)high);
1880                 }
1881                 return(NULL);
1882         }
1883         spin_unlock(&vm_contig_spin);
1884         if (vm_contig_verbose) {
1885                 kprintf("vm_page_alloc_contig: %016jx/%ldk\n",
1886                         (intmax_t)(vm_paddr_t)blk << PAGE_SHIFT,
1887                         (size + PAGE_MASK) * (PAGE_SIZE / 1024));
1888         }
1889
1890         m = PHYS_TO_VM_PAGE((vm_paddr_t)blk << PAGE_SHIFT);
1891         if (memattr != VM_MEMATTR_DEFAULT)
1892                 for (i = 0;i < size;i++)
1893                         pmap_page_set_memattr(&m[i], memattr);
1894         return m;
1895 }
1896
1897 /*
1898  * Free contiguously allocated pages.  The pages will be wired but not busy.
1899  * When freeing to the alist we leave them wired and not busy.
1900  */
1901 void
1902 vm_page_free_contig(vm_page_t m, unsigned long size)
1903 {
1904         vm_paddr_t pa = VM_PAGE_TO_PHYS(m);
1905         vm_pindex_t start = pa >> PAGE_SHIFT;
1906         vm_pindex_t pages = (size + PAGE_MASK) >> PAGE_SHIFT;
1907
1908         if (vm_contig_verbose) {
1909                 kprintf("vm_page_free_contig:  %016jx/%ldk\n",
1910                         (intmax_t)pa, size / 1024);
1911         }
1912         if (pa < vm_low_phys_reserved) {
1913                 KKASSERT(pa + size <= vm_low_phys_reserved);
1914                 spin_lock(&vm_contig_spin);
1915                 alist_free(&vm_contig_alist, start, pages);
1916                 spin_unlock(&vm_contig_spin);
1917         } else {
1918                 while (pages) {
1919                         vm_page_busy_wait(m, FALSE, "cpgfr");
1920                         vm_page_unwire(m, 0);
1921                         vm_page_free(m);
1922                         --pages;
1923                         ++m;
1924                 }
1925
1926         }
1927 }
1928
1929
1930 /*
1931  * Wait for sufficient free memory for nominal heavy memory use kernel
1932  * operations.
1933  *
1934  * WARNING!  Be sure never to call this in any vm_pageout code path, which
1935  *           will trivially deadlock the system.
1936  */
1937 void
1938 vm_wait_nominal(void)
1939 {
1940         while (vm_page_count_min(0))
1941                 vm_wait(0);
1942 }
1943
1944 /*
1945  * Test if vm_wait_nominal() would block.
1946  */
1947 int
1948 vm_test_nominal(void)
1949 {
1950         if (vm_page_count_min(0))
1951                 return(1);
1952         return(0);
1953 }
1954
1955 /*
1956  * Block until free pages are available for allocation, called in various
1957  * places before memory allocations.
1958  *
1959  * The caller may loop if vm_page_count_min() == FALSE so we cannot be
1960  * more generous then that.
1961  */
1962 void
1963 vm_wait(int timo)
1964 {
1965         /*
1966          * never wait forever
1967          */
1968         if (timo == 0)
1969                 timo = hz;
1970         lwkt_gettoken(&vm_token);
1971
1972         if (curthread == pagethread) {
1973                 /*
1974                  * The pageout daemon itself needs pages, this is bad.
1975                  */
1976                 if (vm_page_count_min(0)) {
1977                         vm_pageout_pages_needed = 1;
1978                         tsleep(&vm_pageout_pages_needed, 0, "VMWait", timo);
1979                 }
1980         } else {
1981                 /*
1982                  * Wakeup the pageout daemon if necessary and wait.
1983                  *
1984                  * Do not wait indefinitely for the target to be reached,
1985                  * as load might prevent it from being reached any time soon.
1986                  * But wait a little to try to slow down page allocations
1987                  * and to give more important threads (the pagedaemon)
1988                  * allocation priority.
1989                  */
1990                 if (vm_page_count_target()) {
1991                         if (vm_pages_needed == 0) {
1992                                 vm_pages_needed = 1;
1993                                 wakeup(&vm_pages_needed);
1994                         }
1995                         ++vm_pages_waiting;     /* SMP race ok */
1996                         tsleep(&vmstats.v_free_count, 0, "vmwait", timo);
1997                 }
1998         }
1999         lwkt_reltoken(&vm_token);
2000 }
2001
2002 /*
2003  * Block until free pages are available for allocation
2004  *
2005  * Called only from vm_fault so that processes page faulting can be
2006  * easily tracked.
2007  */
2008 void
2009 vm_wait_pfault(void)
2010 {
2011         /*
2012          * Wakeup the pageout daemon if necessary and wait.
2013          *
2014          * Do not wait indefinitely for the target to be reached,
2015          * as load might prevent it from being reached any time soon.
2016          * But wait a little to try to slow down page allocations
2017          * and to give more important threads (the pagedaemon)
2018          * allocation priority.
2019          */
2020         if (vm_page_count_min(0)) {
2021                 lwkt_gettoken(&vm_token);
2022                 while (vm_page_count_severe()) {
2023                         if (vm_page_count_target()) {
2024                                 if (vm_pages_needed == 0) {
2025                                         vm_pages_needed = 1;
2026                                         wakeup(&vm_pages_needed);
2027                                 }
2028                                 ++vm_pages_waiting;     /* SMP race ok */
2029                                 tsleep(&vmstats.v_free_count, 0, "pfault", hz);
2030                         }
2031                 }
2032                 lwkt_reltoken(&vm_token);
2033         }
2034 }
2035
2036 /*
2037  * Put the specified page on the active list (if appropriate).  Ensure
2038  * that act_count is at least ACT_INIT but do not otherwise mess with it.
2039  *
2040  * The caller should be holding the page busied ? XXX
2041  * This routine may not block.
2042  */
2043 void
2044 vm_page_activate(vm_page_t m)
2045 {
2046         u_short oqueue;
2047
2048         vm_page_spin_lock(m);
2049         if (m->queue - m->pc != PQ_ACTIVE) {
2050                 _vm_page_queue_spin_lock(m);
2051                 oqueue = _vm_page_rem_queue_spinlocked(m);
2052                 /* page is left spinlocked, queue is unlocked */
2053
2054                 if (oqueue == PQ_CACHE)
2055                         mycpu->gd_cnt.v_reactivated++;
2056                 if (m->wire_count == 0 && (m->flags & PG_UNMANAGED) == 0) {
2057                         if (m->act_count < ACT_INIT)
2058                                 m->act_count = ACT_INIT;
2059                         _vm_page_add_queue_spinlocked(m, PQ_ACTIVE + m->pc, 0);
2060                 }
2061                 _vm_page_and_queue_spin_unlock(m);
2062                 if (oqueue == PQ_CACHE || oqueue == PQ_FREE)
2063                         pagedaemon_wakeup();
2064         } else {
2065                 if (m->act_count < ACT_INIT)
2066                         m->act_count = ACT_INIT;
2067                 vm_page_spin_unlock(m);
2068         }
2069 }
2070
2071 /*
2072  * Helper routine for vm_page_free_toq() and vm_page_cache().  This
2073  * routine is called when a page has been added to the cache or free
2074  * queues.
2075  *
2076  * This routine may not block.
2077  */
2078 static __inline void
2079 vm_page_free_wakeup(void)
2080 {
2081         /*
2082          * If the pageout daemon itself needs pages, then tell it that
2083          * there are some free.
2084          */
2085         if (vm_pageout_pages_needed &&
2086             vmstats.v_cache_count + vmstats.v_free_count >= 
2087             vmstats.v_pageout_free_min
2088         ) {
2089                 vm_pageout_pages_needed = 0;
2090                 wakeup(&vm_pageout_pages_needed);
2091         }
2092
2093         /*
2094          * Wakeup processes that are waiting on memory.
2095          *
2096          * Generally speaking we want to wakeup stuck processes as soon as
2097          * possible.  !vm_page_count_min(0) is the absolute minimum point
2098          * where we can do this.  Wait a bit longer to reduce degenerate
2099          * re-blocking (vm_page_free_hysteresis).  The target check is just
2100          * to make sure the min-check w/hysteresis does not exceed the
2101          * normal target.
2102          */
2103         if (vm_pages_waiting) {
2104                 if (!vm_page_count_min(vm_page_free_hysteresis) ||
2105                     !vm_page_count_target()) {
2106                         vm_pages_waiting = 0;
2107                         wakeup(&vmstats.v_free_count);
2108                         ++mycpu->gd_cnt.v_ppwakeups;
2109                 }
2110 #if 0
2111                 if (!vm_page_count_target()) {
2112                         /*
2113                          * Plenty of pages are free, wakeup everyone.
2114                          */
2115                         vm_pages_waiting = 0;
2116                         wakeup(&vmstats.v_free_count);
2117                         ++mycpu->gd_cnt.v_ppwakeups;
2118                 } else if (!vm_page_count_min(0)) {
2119                         /*
2120                          * Some pages are free, wakeup someone.
2121                          */
2122                         int wcount = vm_pages_waiting;
2123                         if (wcount > 0)
2124                                 --wcount;
2125                         vm_pages_waiting = wcount;
2126                         wakeup_one(&vmstats.v_free_count);
2127                         ++mycpu->gd_cnt.v_ppwakeups;
2128                 }
2129 #endif
2130         }
2131 }
2132
2133 /*
2134  * Returns the given page to the PQ_FREE or PQ_HOLD list and disassociates
2135  * it from its VM object.
2136  *
2137  * The vm_page must be PG_BUSY on entry.  PG_BUSY will be released on
2138  * return (the page will have been freed).
2139  */
2140 void
2141 vm_page_free_toq(vm_page_t m)
2142 {
2143         mycpu->gd_cnt.v_tfree++;
2144         KKASSERT((m->flags & PG_MAPPED) == 0);
2145         KKASSERT(m->flags & PG_BUSY);
2146
2147         if (m->busy || ((m->queue - m->pc) == PQ_FREE)) {
2148                 kprintf("vm_page_free: pindex(%lu), busy(%d), "
2149                         "PG_BUSY(%d), hold(%d)\n",
2150                         (u_long)m->pindex, m->busy,
2151                         ((m->flags & PG_BUSY) ? 1 : 0), m->hold_count);
2152                 if ((m->queue - m->pc) == PQ_FREE)
2153                         panic("vm_page_free: freeing free page");
2154                 else
2155                         panic("vm_page_free: freeing busy page");
2156         }
2157
2158         /*
2159          * Remove from object, spinlock the page and its queues and
2160          * remove from any queue.  No queue spinlock will be held
2161          * after this section (because the page was removed from any
2162          * queue).
2163          */
2164         vm_page_remove(m);
2165         vm_page_and_queue_spin_lock(m);
2166         _vm_page_rem_queue_spinlocked(m);
2167
2168         /*
2169          * No further management of fictitious pages occurs beyond object
2170          * and queue removal.
2171          */
2172         if ((m->flags & PG_FICTITIOUS) != 0) {
2173                 vm_page_spin_unlock(m);
2174                 vm_page_wakeup(m);
2175                 return;
2176         }
2177
2178         m->valid = 0;
2179         vm_page_undirty(m);
2180
2181         if (m->wire_count != 0) {
2182                 if (m->wire_count > 1) {
2183                     panic(
2184                         "vm_page_free: invalid wire count (%d), pindex: 0x%lx",
2185                         m->wire_count, (long)m->pindex);
2186                 }
2187                 panic("vm_page_free: freeing wired page");
2188         }
2189
2190         /*
2191          * Clear the UNMANAGED flag when freeing an unmanaged page.
2192          * Clear the NEED_COMMIT flag
2193          */
2194         if (m->flags & PG_UNMANAGED)
2195                 vm_page_flag_clear(m, PG_UNMANAGED);
2196         if (m->flags & PG_NEED_COMMIT)
2197                 vm_page_flag_clear(m, PG_NEED_COMMIT);
2198
2199         if (m->hold_count != 0) {
2200                 vm_page_flag_clear(m, PG_ZERO);
2201                 _vm_page_add_queue_spinlocked(m, PQ_HOLD + m->pc, 0);
2202         } else {
2203                 _vm_page_add_queue_spinlocked(m, PQ_FREE + m->pc, 0);
2204         }
2205
2206         /*
2207          * This sequence allows us to clear PG_BUSY while still holding
2208          * its spin lock, which reduces contention vs allocators.  We
2209          * must not leave the queue locked or _vm_page_wakeup() may
2210          * deadlock.
2211          */
2212         _vm_page_queue_spin_unlock(m);
2213         if (_vm_page_wakeup(m)) {
2214                 vm_page_spin_unlock(m);
2215                 wakeup(m);
2216         } else {
2217                 vm_page_spin_unlock(m);
2218         }
2219         vm_page_free_wakeup();
2220 }
2221
2222 /*
2223  * vm_page_free_fromq_fast()
2224  *
2225  * Remove a non-zero page from one of the free queues; the page is removed for
2226  * zeroing, so do not issue a wakeup.
2227  */
2228 vm_page_t
2229 vm_page_free_fromq_fast(void)
2230 {
2231         static int qi;
2232         vm_page_t m;
2233         int i;
2234
2235         for (i = 0; i < PQ_L2_SIZE; ++i) {
2236                 m = vm_page_list_find(PQ_FREE, qi, FALSE);
2237                 /* page is returned spinlocked and removed from its queue */
2238                 if (m) {
2239                         if (vm_page_busy_try(m, TRUE)) {
2240                                 /*
2241                                  * We were unable to busy the page, deactivate
2242                                  * it and loop.
2243                                  */
2244                                 _vm_page_deactivate_locked(m, 0);
2245                                 vm_page_spin_unlock(m);
2246                         } else if (m->flags & PG_ZERO) {
2247                                 /*
2248                                  * The page is already PG_ZERO, requeue it
2249                                  * and loop.
2250                                  */
2251                                 _vm_page_add_queue_spinlocked(m,
2252                                                               PQ_FREE + m->pc,
2253                                                               0);
2254                                 vm_page_queue_spin_unlock(m);
2255                                 if (_vm_page_wakeup(m)) {
2256                                         vm_page_spin_unlock(m);
2257                                         wakeup(m);
2258                                 } else {
2259                                         vm_page_spin_unlock(m);
2260                                 }
2261                         } else {
2262                                 /*
2263                                  * The page is not PG_ZERO'd so return it.
2264                                  */
2265                                 KKASSERT((m->flags & (PG_UNMANAGED |
2266                                                       PG_NEED_COMMIT)) == 0);
2267                                 KKASSERT(m->hold_count == 0);
2268                                 KKASSERT(m->wire_count == 0);
2269                                 vm_page_spin_unlock(m);
2270                                 break;
2271                         }
2272                         m = NULL;
2273                 }
2274                 qi = (qi + PQ_PRIME2) & PQ_L2_MASK;
2275         }
2276         return (m);
2277 }
2278
2279 /*
2280  * vm_page_unmanage()
2281  *
2282  * Prevent PV management from being done on the page.  The page is
2283  * removed from the paging queues as if it were wired, and as a 
2284  * consequence of no longer being managed the pageout daemon will not
2285  * touch it (since there is no way to locate the pte mappings for the
2286  * page).  madvise() calls that mess with the pmap will also no longer
2287  * operate on the page.
2288  *
2289  * Beyond that the page is still reasonably 'normal'.  Freeing the page
2290  * will clear the flag.
2291  *
2292  * This routine is used by OBJT_PHYS objects - objects using unswappable
2293  * physical memory as backing store rather then swap-backed memory and
2294  * will eventually be extended to support 4MB unmanaged physical 
2295  * mappings.
2296  *
2297  * Caller must be holding the page busy.
2298  */
2299 void
2300 vm_page_unmanage(vm_page_t m)
2301 {
2302         KKASSERT(m->flags & PG_BUSY);
2303         if ((m->flags & PG_UNMANAGED) == 0) {
2304                 if (m->wire_count == 0)
2305                         vm_page_unqueue(m);
2306         }
2307         vm_page_flag_set(m, PG_UNMANAGED);
2308 }
2309
2310 /*
2311  * Mark this page as wired down by yet another map, removing it from
2312  * paging queues as necessary.
2313  *
2314  * Caller must be holding the page busy.
2315  */
2316 void
2317 vm_page_wire(vm_page_t m)
2318 {
2319         /*
2320          * Only bump the wire statistics if the page is not already wired,
2321          * and only unqueue the page if it is on some queue (if it is unmanaged
2322          * it is already off the queues).  Don't do anything with fictitious
2323          * pages because they are always wired.
2324          */
2325         KKASSERT(m->flags & PG_BUSY);
2326         if ((m->flags & PG_FICTITIOUS) == 0) {
2327                 if (atomic_fetchadd_int(&m->wire_count, 1) == 0) {
2328                         if ((m->flags & PG_UNMANAGED) == 0)
2329                                 vm_page_unqueue(m);
2330                         atomic_add_int(&vmstats.v_wire_count, 1);
2331                 }
2332                 KASSERT(m->wire_count != 0,
2333                         ("vm_page_wire: wire_count overflow m=%p", m));
2334         }
2335 }
2336
2337 /*
2338  * Release one wiring of this page, potentially enabling it to be paged again.
2339  *
2340  * Many pages placed on the inactive queue should actually go
2341  * into the cache, but it is difficult to figure out which.  What
2342  * we do instead, if the inactive target is well met, is to put
2343  * clean pages at the head of the inactive queue instead of the tail.
2344  * This will cause them to be moved to the cache more quickly and
2345  * if not actively re-referenced, freed more quickly.  If we just
2346  * stick these pages at the end of the inactive queue, heavy filesystem
2347  * meta-data accesses can cause an unnecessary paging load on memory bound 
2348  * processes.  This optimization causes one-time-use metadata to be
2349  * reused more quickly.
2350  *
2351  * Pages marked PG_NEED_COMMIT are always activated and never placed on
2352  * the inactive queue.  This helps the pageout daemon determine memory
2353  * pressure and act on out-of-memory situations more quickly.
2354  *
2355  * BUT, if we are in a low-memory situation we have no choice but to
2356  * put clean pages on the cache queue.
2357  *
2358  * A number of routines use vm_page_unwire() to guarantee that the page
2359  * will go into either the inactive or active queues, and will NEVER
2360  * be placed in the cache - for example, just after dirtying a page.
2361  * dirty pages in the cache are not allowed.
2362  *
2363  * This routine may not block.
2364  */
2365 void
2366 vm_page_unwire(vm_page_t m, int activate)
2367 {
2368         KKASSERT(m->flags & PG_BUSY);
2369         if (m->flags & PG_FICTITIOUS) {
2370                 /* do nothing */
2371         } else if (m->wire_count <= 0) {
2372                 panic("vm_page_unwire: invalid wire count: %d", m->wire_count);
2373         } else {
2374                 if (atomic_fetchadd_int(&m->wire_count, -1) == 1) {
2375                         atomic_add_int(&vmstats.v_wire_count, -1);
2376                         if (m->flags & PG_UNMANAGED) {
2377                                 ;
2378                         } else if (activate || (m->flags & PG_NEED_COMMIT)) {
2379                                 vm_page_spin_lock(m);
2380                                 _vm_page_add_queue_spinlocked(m,
2381                                                         PQ_ACTIVE + m->pc, 0);
2382                                 _vm_page_and_queue_spin_unlock(m);
2383                         } else {
2384                                 vm_page_spin_lock(m);
2385                                 vm_page_flag_clear(m, PG_WINATCFLS);
2386                                 _vm_page_add_queue_spinlocked(m,
2387                                                         PQ_INACTIVE + m->pc, 0);
2388                                 ++vm_swapcache_inactive_heuristic;
2389                                 _vm_page_and_queue_spin_unlock(m);
2390                         }
2391                 }
2392         }
2393 }
2394
2395 /*
2396  * Move the specified page to the inactive queue.  If the page has
2397  * any associated swap, the swap is deallocated.
2398  *
2399  * Normally athead is 0 resulting in LRU operation.  athead is set
2400  * to 1 if we want this page to be 'as if it were placed in the cache',
2401  * except without unmapping it from the process address space.
2402  *
2403  * vm_page's spinlock must be held on entry and will remain held on return.
2404  * This routine may not block.
2405  */
2406 static void
2407 _vm_page_deactivate_locked(vm_page_t m, int athead)
2408 {
2409         u_short oqueue;
2410
2411         /*
2412          * Ignore if already inactive.
2413          */
2414         if (m->queue - m->pc == PQ_INACTIVE)
2415                 return;
2416         _vm_page_queue_spin_lock(m);
2417         oqueue = _vm_page_rem_queue_spinlocked(m);
2418
2419         if (m->wire_count == 0 && (m->flags & PG_UNMANAGED) == 0) {
2420                 if (oqueue == PQ_CACHE)
2421                         mycpu->gd_cnt.v_reactivated++;
2422                 vm_page_flag_clear(m, PG_WINATCFLS);
2423                 _vm_page_add_queue_spinlocked(m, PQ_INACTIVE + m->pc, athead);
2424                 if (athead == 0)
2425                         ++vm_swapcache_inactive_heuristic;
2426         }
2427         /* NOTE: PQ_NONE if condition not taken */
2428         _vm_page_queue_spin_unlock(m);
2429         /* leaves vm_page spinlocked */
2430 }
2431
2432 /*
2433  * Attempt to deactivate a page.
2434  *
2435  * No requirements.
2436  */
2437 void
2438 vm_page_deactivate(vm_page_t m)
2439 {
2440         vm_page_spin_lock(m);
2441         _vm_page_deactivate_locked(m, 0);
2442         vm_page_spin_unlock(m);
2443 }
2444
2445 void
2446 vm_page_deactivate_locked(vm_page_t m)
2447 {
2448         _vm_page_deactivate_locked(m, 0);
2449 }
2450
2451 /*
2452  * Attempt to move a page to PQ_CACHE.
2453  *
2454  * Returns 0 on failure, 1 on success
2455  *
2456  * The page should NOT be busied by the caller.  This function will validate
2457  * whether the page can be safely moved to the cache.
2458  */
2459 int
2460 vm_page_try_to_cache(vm_page_t m)
2461 {
2462         vm_page_spin_lock(m);
2463         if (vm_page_busy_try(m, TRUE)) {
2464                 vm_page_spin_unlock(m);
2465                 return(0);
2466         }
2467         if (m->dirty || m->hold_count || m->wire_count ||
2468             (m->flags & (PG_UNMANAGED | PG_NEED_COMMIT))) {
2469                 if (_vm_page_wakeup(m)) {
2470                         vm_page_spin_unlock(m);
2471                         wakeup(m);
2472                 } else {
2473                         vm_page_spin_unlock(m);
2474                 }
2475                 return(0);
2476         }
2477         vm_page_spin_unlock(m);
2478
2479         /*
2480          * Page busied by us and no longer spinlocked.  Dirty pages cannot
2481          * be moved to the cache.
2482          */
2483         vm_page_test_dirty(m);
2484         if (m->dirty || (m->flags & PG_NEED_COMMIT)) {
2485                 vm_page_wakeup(m);
2486                 return(0);
2487         }
2488         vm_page_cache(m);
2489         return(1);
2490 }
2491
2492 /*
2493  * Attempt to free the page.  If we cannot free it, we do nothing.
2494  * 1 is returned on success, 0 on failure.
2495  *
2496  * No requirements.
2497  */
2498 int
2499 vm_page_try_to_free(vm_page_t m)
2500 {
2501         vm_page_spin_lock(m);
2502         if (vm_page_busy_try(m, TRUE)) {
2503                 vm_page_spin_unlock(m);
2504                 return(0);
2505         }
2506
2507         /*
2508          * The page can be in any state, including already being on the free
2509          * queue.  Check to see if it really can be freed.
2510          */
2511         if (m->dirty ||                         /* can't free if it is dirty */
2512             m->hold_count ||                    /* or held (XXX may be wrong) */
2513             m->wire_count ||                    /* or wired */
2514             (m->flags & (PG_UNMANAGED |         /* or unmanaged */
2515                          PG_NEED_COMMIT)) ||    /* or needs a commit */
2516             m->queue - m->pc == PQ_FREE ||      /* already on PQ_FREE */
2517             m->queue - m->pc == PQ_HOLD) {      /* already on PQ_HOLD */
2518                 if (_vm_page_wakeup(m)) {
2519                         vm_page_spin_unlock(m);
2520                         wakeup(m);
2521                 } else {
2522                         vm_page_spin_unlock(m);
2523                 }
2524                 return(0);
2525         }
2526         vm_page_spin_unlock(m);
2527
2528         /*
2529          * We can probably free the page.
2530          *
2531          * Page busied by us and no longer spinlocked.  Dirty pages will
2532          * not be freed by this function.    We have to re-test the
2533          * dirty bit after cleaning out the pmaps.
2534          */
2535         vm_page_test_dirty(m);
2536         if (m->dirty || (m->flags & PG_NEED_COMMIT)) {
2537                 vm_page_wakeup(m);
2538                 return(0);
2539         }
2540         vm_page_protect(m, VM_PROT_NONE);
2541         if (m->dirty || (m->flags & PG_NEED_COMMIT)) {
2542                 vm_page_wakeup(m);
2543                 return(0);
2544         }
2545         vm_page_free(m);
2546         return(1);
2547 }
2548
2549 /*
2550  * vm_page_cache
2551  *
2552  * Put the specified page onto the page cache queue (if appropriate).
2553  *
2554  * The page must be busy, and this routine will release the busy and
2555  * possibly even free the page.
2556  */
2557 void
2558 vm_page_cache(vm_page_t m)
2559 {
2560         if ((m->flags & (PG_UNMANAGED | PG_NEED_COMMIT)) ||
2561             m->busy || m->wire_count || m->hold_count) {
2562                 kprintf("vm_page_cache: attempting to cache busy/held page\n");
2563                 vm_page_wakeup(m);
2564                 return;
2565         }
2566
2567         /*
2568          * Already in the cache (and thus not mapped)
2569          */
2570         if ((m->queue - m->pc) == PQ_CACHE) {
2571                 KKASSERT((m->flags & PG_MAPPED) == 0);
2572                 vm_page_wakeup(m);
2573                 return;
2574         }
2575
2576         /*
2577          * Caller is required to test m->dirty, but note that the act of
2578          * removing the page from its maps can cause it to become dirty
2579          * on an SMP system due to another cpu running in usermode.
2580          */
2581         if (m->dirty) {
2582                 panic("vm_page_cache: caching a dirty page, pindex: %ld",
2583                         (long)m->pindex);
2584         }
2585
2586         /*
2587          * Remove all pmaps and indicate that the page is not
2588          * writeable or mapped.  Our vm_page_protect() call may
2589          * have blocked (especially w/ VM_PROT_NONE), so recheck
2590          * everything.
2591          */
2592         vm_page_protect(m, VM_PROT_NONE);
2593         if ((m->flags & (PG_UNMANAGED | PG_MAPPED)) ||
2594             m->busy || m->wire_count || m->hold_count) {
2595                 vm_page_wakeup(m);
2596         } else if (m->dirty || (m->flags & PG_NEED_COMMIT)) {
2597                 vm_page_deactivate(m);
2598                 vm_page_wakeup(m);
2599         } else {
2600                 _vm_page_and_queue_spin_lock(m);
2601                 _vm_page_rem_queue_spinlocked(m);
2602                 _vm_page_add_queue_spinlocked(m, PQ_CACHE + m->pc, 0);
2603                 _vm_page_queue_spin_unlock(m);
2604                 if (_vm_page_wakeup(m)) {
2605                         vm_page_spin_unlock(m);
2606                         wakeup(m);
2607                 } else {
2608                         vm_page_spin_unlock(m);
2609                 }
2610                 vm_page_free_wakeup();
2611         }
2612 }
2613
2614 /*
2615  * vm_page_dontneed()
2616  *
2617  * Cache, deactivate, or do nothing as appropriate.  This routine
2618  * is typically used by madvise() MADV_DONTNEED.
2619  *
2620  * Generally speaking we want to move the page into the cache so
2621  * it gets reused quickly.  However, this can result in a silly syndrome
2622  * due to the page recycling too quickly.  Small objects will not be
2623  * fully cached.  On the otherhand, if we move the page to the inactive
2624  * queue we wind up with a problem whereby very large objects 
2625  * unnecessarily blow away our inactive and cache queues.
2626  *
2627  * The solution is to move the pages based on a fixed weighting.  We
2628  * either leave them alone, deactivate them, or move them to the cache,
2629  * where moving them to the cache has the highest weighting.
2630  * By forcing some pages into other queues we eventually force the
2631  * system to balance the queues, potentially recovering other unrelated
2632  * space from active.  The idea is to not force this to happen too
2633  * often.
2634  *
2635  * The page must be busied.
2636  */
2637 void
2638 vm_page_dontneed(vm_page_t m)
2639 {
2640         static int dnweight;
2641         int dnw;
2642         int head;
2643
2644         dnw = ++dnweight;
2645
2646         /*
2647          * occassionally leave the page alone
2648          */
2649         if ((dnw & 0x01F0) == 0 ||
2650             m->queue - m->pc == PQ_INACTIVE ||
2651             m->queue - m->pc == PQ_CACHE
2652         ) {
2653                 if (m->act_count >= ACT_INIT)
2654                         --m->act_count;
2655                 return;
2656         }
2657
2658         /*
2659          * If vm_page_dontneed() is inactivating a page, it must clear
2660          * the referenced flag; otherwise the pagedaemon will see references
2661          * on the page in the inactive queue and reactivate it. Until the 
2662          * page can move to the cache queue, madvise's job is not done.
2663          */
2664         vm_page_flag_clear(m, PG_REFERENCED);
2665         pmap_clear_reference(m);
2666
2667         if (m->dirty == 0)
2668                 vm_page_test_dirty(m);
2669
2670         if (m->dirty || (dnw & 0x0070) == 0) {
2671                 /*
2672                  * Deactivate the page 3 times out of 32.
2673                  */
2674                 head = 0;
2675         } else {
2676                 /*
2677                  * Cache the page 28 times out of every 32.  Note that
2678                  * the page is deactivated instead of cached, but placed
2679                  * at the head of the queue instead of the tail.
2680                  */
2681                 head = 1;
2682         }
2683         vm_page_spin_lock(m);
2684         _vm_page_deactivate_locked(m, head);
2685         vm_page_spin_unlock(m);
2686 }
2687
2688 /*
2689  * These routines manipulate the 'soft busy' count for a page.  A soft busy
2690  * is almost like PG_BUSY except that it allows certain compatible operations
2691  * to occur on the page while it is busy.  For example, a page undergoing a
2692  * write can still be mapped read-only.
2693  *
2694  * Because vm_pages can overlap buffers m->busy can be > 1.  m->busy is only
2695  * adjusted while the vm_page is PG_BUSY so the flash will occur when the
2696  * busy bit is cleared.
2697  */
2698 void
2699 vm_page_io_start(vm_page_t m)
2700 {
2701         KASSERT(m->flags & PG_BUSY, ("vm_page_io_start: page not busy!!!"));
2702         atomic_add_char(&m->busy, 1);
2703         vm_page_flag_set(m, PG_SBUSY);
2704 }
2705
2706 void
2707 vm_page_io_finish(vm_page_t m)
2708 {
2709         KASSERT(m->flags & PG_BUSY, ("vm_page_io_finish: page not busy!!!"));
2710         atomic_subtract_char(&m->busy, 1);
2711         if (m->busy == 0)
2712                 vm_page_flag_clear(m, PG_SBUSY);
2713 }
2714
2715 /*
2716  * Indicate that a clean VM page requires a filesystem commit and cannot
2717  * be reused.  Used by tmpfs.
2718  */
2719 void
2720 vm_page_need_commit(vm_page_t m)
2721 {
2722         vm_page_flag_set(m, PG_NEED_COMMIT);
2723         vm_object_set_writeable_dirty(m->object);
2724 }
2725
2726 void
2727 vm_page_clear_commit(vm_page_t m)
2728 {
2729         vm_page_flag_clear(m, PG_NEED_COMMIT);
2730 }
2731
2732 /*
2733  * Grab a page, blocking if it is busy and allocating a page if necessary.
2734  * A busy page is returned or NULL.  The page may or may not be valid and
2735  * might not be on a queue (the caller is responsible for the disposition of
2736  * the page).
2737  *
2738  * If VM_ALLOC_ZERO is specified and the grab must allocate a new page, the
2739  * page will be zero'd and marked valid.
2740  *
2741  * If VM_ALLOC_FORCE_ZERO is specified the page will be zero'd and marked
2742  * valid even if it already exists.
2743  *
2744  * If VM_ALLOC_RETRY is specified this routine will never return NULL.  Also
2745  * note that VM_ALLOC_NORMAL must be specified if VM_ALLOC_RETRY is specified.
2746  * VM_ALLOC_NULL_OK is implied when VM_ALLOC_RETRY is specified.
2747  *
2748  * This routine may block, but if VM_ALLOC_RETRY is not set then NULL is
2749  * always returned if we had blocked.  
2750  *
2751  * This routine may not be called from an interrupt.
2752  *
2753  * PG_ZERO is *ALWAYS* cleared by this routine.
2754  *
2755  * No other requirements.
2756  */
2757 vm_page_t
2758 vm_page_grab(vm_object_t object, vm_pindex_t pindex, int allocflags)
2759 {
2760         vm_page_t m;
2761         int error;
2762         int shared = 1;
2763
2764         KKASSERT(allocflags &
2765                 (VM_ALLOC_NORMAL|VM_ALLOC_INTERRUPT|VM_ALLOC_SYSTEM));
2766         vm_object_hold_shared(object);
2767         for (;;) {
2768                 m = vm_page_lookup_busy_try(object, pindex, TRUE, &error);
2769                 if (error) {
2770                         vm_page_sleep_busy(m, TRUE, "pgrbwt");
2771                         if ((allocflags & VM_ALLOC_RETRY) == 0) {
2772                                 m = NULL;
2773                                 break;
2774                         }
2775                         /* retry */
2776                 } else if (m == NULL) {
2777                         if (shared) {
2778                                 vm_object_upgrade(object);
2779                                 shared = 0;
2780                         }
2781                         if (allocflags & VM_ALLOC_RETRY)
2782                                 allocflags |= VM_ALLOC_NULL_OK;
2783                         m = vm_page_alloc(object, pindex,
2784                                           allocflags & ~VM_ALLOC_RETRY);
2785                         if (m)
2786                                 break;
2787                         vm_wait(0);
2788                         if ((allocflags & VM_ALLOC_RETRY) == 0)
2789                                 goto failed;
2790                 } else {
2791                         /* m found */
2792                         break;
2793                 }
2794         }
2795
2796         /*
2797          * If VM_ALLOC_ZERO an invalid page will be zero'd and set valid.
2798          *
2799          * If VM_ALLOC_FORCE_ZERO the page is unconditionally zero'd and set
2800          * valid even if already valid.
2801          */
2802         if (m->valid == 0) {
2803                 if (allocflags & (VM_ALLOC_ZERO | VM_ALLOC_FORCE_ZERO)) {
2804                         if ((m->flags & PG_ZERO) == 0)
2805                                 pmap_zero_page(VM_PAGE_TO_PHYS(m));
2806                         m->valid = VM_PAGE_BITS_ALL;
2807                 }
2808         } else if (allocflags & VM_ALLOC_FORCE_ZERO) {
2809                 pmap_zero_page(VM_PAGE_TO_PHYS(m));
2810                 m->valid = VM_PAGE_BITS_ALL;
2811         }
2812         vm_page_flag_clear(m, PG_ZERO);
2813 failed:
2814         vm_object_drop(object);
2815         return(m);
2816 }
2817
2818 /*
2819  * Mapping function for valid bits or for dirty bits in
2820  * a page.  May not block.
2821  *
2822  * Inputs are required to range within a page.
2823  *
2824  * No requirements.
2825  * Non blocking.
2826  */
2827 int
2828 vm_page_bits(int base, int size)
2829 {
2830         int first_bit;
2831         int last_bit;
2832
2833         KASSERT(
2834             base + size <= PAGE_SIZE,
2835             ("vm_page_bits: illegal base/size %d/%d", base, size)
2836         );
2837
2838         if (size == 0)          /* handle degenerate case */
2839                 return(0);
2840
2841         first_bit = base >> DEV_BSHIFT;
2842         last_bit = (base + size - 1) >> DEV_BSHIFT;
2843
2844         return ((2 << last_bit) - (1 << first_bit));
2845 }
2846
2847 /*
2848  * Sets portions of a page valid and clean.  The arguments are expected
2849  * to be DEV_BSIZE aligned but if they aren't the bitmap is inclusive
2850  * of any partial chunks touched by the range.  The invalid portion of
2851  * such chunks will be zero'd.
2852  *
2853  * NOTE: When truncating a buffer vnode_pager_setsize() will automatically
2854  *       align base to DEV_BSIZE so as not to mark clean a partially
2855  *       truncated device block.  Otherwise the dirty page status might be
2856  *       lost.
2857  *
2858  * This routine may not block.
2859  *
2860  * (base + size) must be less then or equal to PAGE_SIZE.
2861  */
2862 static void
2863 _vm_page_zero_valid(vm_page_t m, int base, int size)
2864 {
2865         int frag;
2866         int endoff;
2867
2868         if (size == 0)  /* handle degenerate case */
2869                 return;
2870
2871         /*
2872          * If the base is not DEV_BSIZE aligned and the valid
2873          * bit is clear, we have to zero out a portion of the
2874          * first block.
2875          */
2876
2877         if ((frag = base & ~(DEV_BSIZE - 1)) != base &&
2878             (m->valid & (1 << (base >> DEV_BSHIFT))) == 0
2879         ) {
2880                 pmap_zero_page_area(
2881                     VM_PAGE_TO_PHYS(m),
2882                     frag,
2883                     base - frag
2884                 );
2885         }
2886
2887         /*
2888          * If the ending offset is not DEV_BSIZE aligned and the 
2889          * valid bit is clear, we have to zero out a portion of
2890          * the last block.
2891          */
2892
2893         endoff = base + size;
2894
2895         if ((frag = endoff & ~(DEV_BSIZE - 1)) != endoff &&
2896             (m->valid & (1 << (endoff >> DEV_BSHIFT))) == 0
2897         ) {
2898                 pmap_zero_page_area(
2899                     VM_PAGE_TO_PHYS(m),
2900                     endoff,
2901                     DEV_BSIZE - (endoff & (DEV_BSIZE - 1))
2902                 );
2903         }
2904 }
2905
2906 /*
2907  * Set valid, clear dirty bits.  If validating the entire
2908  * page we can safely clear the pmap modify bit.  We also
2909  * use this opportunity to clear the PG_NOSYNC flag.  If a process
2910  * takes a write fault on a MAP_NOSYNC memory area the flag will
2911  * be set again.
2912  *
2913  * We set valid bits inclusive of any overlap, but we can only
2914  * clear dirty bits for DEV_BSIZE chunks that are fully within
2915  * the range.
2916  *
2917  * Page must be busied?
2918  * No other requirements.
2919  */
2920 void
2921 vm_page_set_valid(vm_page_t m, int base, int size)
2922 {
2923         _vm_page_zero_valid(m, base, size);
2924         m->valid |= vm_page_bits(base, size);
2925 }
2926
2927
2928 /*
2929  * Set valid bits and clear dirty bits.
2930  *
2931  * NOTE: This function does not clear the pmap modified bit.
2932  *       Also note that e.g. NFS may use a byte-granular base
2933  *       and size.
2934  *
2935  * WARNING: Page must be busied?  But vfs_clean_one_page() will call
2936  *          this without necessarily busying the page (via bdwrite()).
2937  *          So for now vm_token must also be held.
2938  *
2939  * No other requirements.
2940  */
2941 void
2942 vm_page_set_validclean(vm_page_t m, int base, int size)
2943 {
2944         int pagebits;
2945
2946         _vm_page_zero_valid(m, base, size);
2947         pagebits = vm_page_bits(base, size);
2948         m->valid |= pagebits;
2949         m->dirty &= ~pagebits;
2950         if (base == 0 && size == PAGE_SIZE) {
2951                 /*pmap_clear_modify(m);*/
2952                 vm_page_flag_clear(m, PG_NOSYNC);
2953         }
2954 }
2955
2956 /*
2957  * Set valid & dirty.  Used by buwrite()
2958  *
2959  * WARNING: Page must be busied?  But vfs_dirty_one_page() will
2960  *          call this function in buwrite() so for now vm_token must
2961  *          be held.
2962  *
2963  * No other requirements.
2964  */
2965 void
2966 vm_page_set_validdirty(vm_page_t m, int base, int size)
2967 {
2968         int pagebits;
2969
2970         pagebits = vm_page_bits(base, size);
2971         m->valid |= pagebits;
2972         m->dirty |= pagebits;
2973         if (m->object)
2974                vm_object_set_writeable_dirty(m->object);
2975 }
2976
2977 /*
2978  * Clear dirty bits.
2979  *
2980  * NOTE: This function does not clear the pmap modified bit.
2981  *       Also note that e.g. NFS may use a byte-granular base
2982  *       and size.
2983  *
2984  * Page must be busied?
2985  * No other requirements.
2986  */
2987 void
2988 vm_page_clear_dirty(vm_page_t m, int base, int size)
2989 {
2990         m->dirty &= ~vm_page_bits(base, size);
2991         if (base == 0 && size == PAGE_SIZE) {
2992                 /*pmap_clear_modify(m);*/
2993                 vm_page_flag_clear(m, PG_NOSYNC);
2994         }
2995 }
2996
2997 /*
2998  * Make the page all-dirty.
2999  *
3000  * Also make sure the related object and vnode reflect the fact that the
3001  * object may now contain a dirty page.
3002  *
3003  * Page must be busied?
3004  * No other requirements.
3005  */
3006 void
3007 vm_page_dirty(vm_page_t m)
3008 {
3009 #ifdef INVARIANTS
3010         int pqtype = m->queue - m->pc;
3011 #endif
3012         KASSERT(pqtype != PQ_CACHE && pqtype != PQ_FREE,
3013                 ("vm_page_dirty: page in free/cache queue!"));
3014         if (m->dirty != VM_PAGE_BITS_ALL) {
3015                 m->dirty = VM_PAGE_BITS_ALL;
3016                 if (m->object)
3017                         vm_object_set_writeable_dirty(m->object);
3018         }
3019 }
3020
3021 /*
3022  * Invalidates DEV_BSIZE'd chunks within a page.  Both the
3023  * valid and dirty bits for the effected areas are cleared.
3024  *
3025  * Page must be busied?
3026  * Does not block.
3027  * No other requirements.
3028  */
3029 void
3030 vm_page_set_invalid(vm_page_t m, int base, int size)
3031 {
3032         int bits;
3033
3034         bits = vm_page_bits(base, size);
3035         m->valid &= ~bits;
3036         m->dirty &= ~bits;
3037         m->object->generation++;
3038 }
3039
3040 /*
3041  * The kernel assumes that the invalid portions of a page contain 
3042  * garbage, but such pages can be mapped into memory by user code.
3043  * When this occurs, we must zero out the non-valid portions of the
3044  * page so user code sees what it expects.
3045  *
3046  * Pages are most often semi-valid when the end of a file is mapped 
3047  * into memory and the file's size is not page aligned.
3048  *
3049  * Page must be busied?
3050  * No other requirements.
3051  */
3052 void
3053 vm_page_zero_invalid(vm_page_t m, boolean_t setvalid)
3054 {
3055         int b;
3056         int i;
3057
3058         /*
3059          * Scan the valid bits looking for invalid sections that
3060          * must be zerod.  Invalid sub-DEV_BSIZE'd areas ( where the
3061          * valid bit may be set ) have already been zerod by
3062          * vm_page_set_validclean().
3063          */
3064         for (b = i = 0; i <= PAGE_SIZE / DEV_BSIZE; ++i) {
3065                 if (i == (PAGE_SIZE / DEV_BSIZE) || 
3066                     (m->valid & (1 << i))
3067                 ) {
3068                         if (i > b) {
3069                                 pmap_zero_page_area(
3070                                     VM_PAGE_TO_PHYS(m), 
3071                                     b << DEV_BSHIFT,
3072                                     (i - b) << DEV_BSHIFT
3073                                 );
3074                         }
3075                         b = i + 1;
3076                 }
3077         }
3078
3079         /*
3080          * setvalid is TRUE when we can safely set the zero'd areas
3081          * as being valid.  We can do this if there are no cache consistency
3082          * issues.  e.g. it is ok to do with UFS, but not ok to do with NFS.
3083          */
3084         if (setvalid)
3085                 m->valid = VM_PAGE_BITS_ALL;
3086 }
3087
3088 /*
3089  * Is a (partial) page valid?  Note that the case where size == 0
3090  * will return FALSE in the degenerate case where the page is entirely
3091  * invalid, and TRUE otherwise.
3092  *
3093  * Does not block.
3094  * No other requirements.
3095  */
3096 int
3097 vm_page_is_valid(vm_page_t m, int base, int size)
3098 {
3099         int bits = vm_page_bits(base, size);
3100
3101         if (m->valid && ((m->valid & bits) == bits))
3102                 return 1;
3103         else
3104                 return 0;
3105 }
3106
3107 /*
3108  * update dirty bits from pmap/mmu.  May not block.
3109  *
3110  * Caller must hold the page busy
3111  */
3112 void
3113 vm_page_test_dirty(vm_page_t m)
3114 {
3115         if ((m->dirty != VM_PAGE_BITS_ALL) && pmap_is_modified(m)) {
3116                 vm_page_dirty(m);
3117         }
3118 }
3119
3120 /*
3121  * Register an action, associating it with its vm_page
3122  */
3123 void
3124 vm_page_register_action(vm_page_action_t action, vm_page_event_t event)
3125 {
3126         struct vm_page_action_list *list;
3127         int hv;
3128
3129         hv = (int)((intptr_t)action->m >> 8) & VMACTION_HMASK;
3130         list = &action_list[hv];
3131
3132         lwkt_gettoken(&vm_token);
3133         vm_page_flag_set(action->m, PG_ACTIONLIST);
3134         action->event = event;
3135         LIST_INSERT_HEAD(list, action, entry);
3136         lwkt_reltoken(&vm_token);
3137 }
3138
3139 /*
3140  * Unregister an action, disassociating it from its related vm_page
3141  */
3142 void
3143 vm_page_unregister_action(vm_page_action_t action)
3144 {
3145         struct vm_page_action_list *list;
3146         int hv;
3147
3148         lwkt_gettoken(&vm_token);
3149         if (action->event != VMEVENT_NONE) {
3150                 action->event = VMEVENT_NONE;
3151                 LIST_REMOVE(action, entry);
3152
3153                 hv = (int)((intptr_t)action->m >> 8) & VMACTION_HMASK;
3154                 list = &action_list[hv];
3155                 if (LIST_EMPTY(list))
3156                         vm_page_flag_clear(action->m, PG_ACTIONLIST);
3157         }
3158         lwkt_reltoken(&vm_token);
3159 }
3160
3161 /*
3162  * Issue an event on a VM page.  Corresponding action structures are
3163  * removed from the page's list and called.
3164  *
3165  * If the vm_page has no more pending action events we clear its
3166  * PG_ACTIONLIST flag.
3167  */
3168 void
3169 vm_page_event_internal(vm_page_t m, vm_page_event_t event)
3170 {
3171         struct vm_page_action_list *list;
3172         struct vm_page_action *scan;
3173         struct vm_page_action *next;
3174         int hv;
3175         int all;
3176
3177         hv = (int)((intptr_t)m >> 8) & VMACTION_HMASK;
3178         list = &action_list[hv];
3179         all = 1;
3180
3181         lwkt_gettoken(&vm_token);
3182         LIST_FOREACH_MUTABLE(scan, list, entry, next) {
3183                 if (scan->m == m) {
3184                         if (scan->event == event) {
3185                                 scan->event = VMEVENT_NONE;
3186                                 LIST_REMOVE(scan, entry);
3187                                 scan->func(m, scan);
3188                                 /* XXX */
3189                         } else {
3190                                 all = 0;
3191                         }
3192                 }
3193         }
3194         if (all)
3195                 vm_page_flag_clear(m, PG_ACTIONLIST);
3196         lwkt_reltoken(&vm_token);
3197 }
3198
3199 #include "opt_ddb.h"
3200 #ifdef DDB
3201 #include <sys/kernel.h>
3202
3203 #include <ddb/ddb.h>
3204
3205 DB_SHOW_COMMAND(page, vm_page_print_page_info)
3206 {
3207         db_printf("vmstats.v_free_count: %d\n", vmstats.v_free_count);
3208         db_printf("vmstats.v_cache_count: %d\n", vmstats.v_cache_count);
3209         db_printf("vmstats.v_inactive_count: %d\n", vmstats.v_inactive_count);
3210         db_printf("vmstats.v_active_count: %d\n", vmstats.v_active_count);
3211         db_printf("vmstats.v_wire_count: %d\n", vmstats.v_wire_count);
3212         db_printf("vmstats.v_free_reserved: %d\n", vmstats.v_free_reserved);
3213         db_printf("vmstats.v_free_min: %d\n", vmstats.v_free_min);
3214         db_printf("vmstats.v_free_target: %d\n", vmstats.v_free_target);
3215         db_printf("vmstats.v_cache_min: %d\n", vmstats.v_cache_min);
3216         db_printf("vmstats.v_inactive_target: %d\n", vmstats.v_inactive_target);
3217 }
3218
3219 DB_SHOW_COMMAND(pageq, vm_page_print_pageq_info)
3220 {
3221         int i;
3222         db_printf("PQ_FREE:");
3223         for(i=0;i<PQ_L2_SIZE;i++) {
3224                 db_printf(" %d", vm_page_queues[PQ_FREE + i].lcnt);
3225         }
3226         db_printf("\n");
3227                 
3228         db_printf("PQ_CACHE:");
3229         for(i=0;i<PQ_L2_SIZE;i++) {
3230                 db_printf(" %d", vm_page_queues[PQ_CACHE + i].lcnt);
3231         }
3232         db_printf("\n");
3233
3234         db_printf("PQ_ACTIVE:");
3235         for(i=0;i<PQ_L2_SIZE;i++) {
3236                 db_printf(" %d", vm_page_queues[PQ_ACTIVE + i].lcnt);
3237         }
3238         db_printf("\n");
3239
3240         db_printf("PQ_INACTIVE:");
3241         for(i=0;i<PQ_L2_SIZE;i++) {
3242                 db_printf(" %d", vm_page_queues[PQ_INACTIVE + i].lcnt);
3243         }
3244         db_printf("\n");
3245 }
3246 #endif /* DDB */