root/uvm/uvm_map_i.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. uvm_map_create
  2. uvm_map_setup
  3. uvm_unmap_p
  4. uvm_map_reference
  5. uvm_map_deallocate

    1 /*      $OpenBSD: uvm_map_i.h,v 1.21 2007/04/11 12:10:42 art Exp $      */
    2 /*      $NetBSD: uvm_map_i.h,v 1.18 2000/11/27 08:40:04 chs Exp $       */
    3 
    4 /* 
    5  * Copyright (c) 1997 Charles D. Cranor and Washington University.
    6  * Copyright (c) 1991, 1993, The Regents of the University of California.  
    7  *
    8  * All rights reserved.
    9  *
   10  * This code is derived from software contributed to Berkeley by
   11  * The Mach Operating System project at Carnegie-Mellon University.
   12  *
   13  * Redistribution and use in source and binary forms, with or without
   14  * modification, are permitted provided that the following conditions
   15  * are met:
   16  * 1. Redistributions of source code must retain the above copyright
   17  *    notice, this list of conditions and the following disclaimer.
   18  * 2. Redistributions in binary form must reproduce the above copyright
   19  *    notice, this list of conditions and the following disclaimer in the
   20  *    documentation and/or other materials provided with the distribution.
   21  * 3. All advertising materials mentioning features or use of this software
   22  *    must display the following acknowledgement:
   23  *      This product includes software developed by Charles D. Cranor,
   24  *      Washington University, the University of California, Berkeley and 
   25  *      its contributors.
   26  * 4. Neither the name of the University nor the names of its contributors
   27  *    may be used to endorse or promote products derived from this software
   28  *    without specific prior written permission.
   29  *
   30  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   31  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   32  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   33  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   34  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   35  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   36  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   37  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   38  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   39  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   40  * SUCH DAMAGE.
   41  *
   42  *      @(#)vm_map.c    8.3 (Berkeley) 1/12/94
   43  * from: Id: uvm_map_i.h,v 1.1.2.1 1997/08/14 19:10:50 chuck Exp
   44  *
   45  *
   46  * Copyright (c) 1987, 1990 Carnegie-Mellon University.
   47  * All rights reserved.
   48  * 
   49  * Permission to use, copy, modify and distribute this software and
   50  * its documentation is hereby granted, provided that both the copyright
   51  * notice and this permission notice appear in all copies of the
   52  * software, derivative works or modified versions, and any portions
   53  * thereof, and that both notices appear in supporting documentation.
   54  * 
   55  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 
   56  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 
   57  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
   58  * 
   59  * Carnegie Mellon requests users of this software to return to
   60  *
   61  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
   62  *  School of Computer Science
   63  *  Carnegie Mellon University
   64  *  Pittsburgh PA 15213-3890
   65  *
   66  * any improvements or extensions that they make and grant Carnegie the
   67  * rights to redistribute these changes.
   68  */
   69 
   70 #ifndef _UVM_UVM_MAP_I_H_
   71 #define _UVM_UVM_MAP_I_H_
   72 
   73 /*
   74  * uvm_map_i.h
   75  */
   76 
   77 /*
   78  * inline functions [maybe]
   79  */
   80 
   81 #if defined(UVM_MAP_INLINE) || defined(UVM_MAP)
   82 
   83 /*
   84  * uvm_map_create: create map
   85  */
   86 
   87 MAP_INLINE vm_map_t
   88 uvm_map_create(pmap, min, max, flags)
   89         pmap_t pmap;
   90         vaddr_t min, max;
   91         int flags;
   92 {
   93         vm_map_t result;
   94 
   95         MALLOC(result, vm_map_t, sizeof(struct vm_map), M_VMMAP, M_WAITOK);
   96         uvm_map_setup(result, min, max, flags);
   97         result->pmap = pmap;
   98         return(result);
   99 }
  100 
  101 /*
  102  * uvm_map_setup: init map
  103  *
  104  * => map must not be in service yet.
  105  */
  106 
  107 MAP_INLINE void
  108 uvm_map_setup(map, min, max, flags)
  109         vm_map_t map;
  110         vaddr_t min, max;
  111         int flags;
  112 {
  113 
  114         RB_INIT(&map->rbhead);
  115         map->header.next = map->header.prev = &map->header;
  116         map->nentries = 0;
  117         map->size = 0;
  118         map->ref_count = 1;
  119         map->min_offset = min;
  120         map->max_offset = max;
  121         map->flags = flags;
  122         map->first_free = &map->header;
  123         map->hint = &map->header;
  124         map->timestamp = 0;
  125         rw_init(&map->lock, "vmmaplk");
  126         simple_lock_init(&map->ref_lock);
  127         simple_lock_init(&map->hint_lock);
  128 }
  129 
  130 
  131 /*
  132  *   U N M A P   -   m a i n   e n t r y   p o i n t
  133  */
  134 
  135 /*
  136  * uvm_unmap: remove mappings from a vm_map (from "start" up to "stop")
  137  *
  138  * => caller must check alignment and size 
  139  * => map must be unlocked (we will lock it)
  140  */
  141 
  142 MAP_INLINE void
  143 uvm_unmap_p(map, start, end, p)
  144         vm_map_t map;
  145         vaddr_t start,end;
  146         struct proc *p;
  147 {
  148         vm_map_entry_t dead_entries;
  149         UVMHIST_FUNC("uvm_unmap"); UVMHIST_CALLED(maphist);
  150 
  151         UVMHIST_LOG(maphist, "  (map=%p, start=0x%lx, end=0x%lx)",
  152             map, start, end, 0);
  153         /*
  154          * work now done by helper functions.   wipe the pmap's and then
  155          * detach from the dead entries...
  156          */
  157         vm_map_lock(map);
  158         uvm_unmap_remove(map, start, end, &dead_entries, p);
  159         vm_map_unlock(map);
  160 
  161         if (dead_entries != NULL)
  162                 uvm_unmap_detach(dead_entries, 0);
  163 
  164         UVMHIST_LOG(maphist, "<- done", 0,0,0,0);
  165 }
  166 
  167 
  168 /*
  169  * uvm_map_reference: add reference to a map
  170  *
  171  * => map need not be locked (we use ref_lock).
  172  */
  173 
  174 MAP_INLINE void
  175 uvm_map_reference(map)
  176         vm_map_t map;
  177 {
  178         simple_lock(&map->ref_lock);
  179         map->ref_count++; 
  180         simple_unlock(&map->ref_lock);
  181 }
  182 
  183 /*
  184  * uvm_map_deallocate: drop reference to a map
  185  *
  186  * => caller must not lock map
  187  * => we will zap map if ref count goes to zero
  188  */
  189 
  190 MAP_INLINE void
  191 uvm_map_deallocate(map)
  192         vm_map_t map;
  193 {
  194         int c;
  195 
  196         simple_lock(&map->ref_lock);
  197         c = --map->ref_count;
  198         simple_unlock(&map->ref_lock);
  199         if (c > 0) {
  200                 return;
  201         }
  202 
  203         /*
  204          * all references gone.   unmap and free.
  205          */
  206 
  207         uvm_unmap(map, map->min_offset, map->max_offset);
  208         pmap_destroy(map->pmap);
  209         FREE(map, M_VMMAP);
  210 }
  211 
  212 #endif /* defined(UVM_MAP_INLINE) || defined(UVM_MAP) */
  213 
  214 #endif /* _UVM_UVM_MAP_I_H_ */

/* [<][>][^][v][top][bottom][index][help] */