root/mm/init-mm.c

/* [<][>][^][v][top][bottom][index][help] */
   1 // SPDX-License-Identifier: GPL-2.0
   2 #include <linux/mm_types.h>
   3 #include <linux/rbtree.h>
   4 #include <linux/rwsem.h>
   5 #include <linux/spinlock.h>
   6 #include <linux/list.h>
   7 #include <linux/cpumask.h>
   8 #include <linux/mman.h>
   9 
  10 #include <linux/atomic.h>
  11 #include <linux/user_namespace.h>
  12 #include <asm/pgtable.h>
  13 #include <asm/mmu.h>
  14 
  15 #ifndef INIT_MM_CONTEXT
  16 #define INIT_MM_CONTEXT(name)
  17 #endif
  18 
  19 /*
  20  * For dynamically allocated mm_structs, there is a dynamically sized cpumask
  21  * at the end of the structure, the size of which depends on the maximum CPU
  22  * number the system can see. That way we allocate only as much memory for
  23  * mm_cpumask() as needed for the hundreds, or thousands of processes that
  24  * a system typically runs.
  25  *
  26  * Since there is only one init_mm in the entire system, keep it simple
  27  * and size this cpu_bitmask to NR_CPUS.
  28  */
  29 struct mm_struct init_mm = {
  30         .mm_rb          = RB_ROOT,
  31         .pgd            = swapper_pg_dir,
  32         .mm_users       = ATOMIC_INIT(2),
  33         .mm_count       = ATOMIC_INIT(1),
  34         .mmap_sem       = __RWSEM_INITIALIZER(init_mm.mmap_sem),
  35         .page_table_lock =  __SPIN_LOCK_UNLOCKED(init_mm.page_table_lock),
  36         .arg_lock       =  __SPIN_LOCK_UNLOCKED(init_mm.arg_lock),
  37         .mmlist         = LIST_HEAD_INIT(init_mm.mmlist),
  38         .user_ns        = &init_user_ns,
  39         .cpu_bitmap     = CPU_BITS_NONE,
  40         INIT_MM_CONTEXT(init_mm)
  41 };

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