Annotation of src/sys/uvm/uvm_object.h, Revision 1.22
1.22 ! yamt 1: /* $NetBSD$ */
1.1 mrg 2:
3: /*
4: *
5: * Copyright (c) 1997 Charles D. Cranor and Washington University.
6: * All rights reserved.
7: *
8: * Redistribution and use in source and binary forms, with or without
9: * modification, are permitted provided that the following conditions
10: * are met:
11: * 1. Redistributions of source code must retain the above copyright
12: * notice, this list of conditions and the following disclaimer.
13: * 2. Redistributions in binary form must reproduce the above copyright
14: * notice, this list of conditions and the following disclaimer in the
15: * documentation and/or other materials provided with the distribution.
16: * 3. All advertising materials mentioning features or use of this software
17: * must display the following acknowledgement:
18: * This product includes software developed by Charles D. Cranor and
19: * Washington University.
20: * 4. The name of the author may not be used to endorse or promote products
21: * derived from this software without specific prior written permission.
22: *
23: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
24: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
25: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
27: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
28: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
32: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1.3 mrg 33: *
34: * from: Id: uvm_object.h,v 1.1.2.2 1998/01/04 22:44:51 chuck Exp
1.1 mrg 35: */
36:
1.4 perry 37: #ifndef _UVM_UVM_OBJECT_H_
38: #define _UVM_UVM_OBJECT_H_
39:
1.1 mrg 40: /*
41: * uvm_object.h
42: */
43:
44: /*
45: * uvm_object: all that is left of mach objects.
46: */
47:
48: struct uvm_object {
1.12 chs 49: struct simplelock vmobjlock; /* lock on memq */
1.5 mrg 50: struct uvm_pagerops *pgops; /* pager ops */
51: struct pglist memq; /* pages in this object */
52: int uo_npages; /* # of pages in memq */
53: int uo_refs; /* reference count */
1.1 mrg 54: };
55:
56: /*
57: * UVM_OBJ_KERN is a 'special' uo_refs value which indicates that the
58: * object is a kernel memory object rather than a normal one (kernel
59: * memory objects don't have reference counts -- they never die).
60: *
61: * this value is used to detected kernel object mappings at uvm_unmap()
62: * time. normally when an object is unmapped its pages eventaully become
63: * deactivated and then paged out and/or freed. this is not useful
64: * for kernel objects... when a kernel object is unmapped we always want
65: * to free the resources associated with the mapping. UVM_OBJ_KERN
66: * allows us to decide which type of unmapping we want to do.
67: */
1.8 thorpej 68: #define UVM_OBJ_KERN (-2)
69:
70: #define UVM_OBJ_IS_KERN_OBJECT(uobj) \
1.13 chs 71: ((uobj)->uo_refs == UVM_OBJ_KERN)
1.9 thorpej 72:
1.10 thorpej 73: #ifdef _KERNEL
74:
75: extern struct uvm_pagerops uvm_vnodeops;
1.15 matt 76: extern struct uvm_pagerops uvm_deviceops;
77: extern struct uvm_pagerops ubc_pager;
78: extern struct uvm_pagerops aobj_pager;
1.10 thorpej 79:
1.9 thorpej 80: #define UVM_OBJ_IS_VNODE(uobj) \
81: ((uobj)->pgops == &uvm_vnodeops)
1.17 yamt 82:
83: #define UVM_OBJ_IS_DEVICE(uobj) \
84: ((uobj)->pgops == &uvm_deviceops)
1.11 chs 85:
86: #define UVM_OBJ_IS_VTEXT(uobj) \
1.22 ! yamt 87: (UVM_OBJ_IS_VNODE(uobj) && uvn_text_p(uobj))
1.11 chs 88:
1.19 yamt 89: #define UVM_OBJ_IS_CLEAN(uobj) \
1.22 ! yamt 90: (UVM_OBJ_IS_VNODE(uobj) && uvn_clean_p(uobj))
1.19 yamt 91:
1.20 yamt 92: /*
93: * UVM_OBJ_NEEDS_WRITEFAULT: true if the uobj needs to detect modification.
94: * (ie. wants to avoid writable user mappings.)
95: *
96: * XXX bad name
97: */
98:
99: #define UVM_OBJ_NEEDS_WRITEFAULT(uobj) \
1.22 ! yamt 100: (UVM_OBJ_IS_VNODE(uobj) && uvn_needs_writefault_p(uobj))
1.20 yamt 101:
1.16 chs 102: #define UVM_OBJ_IS_AOBJ(uobj) \
103: ((uobj)->pgops == &aobj_pager)
1.10 thorpej 104:
1.18 yamt 105: #define UVM_OBJ_INIT(uobj, ops, refs) \
106: do { \
107: simple_lock_init(&(uobj)->vmobjlock); \
108: (uobj)->pgops = (ops); \
109: TAILQ_INIT(&(uobj)->memq); \
110: (uobj)->uo_npages = 0; \
111: (uobj)->uo_refs = (refs); \
112: } while (/* CONSTCOND */ 0)
113:
1.10 thorpej 114: #endif /* _KERNEL */
1.1 mrg 115:
1.4 perry 116: #endif /* _UVM_UVM_OBJECT_H_ */
CVSweb <webmaster@jp.NetBSD.org>