lkml.org 
[lkml]   [2012]   [Oct]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 02/10] thp: zap_huge_pmd(): zap huge zero pmd
    Date
    From: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>

    We don't have a real page to zap in huge zero page case. Let's just
    clear pmd and remove it from tlb.

    Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    ---
    mm/huge_memory.c | 21 +++++++++++++--------
    1 files changed, 13 insertions(+), 8 deletions(-)

    diff --git a/mm/huge_memory.c b/mm/huge_memory.c
    index 438adbf..680c27f 100644
    --- a/mm/huge_memory.c
    +++ b/mm/huge_memory.c
    @@ -1057,15 +1057,20 @@ int zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma,
    pmd_t orig_pmd;
    pgtable = pgtable_trans_huge_withdraw(tlb->mm);
    orig_pmd = pmdp_get_and_clear(tlb->mm, addr, pmd);
    - page = pmd_page(orig_pmd);
    tlb_remove_pmd_tlb_entry(tlb, pmd, addr);
    - page_remove_rmap(page);
    - VM_BUG_ON(page_mapcount(page) < 0);
    - add_mm_counter(tlb->mm, MM_ANONPAGES, -HPAGE_PMD_NR);
    - VM_BUG_ON(!PageHead(page));
    - tlb->mm->nr_ptes--;
    - spin_unlock(&tlb->mm->page_table_lock);
    - tlb_remove_page(tlb, page);
    + if (is_huge_zero_pmd(orig_pmd)) {
    + tlb->mm->nr_ptes--;
    + spin_unlock(&tlb->mm->page_table_lock);
    + } else {
    + page = pmd_page(orig_pmd);
    + page_remove_rmap(page);
    + VM_BUG_ON(page_mapcount(page) < 0);
    + add_mm_counter(tlb->mm, MM_ANONPAGES, -HPAGE_PMD_NR);
    + VM_BUG_ON(!PageHead(page));
    + tlb->mm->nr_ptes--;
    + spin_unlock(&tlb->mm->page_table_lock);
    + tlb_remove_page(tlb, page);
    + }
    pte_free(tlb->mm, pgtable);
    ret = 1;
    }
    --
    1.7.7.6


    \
     
     \ /
      Last update: 2012-10-15 08:41    [W:3.157 / U:0.160 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site