The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/uvm/uvm_init.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: uvm_init.c,v 1.55 2020/11/04 01:30:19 chs Exp $        */
    2 
    3 /*
    4  * Copyright (c) 1997 Charles D. Cranor and Washington University.
    5  * All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  *
   16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   19  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   21  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   25  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   26  *
   27  * from: Id: uvm_init.c,v 1.1.2.3 1998/02/06 05:15:27 chs Exp
   28  */
   29 
   30 /*
   31  * uvm_init.c: init the vm system.
   32  */
   33 
   34 #include <sys/cdefs.h>
   35 __KERNEL_RCSID(0, "$NetBSD: uvm_init.c,v 1.55 2020/11/04 01:30:19 chs Exp $");
   36 
   37 #include <sys/param.h>
   38 #include <sys/systm.h>
   39 #include <sys/debug.h>
   40 #include <sys/file.h>
   41 #include <sys/filedesc.h>
   42 #include <sys/resourcevar.h>
   43 #include <sys/kmem.h>
   44 #include <sys/mman.h>
   45 #include <sys/vnode.h>
   46 
   47 #include <uvm/uvm.h>
   48 #include <uvm/uvm_pdpolicy.h>
   49 #include <uvm/uvm_physseg.h>
   50 #include <uvm/uvm_readahead.h>
   51 
   52 /*
   53  * struct uvm: we store most global vars in this structure to make them
   54  * easier to spot...
   55  */
   56 
   57 struct uvm uvm;         /* decl */
   58 struct uvmexp uvmexp;   /* decl */
   59 struct uvm_object *uvm_kernel_object;
   60 
   61 #if defined(__uvmexp_pagesize)
   62 const int * const uvmexp_pagesize = &uvmexp.pagesize;
   63 const int * const uvmexp_pagemask = &uvmexp.pagemask;
   64 const int * const uvmexp_pageshift = &uvmexp.pageshift;
   65 #endif
   66 
   67 kmutex_t uvm_kentry_lock __cacheline_aligned;
   68 
   69 /*
   70  * uvm_md_init: Init dependant on the MD boot context.
   71  *              called from MD code.
   72  */
   73 
   74 void
   75 uvm_md_init(void)
   76 {
   77         uvm_setpagesize(); /* initialize PAGE_SIZE-dependent variables */
   78         uvm_physseg_init();
   79 }
   80 
   81 /*
   82  * uvm_init: init the VM system.   called from kern/init_main.c.
   83  */
   84 
   85 void
   86 uvm_init(void)
   87 {
   88         vaddr_t kvm_start, kvm_end;
   89 
   90         /*
   91          * Ensure that the hardware set the page size, zero the UVM structure.
   92          */
   93 
   94         if (uvmexp.pagesize == 0) {
   95                 panic("uvm_init: page size not set");
   96         }
   97 
   98         memset(&uvm, 0, sizeof(uvm));
   99         averunnable.fscale = FSCALE;
  100 
  101         /*
  102          * Init the page sub-system.  This includes allocating the vm_page
  103          * structures, and setting up all the page queues (and locks).
  104          * Available memory will be put in the "free" queue, kvm_start and
  105          * kvm_end will be set to the area of kernel virtual memory which
  106          * is available for general use.
  107          */
  108 
  109         uvm_page_init(&kvm_start, &kvm_end);
  110         uvm_pglistalloc_init();
  111 
  112         /*
  113          * Init the map sub-system.
  114          */
  115 
  116         uvm_map_init();
  117 
  118         /*
  119          * Setup the kernel's virtual memory data structures.  This includes
  120          * setting up the kernel_map/kernel_object.
  121          * Bootstrap all kernel memory allocators.
  122          */
  123 
  124         uao_init();
  125         uvm_km_bootstrap(kvm_start, kvm_end);
  126 
  127         /*
  128          * Setup uvm_map caches and init the amap.
  129          */
  130 
  131         uvm_map_init_caches();
  132         uvm_amap_init();
  133 
  134         /*
  135          * Init the pmap module.  The pmap module is free to allocate
  136          * memory for its private use (e.g. pvlists).
  137          */
  138 
  139         pmap_init();
  140 
  141         /*
  142          * Make kernel memory allocators ready for use.
  143          * After this call the pool/kmem memory allocators can be used.
  144          */
  145 
  146         uvm_km_init();
  147 #ifdef __HAVE_PMAP_PV_TRACK
  148         pmap_pv_init();
  149 #endif
  150 
  151 #ifdef DEBUG
  152         debug_init();
  153 #endif
  154 
  155         /*
  156          * Init all pagers and the pager_map.
  157          */
  158 
  159         uvm_pager_init();
  160 
  161         /*
  162          * Initialize the uvm_loan() facility.
  163          */
  164 
  165         uvm_loan_init();
  166 
  167         /*
  168          * Enable paging of kernel objects.
  169          * This second pass of initializing kernel_object requires rw_obj,
  170          * so initialize that first.
  171          */
  172 
  173         rw_obj_init();
  174         uao_create(VM_MAX_KERNEL_ADDRESS - VM_MIN_KERNEL_ADDRESS,
  175             UAO_FLAG_KERNSWAP);
  176 
  177         uvmpdpol_reinit();
  178 
  179         /*
  180          * Init anonymous memory systems.
  181          */
  182 
  183         uvm_anon_init();
  184 
  185         uvm_uarea_init();
  186 
  187         /*
  188          * Init readahead mechanism.
  189          */
  190 
  191         uvm_ra_init();
  192 }

Cache object: 13d179d491230e3ad649c88be24cd645


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.