X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/2cbf9af3150e327192cffa2bd7b8df372a220a3c..fd88f5c5678c80ff5e338adc372d28a52ad20530:/usr/src/sys/vm/vm_page.h diff --git a/usr/src/sys/vm/vm_page.h b/usr/src/sys/vm/vm_page.h index 68a1f5c949..f9bf115992 100644 --- a/usr/src/sys/vm/vm_page.h +++ b/usr/src/sys/vm/vm_page.h @@ -1,13 +1,39 @@ /* - * Copyright (c) 1991 Regents of the University of California. - * All rights reserved. + * Copyright (c) 1991, 1993 + * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * The Mach Operating System project at Carnegie-Mellon University. * - * %sccs.include.redist.c% + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. * - * @(#)vm_page.h 7.8 (Berkeley) %G% + * @(#)vm_page.h 8.3 (Berkeley) 1/9/95 * * * Copyright (c) 1987, 1990 Carnegie-Mellon University. @@ -68,25 +94,27 @@ * queues (P). */ +TAILQ_HEAD(pglist, vm_page); + struct vm_page { - queue_chain_t pageq; /* queue info for FIFO - * queue or free list (P) */ - queue_chain_t hashq; /* hash table links (O)*/ - queue_chain_t listq; /* all pages in same object (O)*/ + TAILQ_ENTRY(vm_page) pageq; /* queue info for FIFO + * queue or free list (P) */ + TAILQ_ENTRY(vm_page) hashq; /* hash table links (O)*/ + TAILQ_ENTRY(vm_page) listq; /* pages in same object (O)*/ - vm_object_t object; /* which object am I in (O,P)*/ - vm_offset_t offset; /* offset into that object (O,P) */ + vm_object_t object; /* which object am I in (O,P)*/ + vm_offset_t offset; /* offset into object (O,P) */ - u_short wire_count; /* number wired down maps use me? (P) */ - u_short flags; /* see below */ + u_short wire_count; /* wired down maps refs (P) */ + u_short flags; /* see below */ - vm_offset_t phys_addr; /* physical address of page */ - vm_prot_t page_lock; /* Uses prohibited by data manager */ - vm_prot_t unlock_request; /* Outstanding unlock request */ + vm_offset_t phys_addr; /* physical address of page */ }; /* * These are the flags defined for vm_page. + * + * Note: PG_FILLED and PG_DIRTY are added for the filesystems. */ #define PG_INACTIVE 0x0001 /* page is in inactive list (P) */ #define PG_ACTIVE 0x0002 /* page is in active list (P) */ @@ -97,8 +125,9 @@ struct vm_page { #define PG_TABLED 0x0040 /* page is in VP table (O) */ #define PG_COPYONWRITE 0x0080 /* must copy page before changing (O) */ #define PG_FICTITIOUS 0x0100 /* physical page doesn't exist (O) */ -#define PG_ABSENT 0x0200 /* virtual page doesn't exist (O) */ -#define PG_FAKE 0x0400 /* page is placeholder for pagein (O) */ +#define PG_FAKE 0x0200 /* page is placeholder for pagein (O) */ +#define PG_FILLED 0x0400 /* client flag to set when filled */ +#define PG_DIRTY 0x0800 /* client flag to set when dirty */ #define PG_PAGEROWNED 0x4000 /* DEBUG: async paging op in progress */ #define PG_PTPAGE 0x8000 /* DEBUG: is a user page table page */ @@ -111,9 +140,9 @@ struct vm_page { (PG_ACTIVE | PG_INACTIVE))) \ panic("vm_page_check: not valid!"); \ } -#else VM_PAGE_DEBUG +#else /* VM_PAGE_DEBUG */ #define VM_PAGE_CHECK(mem) -#endif VM_PAGE_DEBUG +#endif /* VM_PAGE_DEBUG */ #ifdef KERNEL /* @@ -133,11 +162,11 @@ struct vm_page { */ extern -queue_head_t vm_page_queue_free; /* memory free queue */ +struct pglist vm_page_queue_free; /* memory free queue */ extern -queue_head_t vm_page_queue_active; /* active memory queue */ +struct pglist vm_page_queue_active; /* active memory queue */ extern -queue_head_t vm_page_queue_inactive; /* inactive memory queue */ +struct pglist vm_page_queue_inactive; /* inactive memory queue */ extern vm_page_t vm_page_array; /* First resident page in table */ @@ -173,14 +202,14 @@ simple_lock_data_t vm_page_queue_free_lock; #define PAGE_ASSERT_WAIT(m, interruptible) { \ (m)->flags |= PG_WANTED; \ - assert_wait((int) (m), (interruptible)); \ + assert_wait((m), (interruptible)); \ } #define PAGE_WAKEUP(m) { \ (m)->flags &= ~PG_BUSY; \ if ((m)->flags & PG_WANTED) { \ (m)->flags &= ~PG_WANTED; \ - thread_wakeup((int) (m)); \ + thread_wakeup((m)); \ } \ } @@ -189,19 +218,10 @@ simple_lock_data_t vm_page_queue_free_lock; #define vm_page_set_modified(m) { (m)->flags &= ~PG_CLEAN; } -#ifdef DEBUG -#define VM_PAGE_DEBUG_INIT(m) -#else -#define VM_PAGE_DEBUG_INIT(m) -#endif - #define VM_PAGE_INIT(mem, object, offset) { \ (mem)->flags = PG_BUSY | PG_CLEAN | PG_FAKE; \ vm_page_insert((mem), (object), (offset)); \ - (mem)->page_lock = VM_PROT_NONE; \ - (mem)->unlock_request = VM_PROT_NONE; \ (mem)->wire_count = 0; \ - VM_PAGE_DEBUG_INIT(mem); \ } void vm_page_activate __P((vm_page_t));