Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros | Functions
rmap.c File Reference
#include <linux/mm.h>
#include <linux/pagemap.h>
#include <linux/swap.h>
#include <linux/swapops.h>
#include <linux/slab.h>
#include <linux/init.h>
#include <linux/ksm.h>
#include <linux/rmap.h>
#include <linux/rcupdate.h>
#include <linux/export.h>
#include <linux/memcontrol.h>
#include <linux/mmu_notifier.h>
#include <linux/migrate.h>
#include <linux/hugetlb.h>
#include <linux/backing-dev.h>
#include <asm/tlbflush.h>
#include "internal.h"

Go to the source code of this file.

Macros

#define CLUSTER_SIZE   min(32*PAGE_SIZE, PMD_SIZE)
 
#define CLUSTER_MASK   (~(CLUSTER_SIZE - 1))
 

Functions

int anon_vma_prepare (struct vm_area_struct *vma)
 
int anon_vma_clone (struct vm_area_struct *dst, struct vm_area_struct *src)
 
int anon_vma_fork (struct vm_area_struct *vma, struct vm_area_struct *pvma)
 
void unlink_anon_vmas (struct vm_area_struct *vma)
 
void __init anon_vma_init (void)
 
struct anon_vmapage_get_anon_vma (struct page *page)
 
struct anon_vmapage_lock_anon_vma (struct page *page)
 
void page_unlock_anon_vma (struct anon_vma *anon_vma)
 
unsigned long vma_address (struct page *page, struct vm_area_struct *vma)
 
unsigned long page_address_in_vma (struct page *page, struct vm_area_struct *vma)
 
pte_t__page_check_address (struct page *page, struct mm_struct *mm, unsigned long address, spinlock_t **ptlp, int sync)
 
int page_mapped_in_vma (struct page *page, struct vm_area_struct *vma)
 
int page_referenced_one (struct page *page, struct vm_area_struct *vma, unsigned long address, unsigned int *mapcount, unsigned long *vm_flags)
 
int page_referenced (struct page *page, int is_locked, struct mem_cgroup *memcg, unsigned long *vm_flags)
 
int page_mkclean (struct page *page)
 
 EXPORT_SYMBOL_GPL (page_mkclean)
 
void page_move_anon_rmap (struct page *page, struct vm_area_struct *vma, unsigned long address)
 
void page_add_anon_rmap (struct page *page, struct vm_area_struct *vma, unsigned long address)
 
void do_page_add_anon_rmap (struct page *page, struct vm_area_struct *vma, unsigned long address, int exclusive)
 
void page_add_new_anon_rmap (struct page *page, struct vm_area_struct *vma, unsigned long address)
 
void page_add_file_rmap (struct page *page)
 
void page_remove_rmap (struct page *page)
 
int try_to_unmap_one (struct page *page, struct vm_area_struct *vma, unsigned long address, enum ttu_flags flags)
 
bool is_vma_temporary_stack (struct vm_area_struct *vma)
 
int try_to_unmap (struct page *page, enum ttu_flags flags)
 
int try_to_munlock (struct page *page)
 
void __put_anon_vma (struct anon_vma *anon_vma)
 

Macro Definition Documentation

#define CLUSTER_MASK   (~(CLUSTER_SIZE - 1))

Definition at line 1342 of file rmap.c.

#define CLUSTER_SIZE   min(32*PAGE_SIZE, PMD_SIZE)

Definition at line 1341 of file rmap.c.

Function Documentation

pte_t* __page_check_address ( struct page page,
struct mm_struct mm,
unsigned long  address,
spinlock_t **  ptlp,
int  sync 
)

Definition at line 574 of file rmap.c.

void __put_anon_vma ( struct anon_vma anon_vma)

Definition at line 1675 of file rmap.c.

int anon_vma_clone ( struct vm_area_struct dst,
struct vm_area_struct src 
)

Definition at line 239 of file rmap.c.

int anon_vma_fork ( struct vm_area_struct vma,
struct vm_area_struct pvma 
)

Definition at line 272 of file rmap.c.

void __init anon_vma_init ( void  )

Definition at line 373 of file rmap.c.

int anon_vma_prepare ( struct vm_area_struct vma)

anon_vma_prepare - attach an anon_vma to a memory region : the memory region in question

This makes sure the memory mapping described by 'vma' has an 'anon_vma' attached to it, so that we can associate the anonymous pages mapped into it with that anon_vma.

The common case will be that we already have one, but if not we either need to find an adjacent mapping that we can re-use the anon_vma from (very common when the only reason for splitting a vma has been mprotect()), or we allocate a new one.

Anon-vma allocations are very subtle, because we may have optimistically looked up an anon_vma in page_lock_anon_vma() and that may actually touch the spinlock even in the newly allocated vma (it depends on RCU to make sure that the anon_vma isn't actually destroyed).

As a result, we need to do proper anon_vma locking even for the new allocation. At the same time, we do not want to do any locking for the common case of already having an anon_vma.

This must be called with the mmap_sem held for reading.

Definition at line 161 of file rmap.c.

void do_page_add_anon_rmap ( struct page page,
struct vm_area_struct vma,
unsigned long  address,
int  exclusive 
)

Definition at line 1041 of file rmap.c.

EXPORT_SYMBOL_GPL ( page_mkclean  )
bool is_vma_temporary_stack ( struct vm_area_struct vma)

Definition at line 1440 of file rmap.c.

void page_add_anon_rmap ( struct page page,
struct vm_area_struct vma,
unsigned long  address 
)

Definition at line 1030 of file rmap.c.

void page_add_file_rmap ( struct page page)

Definition at line 1096 of file rmap.c.

void page_add_new_anon_rmap ( struct page page,
struct vm_area_struct vma,
unsigned long  address 
)

Definition at line 1073 of file rmap.c.

unsigned long page_address_in_vma ( struct page page,
struct vm_area_struct vma 
)

Definition at line 541 of file rmap.c.

struct anon_vma* page_get_anon_vma ( struct page page)
read

Definition at line 403 of file rmap.c.

struct anon_vma* page_lock_anon_vma ( struct page page)
read

Definition at line 445 of file rmap.c.

int page_mapped_in_vma ( struct page page,
struct vm_area_struct vma 
)

Definition at line 630 of file rmap.c.

int page_mkclean ( struct page page)

Definition at line 922 of file rmap.c.

void page_move_anon_rmap ( struct page page,
struct vm_area_struct vma,
unsigned long  address 
)

Definition at line 949 of file rmap.c.

int page_referenced ( struct page page,
int  is_locked,
struct mem_cgroup memcg,
unsigned long vm_flags 
)

Definition at line 836 of file rmap.c.

int page_referenced_one ( struct page page,
struct vm_area_struct vma,
unsigned long  address,
unsigned int mapcount,
unsigned long vm_flags 
)

Definition at line 651 of file rmap.c.

void page_remove_rmap ( struct page page)

Definition at line 1115 of file rmap.c.

void page_unlock_anon_vma ( struct anon_vma anon_vma)

Definition at line 507 of file rmap.c.

int try_to_munlock ( struct page page)

Definition at line 1663 of file rmap.c.

int try_to_unmap ( struct page page,
enum ttu_flags  flags 
)

Definition at line 1630 of file rmap.c.

int try_to_unmap_one ( struct page page,
struct vm_area_struct vma,
unsigned long  address,
enum ttu_flags  flags 
)

Definition at line 1194 of file rmap.c.

void unlink_anon_vmas ( struct vm_area_struct vma)

Definition at line 322 of file rmap.c.

unsigned long vma_address ( struct page page,
struct vm_area_struct vma 
)
inline

Definition at line 527 of file rmap.c.