vm_page.h (1542) | vm_page.h (1549) |
---|---|
1/* 2 * Copyright (c) 1991, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * The Mach Operating System project at Carnegie-Mellon University. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 93 unchanged lines hidden (view full) --- 102 TAILQ_ENTRY(vm_page) hashq; /* hash table links (O)*/ 103 TAILQ_ENTRY(vm_page) listq; /* pages in same object (O)*/ 104 105 vm_object_t object; /* which object am I in (O,P)*/ 106 vm_offset_t offset; /* offset into object (O,P) */ 107 108 u_short wire_count; /* wired down maps refs (P) */ 109 u_short flags; /* see below */ | 1/* 2 * Copyright (c) 1991, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * The Mach Operating System project at Carnegie-Mellon University. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 93 unchanged lines hidden (view full) --- 102 TAILQ_ENTRY(vm_page) hashq; /* hash table links (O)*/ 103 TAILQ_ENTRY(vm_page) listq; /* pages in same object (O)*/ 104 105 vm_object_t object; /* which object am I in (O,P)*/ 106 vm_offset_t offset; /* offset into object (O,P) */ 107 108 u_short wire_count; /* wired down maps refs (P) */ 109 u_short flags; /* see below */ |
110 short hold_count; /* page hold count */ 111 u_short act_count; /* page usage count */ |
|
110 111 vm_offset_t phys_addr; /* physical address of page */ 112}; 113 114/* 115 * These are the flags defined for vm_page. 116 * 117 * Note: PG_FILLED and PG_DIRTY are added for the filesystems. --- 86 unchanged lines hidden (view full) --- 204 (m)->flags |= PG_WANTED; \ 205 assert_wait((int) (m), (interruptible)); \ 206 } 207 208#define PAGE_WAKEUP(m) { \ 209 (m)->flags &= ~PG_BUSY; \ 210 if ((m)->flags & PG_WANTED) { \ 211 (m)->flags &= ~PG_WANTED; \ | 112 113 vm_offset_t phys_addr; /* physical address of page */ 114}; 115 116/* 117 * These are the flags defined for vm_page. 118 * 119 * Note: PG_FILLED and PG_DIRTY are added for the filesystems. --- 86 unchanged lines hidden (view full) --- 206 (m)->flags |= PG_WANTED; \ 207 assert_wait((int) (m), (interruptible)); \ 208 } 209 210#define PAGE_WAKEUP(m) { \ 211 (m)->flags &= ~PG_BUSY; \ 212 if ((m)->flags & PG_WANTED) { \ 213 (m)->flags &= ~PG_WANTED; \ |
212 thread_wakeup((int) (m)); \ | 214 wakeup((caddr_t) (m)); \ |
213 } \ 214 } 215 216#define vm_page_lock_queues() simple_lock(&vm_page_queue_lock) 217#define vm_page_unlock_queues() simple_unlock(&vm_page_queue_lock) 218 219#define vm_page_set_modified(m) { (m)->flags &= ~PG_CLEAN; } 220 221#define VM_PAGE_INIT(mem, object, offset) { \ 222 (mem)->flags = PG_BUSY | PG_CLEAN | PG_FAKE; \ 223 vm_page_insert((mem), (object), (offset)); \ 224 (mem)->wire_count = 0; \ | 215 } \ 216 } 217 218#define vm_page_lock_queues() simple_lock(&vm_page_queue_lock) 219#define vm_page_unlock_queues() simple_unlock(&vm_page_queue_lock) 220 221#define vm_page_set_modified(m) { (m)->flags &= ~PG_CLEAN; } 222 223#define VM_PAGE_INIT(mem, object, offset) { \ 224 (mem)->flags = PG_BUSY | PG_CLEAN | PG_FAKE; \ 225 vm_page_insert((mem), (object), (offset)); \ 226 (mem)->wire_count = 0; \ |
227 (mem)->hold_count = 0; \ 228 (mem)->act_count = 0; \ |
|
225} 226 227void vm_page_activate __P((vm_page_t)); 228vm_page_t vm_page_alloc __P((vm_object_t, vm_offset_t)); 229void vm_page_copy __P((vm_page_t, vm_page_t)); 230void vm_page_deactivate __P((vm_page_t)); 231void vm_page_free __P((vm_page_t)); 232void vm_page_insert __P((vm_page_t, vm_object_t, vm_offset_t)); 233vm_page_t vm_page_lookup __P((vm_object_t, vm_offset_t)); 234void vm_page_remove __P((vm_page_t)); 235void vm_page_rename __P((vm_page_t, vm_object_t, vm_offset_t)); | 229} 230 231void vm_page_activate __P((vm_page_t)); 232vm_page_t vm_page_alloc __P((vm_object_t, vm_offset_t)); 233void vm_page_copy __P((vm_page_t, vm_page_t)); 234void vm_page_deactivate __P((vm_page_t)); 235void vm_page_free __P((vm_page_t)); 236void vm_page_insert __P((vm_page_t, vm_object_t, vm_offset_t)); 237vm_page_t vm_page_lookup __P((vm_object_t, vm_offset_t)); 238void vm_page_remove __P((vm_page_t)); 239void vm_page_rename __P((vm_page_t, vm_object_t, vm_offset_t)); |
236void vm_page_startup __P((vm_offset_t *, vm_offset_t *)); | 240vm_offset_t vm_page_startup __P((vm_offset_t, vm_offset_t, vm_offset_t)); |
237void vm_page_unwire __P((vm_page_t)); 238void vm_page_wire __P((vm_page_t)); 239boolean_t vm_page_zero_fill __P((vm_page_t)); 240 | 241void vm_page_unwire __P((vm_page_t)); 242void vm_page_wire __P((vm_page_t)); 243boolean_t vm_page_zero_fill __P((vm_page_t)); 244 |
245 246/* 247 * Keep page from being freed by the page daemon 248 * much of the same effect as wiring, except much lower 249 * overhead and should be used only for *very* temporary 250 * holding ("wiring"). 251 */ 252static inline void 253vm_page_hold(mem) 254 vm_page_t mem; 255{ 256 mem->hold_count++; 257} 258 259static inline void 260vm_page_unhold(mem) 261 vm_page_t mem; 262{ 263 if( --mem->hold_count < 0) 264 panic("vm_page_unhold: hold count < 0!!!"); 265} 266 |
|
241#endif /* KERNEL */ 242#endif /* !_VM_PAGE_ */ | 267#endif /* KERNEL */ 268#endif /* !_VM_PAGE_ */ |