#include <linux/swapops.h>
#include <linux/rmap.h>
#include <linux/module.h>
+#include <linux/syscalls.h>
#include <linux/vs_memory.h>
#include <asm/mmu_context.h>
if (pte_present(pte)) {
unsigned long pfn = pte_pfn(pte);
- flush_cache_page(vma, addr);
+ flush_cache_page(vma, addr, pfn);
pte = ptep_clear_flush(vma, addr, ptep);
if (pfn_valid(pfn)) {
struct page *page = pfn_to_page(pfn);
set_page_dirty(page);
page_remove_rmap(page);
page_cache_release(page);
- // mm->rss--;
- vx_rsspages_dec(mm);
+ dec_mm_counter(mm, rss);
}
}
} else {
if (!pte_file(pte))
free_swap_and_cache(pte_to_swp_entry(pte));
- pte_clear(ptep);
+ pte_clear(mm, addr, ptep);
}
}
pgoff_t size;
int err = -ENOMEM;
pte_t *pte;
- pgd_t *pgd;
pmd_t *pmd;
+ pud_t *pud;
+ pgd_t *pgd;
pte_t pte_val;
pgd = pgd_offset(mm, addr);
if (!vx_rsspages_avail(mm, 1))
goto err_unlock;
+
+ pud = pud_alloc(mm, pgd, addr);
+ if (!pud)
+ goto err_unlock;
- pmd = pmd_alloc(mm, pgd, addr);
+ pmd = pmd_alloc(mm, pud, addr);
if (!pmd)
goto err_unlock;
zap_pte(mm, vma, addr, pte);
- // mm->rss++;
- vx_rsspages_inc(mm);
+ inc_mm_counter(mm,rss);
flush_icache_page(vma, page);
- set_pte(pte, mk_pte(page, prot));
+ set_pte_at(mm, addr, pte, mk_pte(page, prot));
page_add_file_rmap(page);
pte_val = *pte;
pte_unmap(pte);
{
int err = -ENOMEM;
pte_t *pte;
- pgd_t *pgd;
pmd_t *pmd;
+ pud_t *pud;
+ pgd_t *pgd;
pte_t pte_val;
pgd = pgd_offset(mm, addr);
spin_lock(&mm->page_table_lock);
+
+ pud = pud_alloc(mm, pgd, addr);
+ if (!pud)
+ goto err_unlock;
- pmd = pmd_alloc(mm, pgd, addr);
+ pmd = pmd_alloc(mm, pud, addr);
if (!pmd)
goto err_unlock;
zap_pte(mm, vma, addr, pte);
- set_pte(pte, pgoff_to_pte(pgoff));
+ set_pte_at(mm, addr, pte, pgoff_to_pte(pgoff));
pte_val = *pte;
pte_unmap(pte);
update_mmu_cache(vma, addr, pte_val);