|
@@ -1922,12 +1922,13 @@ gotten:
|
|
|
* thread doing COW.
|
|
|
*/
|
|
|
ptep_clear_flush_notify(vma, address, page_table);
|
|
|
- set_pte_at(mm, address, page_table, entry);
|
|
|
- update_mmu_cache(vma, address, entry);
|
|
|
SetPageSwapBacked(new_page);
|
|
|
- lru_cache_add_active_anon(new_page);
|
|
|
+ lru_cache_add_active_or_unevictable(new_page, vma);
|
|
|
page_add_new_anon_rmap(new_page, vma, address);
|
|
|
|
|
|
+//TODO: is this safe? do_anonymous_page() does it this way.
|
|
|
+ set_pte_at(mm, address, page_table, entry);
|
|
|
+ update_mmu_cache(vma, address, entry);
|
|
|
if (old_page) {
|
|
|
/*
|
|
|
* Only after switching the pte to the new page may
|
|
@@ -2420,7 +2421,7 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
|
|
|
goto release;
|
|
|
inc_mm_counter(mm, anon_rss);
|
|
|
SetPageSwapBacked(page);
|
|
|
- lru_cache_add_active_anon(page);
|
|
|
+ lru_cache_add_active_or_unevictable(page, vma);
|
|
|
page_add_new_anon_rmap(page, vma, address);
|
|
|
set_pte_at(mm, address, page_table, entry);
|
|
|
|
|
@@ -2564,12 +2565,11 @@ static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma,
|
|
|
entry = mk_pte(page, vma->vm_page_prot);
|
|
|
if (flags & FAULT_FLAG_WRITE)
|
|
|
entry = maybe_mkwrite(pte_mkdirty(entry), vma);
|
|
|
- set_pte_at(mm, address, page_table, entry);
|
|
|
if (anon) {
|
|
|
- inc_mm_counter(mm, anon_rss);
|
|
|
+ inc_mm_counter(mm, anon_rss);
|
|
|
SetPageSwapBacked(page);
|
|
|
- lru_cache_add_active_anon(page);
|
|
|
- page_add_new_anon_rmap(page, vma, address);
|
|
|
+ lru_cache_add_active_or_unevictable(page, vma);
|
|
|
+ page_add_new_anon_rmap(page, vma, address);
|
|
|
} else {
|
|
|
inc_mm_counter(mm, file_rss);
|
|
|
page_add_file_rmap(page);
|
|
@@ -2578,6 +2578,8 @@ static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma,
|
|
|
get_page(dirty_page);
|
|
|
}
|
|
|
}
|
|
|
+//TODO: is this safe? do_anonymous_page() does it this way.
|
|
|
+ set_pte_at(mm, address, page_table, entry);
|
|
|
|
|
|
/* no need to invalidate: a not-present page won't be cached */
|
|
|
update_mmu_cache(vma, address, entry);
|