Commit e1fd9cc9 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] rmap 37 page_add_anon_rmap vma

From: Hugh Dickins <hugh@veritas.com>

Silly final patch for anonmm rmap: change page_add_anon_rmap's mm arg to vma
arg like anon_vma rmap, to smooth the transition between them.
parent 2b2e2a36
...@@ -321,7 +321,7 @@ void install_arg_page(struct vm_area_struct *vma, ...@@ -321,7 +321,7 @@ void install_arg_page(struct vm_area_struct *vma,
lru_cache_add_active(page); lru_cache_add_active(page);
set_pte(pte, pte_mkdirty(pte_mkwrite(mk_pte( set_pte(pte, pte_mkdirty(pte_mkwrite(mk_pte(
page, vma->vm_page_prot)))); page, vma->vm_page_prot))));
page_add_anon_rmap(page, mm, address); page_add_anon_rmap(page, vma, address);
pte_unmap(pte); pte_unmap(pte);
spin_unlock(&mm->page_table_lock); spin_unlock(&mm->page_table_lock);
......
...@@ -14,7 +14,10 @@ ...@@ -14,7 +14,10 @@
#ifdef CONFIG_MMU #ifdef CONFIG_MMU
void page_add_anon_rmap(struct page *, struct mm_struct *, unsigned long); /*
* rmap interfaces called when adding or removing pte of page
*/
void page_add_anon_rmap(struct page *, struct vm_area_struct *, unsigned long);
void page_add_file_rmap(struct page *); void page_add_file_rmap(struct page *);
void page_remove_rmap(struct page *); void page_remove_rmap(struct page *);
......
...@@ -1088,7 +1088,7 @@ static int do_wp_page(struct mm_struct *mm, struct vm_area_struct * vma, ...@@ -1088,7 +1088,7 @@ static int do_wp_page(struct mm_struct *mm, struct vm_area_struct * vma,
page_remove_rmap(old_page); page_remove_rmap(old_page);
break_cow(vma, new_page, address, page_table); break_cow(vma, new_page, address, page_table);
lru_cache_add_active(new_page); lru_cache_add_active(new_page);
page_add_anon_rmap(new_page, mm, address); page_add_anon_rmap(new_page, vma, address);
/* Free the old page.. */ /* Free the old page.. */
new_page = old_page; new_page = old_page;
...@@ -1366,7 +1366,7 @@ static int do_swap_page(struct mm_struct * mm, ...@@ -1366,7 +1366,7 @@ static int do_swap_page(struct mm_struct * mm,
flush_icache_page(vma, page); flush_icache_page(vma, page);
set_pte(page_table, pte); set_pte(page_table, pte);
page_add_anon_rmap(page, mm, address); page_add_anon_rmap(page, vma, address);
if (write_access || mremap_moved_anon_rmap(page, address)) { if (write_access || mremap_moved_anon_rmap(page, address)) {
if (do_wp_page(mm, vma, address, if (do_wp_page(mm, vma, address,
...@@ -1425,7 +1425,7 @@ do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, ...@@ -1425,7 +1425,7 @@ do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
vma); vma);
lru_cache_add_active(page); lru_cache_add_active(page);
mark_page_accessed(page); mark_page_accessed(page);
page_add_anon_rmap(page, mm, addr); page_add_anon_rmap(page, vma, addr);
} }
set_pte(page_table, entry); set_pte(page_table, entry);
...@@ -1532,7 +1532,7 @@ do_no_page(struct mm_struct *mm, struct vm_area_struct *vma, ...@@ -1532,7 +1532,7 @@ do_no_page(struct mm_struct *mm, struct vm_area_struct *vma,
set_pte(page_table, entry); set_pte(page_table, entry);
if (anon) { if (anon) {
lru_cache_add_active(new_page); lru_cache_add_active(new_page);
page_add_anon_rmap(new_page, mm, address); page_add_anon_rmap(new_page, vma, address);
} else } else
page_add_file_rmap(new_page); page_add_file_rmap(new_page);
pte_unmap(page_table); pte_unmap(page_table);
......
...@@ -365,15 +365,15 @@ int page_referenced(struct page *page) ...@@ -365,15 +365,15 @@ int page_referenced(struct page *page)
/** /**
* page_add_anon_rmap - add pte mapping to an anonymous page * page_add_anon_rmap - add pte mapping to an anonymous page
* @page: the page to add the mapping to * @page: the page to add the mapping to
* @mm: the mm in which the mapping is added * @vma: the vm area in which the mapping is added
* @address: the user virtual address mapped * @address: the user virtual address mapped
* *
* The caller needs to hold the mm->page_table_lock. * The caller needs to hold the mm->page_table_lock.
*/ */
void page_add_anon_rmap(struct page *page, void page_add_anon_rmap(struct page *page,
struct mm_struct *mm, unsigned long address) struct vm_area_struct *vma, unsigned long address)
{ {
struct anonmm *anonmm = mm->anonmm; struct anonmm *anonmm = vma->vm_mm->anonmm;
BUG_ON(PageReserved(page)); BUG_ON(PageReserved(page));
......
...@@ -433,7 +433,7 @@ unuse_pte(struct vm_area_struct *vma, unsigned long address, pte_t *dir, ...@@ -433,7 +433,7 @@ unuse_pte(struct vm_area_struct *vma, unsigned long address, pte_t *dir,
vma->vm_mm->rss++; vma->vm_mm->rss++;
get_page(page); get_page(page);
set_pte(dir, pte_mkold(mk_pte(page, vma->vm_page_prot))); set_pte(dir, pte_mkold(mk_pte(page, vma->vm_page_prot)));
page_add_anon_rmap(page, vma->vm_mm, address); page_add_anon_rmap(page, vma, address);
swap_free(entry); swap_free(entry);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment