Contributors: 19
Author Tokens Token Proportion Commits Commit Proportion
Alexey Dobriyan 65 28.76% 1 5.00%
Kefeng Wang 61 26.99% 1 5.00%
Heiko Carstens 19 8.41% 1 5.00%
Liam R. Howlett 17 7.52% 1 5.00%
Suren Baghdasaryan 10 4.42% 1 5.00%
Jason Gunthorpe 10 4.42% 1 5.00%
Eric W. Biedermann 8 3.54% 1 5.00%
Yang Shi 5 2.21% 1 5.00%
Mateusz Guzik 5 2.21% 1 5.00%
Rik Van Riel 5 2.21% 1 5.00%
Linus Torvalds 4 1.77% 1 5.00%
Mike Rapoport 4 1.77% 2 10.00%
Chris Zankel 4 1.77% 1 5.00%
Ben Dooks 3 1.33% 1 5.00%
Fenghua Yu 2 0.88% 1 5.00%
Michel Lespinasse 1 0.44% 1 5.00%
Jacob jun Pan 1 0.44% 1 5.00%
Greg Kroah-Hartman 1 0.44% 1 5.00%
Mikael Starvik 1 0.44% 1 5.00%
Total 226 20


// SPDX-License-Identifier: GPL-2.0
#include <linux/mm_types.h>
#include <linux/maple_tree.h>
#include <linux/rwsem.h>
#include <linux/spinlock.h>
#include <linux/list.h>
#include <linux/cpumask.h>
#include <linux/mman.h>
#include <linux/pgtable.h>

#include <linux/atomic.h>
#include <linux/user_namespace.h>
#include <linux/iommu.h>
#include <asm/mmu.h>

#ifndef INIT_MM_CONTEXT
#define INIT_MM_CONTEXT(name)
#endif

const struct vm_operations_struct vma_dummy_vm_ops;

/*
 * For dynamically allocated mm_structs, there is a dynamically sized cpumask
 * at the end of the structure, the size of which depends on the maximum CPU
 * number the system can see. That way we allocate only as much memory for
 * mm_cpumask() as needed for the hundreds, or thousands of processes that
 * a system typically runs.
 *
 * Since there is only one init_mm in the entire system, keep it simple
 * and size this cpu_bitmask to NR_CPUS.
 */
struct mm_struct init_mm = {
	.mm_mt		= MTREE_INIT_EXT(mm_mt, MM_MT_FLAGS, init_mm.mmap_lock),
	.pgd		= swapper_pg_dir,
	.mm_users	= ATOMIC_INIT(2),
	.mm_count	= ATOMIC_INIT(1),
	.write_protect_seq = SEQCNT_ZERO(init_mm.write_protect_seq),
	MMAP_LOCK_INITIALIZER(init_mm)
	.page_table_lock =  __SPIN_LOCK_UNLOCKED(init_mm.page_table_lock),
	.arg_lock	=  __SPIN_LOCK_UNLOCKED(init_mm.arg_lock),
	.mmlist		= LIST_HEAD_INIT(init_mm.mmlist),
#ifdef CONFIG_PER_VMA_LOCK
	.mm_lock_seq	= 0,
#endif
	.user_ns	= &init_user_ns,
	.cpu_bitmap	= CPU_BITS_NONE,
	INIT_MM_CONTEXT(init_mm)
};

void setup_initial_init_mm(void *start_code, void *end_code,
			   void *end_data, void *brk)
{
	init_mm.start_code = (unsigned long)start_code;
	init_mm.end_code = (unsigned long)end_code;
	init_mm.end_data = (unsigned long)end_data;
	init_mm.brk = (unsigned long)brk;
}