#ifndef _LINUX_MM_H#define _LINUX_MM_H#include <linux/errno.h>#ifdef __KERNEL__#include <linux/gfp.h>#include <linux/bug.h>#include <linux/list.h>#include <linux/mmzone.h>#include <linux/rbtree.h>#include <linux/prio_tree.h>#include <linux/atomic.h>#include <linux/debug_locks.h>#include <linux/mm_types.h>#include <linux/range.h>#include <linux/pfn.h>#include <linux/bit_spinlock.h>#include <linux/shrinker.h>struct mempolicy;struct anon_vma;struct file_ra_state;struct user_struct;struct writeback_control;#ifndef CONFIG_DISCONTIGMEM/* Don't use mapnrs, do it properly */externunsigned long max_mapnr;#endifexternunsigned long num_physpages;externunsigned long totalram_pages;externvoid* high_memory;externint page_cluster;#ifdef CONFIG_SYSCTLexternint sysctl_legacy_va_layout;#else#define sysctl_legacy_va_layout 0#endif#include <asm/page.h>#include <asm/pgtable.h>#include <asm/processor.h>#define nth_page(page,n) pfn_to_page(page_to_pfn((page)) + (n))/* to align the pointer to the (next) page boundary */#define PAGE_ALIGN(addr) ALIGN(addr, PAGE_SIZE)/* * Linux kernel virtual memory manager primitives. * The idea being to have a "virtual" mm in the same way * we have a virtual fs - giving a cleaner interface to the * mm details, and allowing different kinds of memory mappings * (from shared memory to executable loading to arbitrary * mmap() functions). */externstruct kmem_cache *vm_area_cachep;#ifndef CONFIG_MMUexternstruct rb_root nommu_region_tree;