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