include/linux/mm.h
Source file repositories/reference/linux-study-clean/include/linux/mm.h
File Facts
- System
- Linux kernel
- Corpus path
include/linux/mm.h- Extension
.h- Size
- 164427 bytes
- Lines
- 5277
- Domain
- Core OS
- Bucket
- Core Kernel Interface
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Touches user memory; correctness depends on fault-safe copying and privilege boundary handling.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/args.hlinux/errno.hlinux/mmdebug.hlinux/gfp.hlinux/pgalloc_tag.hlinux/bug.hlinux/list.hlinux/mmzone.hlinux/rbtree.hlinux/atomic.hlinux/debug_locks.hlinux/compiler.hlinux/mm_types.hlinux/mmap_lock.hlinux/range.hlinux/pfn.hlinux/percpu-refcount.hlinux/bit_spinlock.hlinux/shrinker.hlinux/resource.hlinux/page_ext.hlinux/err.hlinux/page-flags.hlinux/page_ref.hlinux/overflow.hlinux/sched.hlinux/pgtable.hlinux/kasan.hlinux/memremap.hlinux/slab.hlinux/cacheinfo.hlinux/rcuwait.h
Detected Declarations
struct mempolicystruct anon_vmastruct anon_vma_chainstruct user_structstruct pt_regsstruct folio_batchstruct vm_faultstruct vm_uffd_opsstruct vm_operations_structstruct mmu_gatherstruct inodestruct zap_detailsstruct mmu_notifier_rangestruct follow_pfnmap_argsstruct kvecstruct vm_unmapped_area_infostruct vmem_altmapstruct page_snapshotenum pt_flagsenum mf_flagsenum mf_resultenum mf_action_page_typefunction totalram_pagesfunction totalram_pages_incfunction totalram_pages_decfunction totalram_pages_addfunction memsetfunction page_range_contiguousfunction folio_page_idxfunction fault_flag_allow_retry_firstfunction vma_numab_state_initfunction vma_numab_state_freefunction vma_numab_state_initfunction assert_fault_lockedfunction release_fault_lockfunction assert_fault_lockedfunction mm_flags_testfunction mm_flags_test_and_setfunction mm_flags_test_and_clearfunction mm_flags_setfunction mm_flags_clearfunction mm_flags_clear_allfunction vma_initfunction vm_flags_initfunction vm_flags_resetfunction vma_flags_reset_oncefunction vm_flags_setfunction vm_flags_clear
Annotated Snippet
extern vm_fault_t handle_mm_fault(struct vm_area_struct *vma,
unsigned long address, unsigned int flags,
struct pt_regs *regs);
extern int fixup_user_fault(struct mm_struct *mm,
unsigned long address, unsigned int fault_flags,
bool *unlocked);
void unmap_mapping_pages(struct address_space *mapping,
pgoff_t start, pgoff_t nr, bool even_cows);
void unmap_mapping_range(struct address_space *mapping,
loff_t const holebegin, loff_t const holelen, int even_cows);
#else
static inline vm_fault_t handle_mm_fault(struct vm_area_struct *vma,
unsigned long address, unsigned int flags,
struct pt_regs *regs)
{
/* should never happen if there's no MMU */
BUG();
return VM_FAULT_SIGBUS;
}
static inline int fixup_user_fault(struct mm_struct *mm, unsigned long address,
unsigned int fault_flags, bool *unlocked)
{
/* should never happen if there's no MMU */
BUG();
return -EFAULT;
}
static inline void unmap_mapping_pages(struct address_space *mapping,
pgoff_t start, pgoff_t nr, bool even_cows) { }
static inline void unmap_mapping_range(struct address_space *mapping,
loff_t const holebegin, loff_t const holelen, int even_cows) { }
#endif
static inline void unmap_shared_mapping_range(struct address_space *mapping,
loff_t const holebegin, loff_t const holelen)
{
unmap_mapping_range(mapping, holebegin, holelen, 0);
}
static inline struct vm_area_struct *vma_lookup(struct mm_struct *mm,
unsigned long addr);
extern int access_process_vm(struct task_struct *tsk, unsigned long addr,
void *buf, int len, unsigned int gup_flags);
extern int access_remote_vm(struct mm_struct *mm, unsigned long addr,
void *buf, int len, unsigned int gup_flags);
#ifdef CONFIG_BPF_SYSCALL
extern int copy_remote_vm_str(struct task_struct *tsk, unsigned long addr,
void *buf, int len, unsigned int gup_flags);
#endif
long get_user_pages_remote(struct mm_struct *mm,
unsigned long start, unsigned long nr_pages,
unsigned int gup_flags, struct page **pages,
int *locked);
long pin_user_pages_remote(struct mm_struct *mm,
unsigned long start, unsigned long nr_pages,
unsigned int gup_flags, struct page **pages,
int *locked);
/*
* Retrieves a single page alongside its VMA. Does not support FOLL_NOWAIT.
*/
static inline struct page *get_user_page_vma_remote(struct mm_struct *mm,
unsigned long addr,
int gup_flags,
struct vm_area_struct **vmap)
{
struct page *page;
struct vm_area_struct *vma;
int got;
if (WARN_ON_ONCE(unlikely(gup_flags & FOLL_NOWAIT)))
return ERR_PTR(-EINVAL);
got = get_user_pages_remote(mm, addr, 1, gup_flags, &page, NULL);
if (got < 0)
return ERR_PTR(got);
vma = vma_lookup(mm, addr);
if (WARN_ON_ONCE(!vma)) {
put_page(page);
return ERR_PTR(-EINVAL);
}
*vmap = vma;
return page;
}
Annotation
- Immediate include surface: `linux/args.h`, `linux/errno.h`, `linux/mmdebug.h`, `linux/gfp.h`, `linux/pgalloc_tag.h`, `linux/bug.h`, `linux/list.h`, `linux/mmzone.h`.
- Detected declarations: `struct mempolicy`, `struct anon_vma`, `struct anon_vma_chain`, `struct user_struct`, `struct pt_regs`, `struct folio_batch`, `struct vm_fault`, `struct vm_uffd_ops`, `struct vm_operations_struct`, `struct mmu_gather`.
- Atlas domain: Core OS / Core Kernel Interface.
- Implementation status: source implementation candidate.
- This snippet crosses the user/kernel memory boundary; validate fault handling and access checks before translating the pattern.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.