[BACK]Return to uvm_object.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / uvm

Annotation of src/sys/uvm/uvm_object.h, Revision 1.22.30.1

1.22.30.1! mjf         1: /*     $NetBSD: uvm_object.h,v 1.23 2007/12/01 10:40:28 yamt 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.12      chs        49:        struct simplelock       vmobjlock;      /* lock on memq */
1.22.30.1! mjf        50:        const struct uvm_pagerops *pgops;       /* pager ops */
1.5       mrg        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:
1.22.30.1! mjf        75: extern const struct uvm_pagerops uvm_vnodeops;
        !            76: extern const struct uvm_pagerops uvm_deviceops;
        !            77: extern const struct uvm_pagerops ubc_pager;
        !            78: extern const 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>