Line data Source code
1 : /* $OpenBSD: uvm_object.h,v 1.22 2016/09/16 02:35:42 dlg Exp $ */
2 : /* $NetBSD: uvm_object.h,v 1.11 2001/03/09 01:02:12 chs Exp $ */
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 : *
17 : * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 : * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 : * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 : * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 : * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 : * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 : * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 : * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 : * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 : * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 : *
28 : * from: Id: uvm_object.h,v 1.1.2.2 1998/01/04 22:44:51 chuck Exp
29 : */
30 :
31 : #ifndef _UVM_UVM_OBJECT_H_
32 : #define _UVM_UVM_OBJECT_H_
33 :
34 : /*
35 : * uvm_object.h
36 : */
37 :
38 : /*
39 : * uvm_object: all that is left of mach objects.
40 : */
41 :
42 : struct uvm_object {
43 : struct uvm_pagerops *pgops; /* pager ops */
44 : RBT_HEAD(uvm_objtree, vm_page) memt; /* pages in object */
45 : int uo_npages; /* # of pages in memt */
46 : int uo_refs; /* reference count */
47 : };
48 :
49 : /*
50 : * UVM_OBJ_KERN is a 'special' uo_refs value which indicates that the
51 : * object is a kernel memory object rather than a normal one (kernel
52 : * memory objects don't have reference counts -- they never die).
53 : *
54 : * this value is used to detected kernel object mappings at uvm_unmap()
55 : * time. normally when an object is unmapped its pages eventually become
56 : * deactivated and then paged out and/or freed. this is not useful
57 : * for kernel objects... when a kernel object is unmapped we always want
58 : * to free the resources associated with the mapping. UVM_OBJ_KERN
59 : * allows us to decide which type of unmapping we want to do.
60 : *
61 : * in addition, we have kernel objects which may be used in an
62 : * interrupt context. these objects get their mappings entered
63 : * with pmap_kenter*() and removed with pmap_kremove(), which
64 : * are safe to call in interrupt context, and must be used ONLY
65 : * for wired kernel mappings in these objects and their associated
66 : * maps.
67 : */
68 : #define UVM_OBJ_KERN (-2)
69 :
70 : #define UVM_OBJ_IS_KERN_OBJECT(uobj) \
71 : ((uobj)->uo_refs == UVM_OBJ_KERN)
72 :
73 : #ifdef _KERNEL
74 :
75 : extern struct uvm_pagerops uvm_vnodeops;
76 : extern struct uvm_pagerops uvm_deviceops;
77 :
78 : /* For object trees */
79 : int uvm_pagecmp(const struct vm_page *, const struct vm_page *);
80 0 : RBT_PROTOTYPE(uvm_objtree, vm_page, objt, uvm_pagecmp)
81 :
82 : #define UVM_OBJ_IS_VNODE(uobj) \
83 : ((uobj)->pgops == &uvm_vnodeops)
84 :
85 : #define UVM_OBJ_IS_DEVICE(uobj) \
86 : ((uobj)->pgops == &uvm_deviceops)
87 :
88 : #define UVM_OBJ_IS_VTEXT(uobj) \
89 : ((uobj)->pgops == &uvm_vnodeops && \
90 : ((struct vnode *)uobj)->v_flag & VTEXT)
91 :
92 : void uvm_objinit(struct uvm_object *, struct uvm_pagerops *, int);
93 : int uvm_objwire(struct uvm_object *, voff_t, voff_t, struct pglist *);
94 : void uvm_objunwire(struct uvm_object *, voff_t, voff_t);
95 :
96 : #endif /* _KERNEL */
97 :
98 : #endif /* _UVM_UVM_OBJECT_H_ */
|