lkml.org 
[lkml]   [2018]   [Mar]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/2] x86/mm: implement free pmd/pte page interfaces
    Date
    Implement pud_free_pmd_page() and pmd_free_pte_page() on x86, which
    clear a given pud/pmd entry and free up lower level page table(s).
    Address range associated with the pud/pmd entry must have been purged
    by INVLPG.

    Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Borislav Petkov <bp@suse.de>
    ---
    arch/x86/mm/pgtable.c | 28 ++++++++++++++++++++++++++--
    1 file changed, 26 insertions(+), 2 deletions(-)

    diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
    index 942f4fa341f1..121c0114439e 100644
    --- a/arch/x86/mm/pgtable.c
    +++ b/arch/x86/mm/pgtable.c
    @@ -710,7 +710,22 @@ int pmd_clear_huge(pmd_t *pmd)
    */
    int pud_free_pmd_page(pud_t *pud)
    {
    - return pud_none(*pud);
    + pmd_t *pmd;
    + int i;
    +
    + if (pud_none(*pud))
    + return 1;
    +
    + pmd = (pmd_t *)pud_page_vaddr(*pud);
    +
    + for (i = 0; i < PTRS_PER_PMD; i++)
    + if (!pmd_free_pte_page(&pmd[i]))
    + return 0;
    +
    + pud_clear(pud);
    + free_page((unsigned long)pmd);
    +
    + return 1;
    }

    /**
    @@ -720,6 +735,15 @@ int pud_free_pmd_page(pud_t *pud)
    */
    int pmd_free_pte_page(pmd_t *pmd)
    {
    - return pmd_none(*pmd);
    + pte_t *pte;
    +
    + if (pmd_none(*pmd))
    + return 1;
    +
    + pte = (pte_t *)pmd_page_vaddr(*pmd);
    + pmd_clear(pmd);
    + free_page((unsigned long)pte);
    +
    + return 1;
    }
    #endif /* CONFIG_HAVE_ARCH_HUGE_VMAP */
    \
     
     \ /
      Last update: 2018-03-07 18:48    [W:2.698 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site