Annotation of src/sys/uvm/uvm_object.h, Revision 1.8
1.8 ! thorpej 1: /* $NetBSD: uvm_object.h,v 1.7 1999/05/25 00:09:01 thorpej Exp $ */
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.5 mrg 49: simple_lock_data_t vmobjlock; /* lock on memq */
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.
1.8 ! thorpej 67: *
! 68: * in addition, we have kernel objects which may be used in an
! 69: * interrupt context. these objects get their mappings entered
! 70: * with pmap_kenter*() and removed with pmap_kremove(), which
! 71: * are safe to call in interrupt context, and must be used ONLY
! 72: * for wired kernel mappings in these objects and their associated
! 73: * maps.
1.1 mrg 74: */
1.8 ! thorpej 75: #define UVM_OBJ_KERN (-2)
! 76: #define UVM_OBJ_KERN_INTRSAFE (-3)
! 77:
! 78: #define UVM_OBJ_IS_KERN_OBJECT(uobj) \
! 79: ((uobj)->uo_refs == UVM_OBJ_KERN || \
! 80: (uobj)->uo_refs == UVM_OBJ_KERN_INTRSAFE)
1.7 thorpej 81:
1.8 ! thorpej 82: #define UVM_OBJ_IS_INTRSAFE_OBJECT(uobj) \
! 83: ((uobj)->uo_refs == UVM_OBJ_KERN_INTRSAFE)
1.1 mrg 84:
1.4 perry 85: #endif /* _UVM_UVM_OBJECT_H_ */
CVSweb <webmaster@jp.NetBSD.org>