lkml.org 
[lkml]   [2015]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCHv7 24/36] x86, thp: remove infrastructure for handling splitting PMDs
    Date
    With new refcounting we don't need to mark PMDs splitting. Let's drop
    code to handle this.

    Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Tested-by: Sasha Levin <sasha.levin@oracle.com>
    ---
    arch/x86/include/asm/pgtable.h | 9 ---------
    arch/x86/include/asm/pgtable_types.h | 2 --
    arch/x86/mm/gup.c | 13 +------------
    arch/x86/mm/pgtable.c | 14 --------------
    4 files changed, 1 insertion(+), 37 deletions(-)

    diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
    index 4383012950b0..37c280e0827a 100644
    --- a/arch/x86/include/asm/pgtable.h
    +++ b/arch/x86/include/asm/pgtable.h
    @@ -158,11 +158,6 @@ static inline int pmd_large(pmd_t pte)
    }

    #ifdef CONFIG_TRANSPARENT_HUGEPAGE
    -static inline int pmd_trans_splitting(pmd_t pmd)
    -{
    - return pmd_val(pmd) & _PAGE_SPLITTING;
    -}
    -
    static inline int pmd_trans_huge(pmd_t pmd)
    {
    return pmd_val(pmd) & _PAGE_PSE;
    @@ -794,10 +789,6 @@ extern int pmdp_clear_flush_young(struct vm_area_struct *vma,
    unsigned long address, pmd_t *pmdp);


    -#define __HAVE_ARCH_PMDP_SPLITTING_FLUSH
    -extern void pmdp_splitting_flush(struct vm_area_struct *vma,
    - unsigned long addr, pmd_t *pmdp);
    -
    #define __HAVE_ARCH_PMD_WRITE
    static inline int pmd_write(pmd_t pmd)
    {
    diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h
    index 78f0c8cbe316..45f7cff1baac 100644
    --- a/arch/x86/include/asm/pgtable_types.h
    +++ b/arch/x86/include/asm/pgtable_types.h
    @@ -22,7 +22,6 @@
    #define _PAGE_BIT_PAT_LARGE 12 /* On 2MB or 1GB pages */
    #define _PAGE_BIT_SPECIAL _PAGE_BIT_SOFTW1
    #define _PAGE_BIT_CPA_TEST _PAGE_BIT_SOFTW1
    -#define _PAGE_BIT_SPLITTING _PAGE_BIT_SOFTW2 /* only valid on a PSE pmd */
    #define _PAGE_BIT_HIDDEN _PAGE_BIT_SOFTW3 /* hidden by kmemcheck */
    #define _PAGE_BIT_SOFT_DIRTY _PAGE_BIT_SOFTW3 /* software dirty tracking */
    #define _PAGE_BIT_NX 63 /* No execute: only valid after cpuid check */
    @@ -46,7 +45,6 @@
    #define _PAGE_PAT_LARGE (_AT(pteval_t, 1) << _PAGE_BIT_PAT_LARGE)
    #define _PAGE_SPECIAL (_AT(pteval_t, 1) << _PAGE_BIT_SPECIAL)
    #define _PAGE_CPA_TEST (_AT(pteval_t, 1) << _PAGE_BIT_CPA_TEST)
    -#define _PAGE_SPLITTING (_AT(pteval_t, 1) << _PAGE_BIT_SPLITTING)
    #define __HAVE_ARCH_PTE_SPECIAL

    #ifdef CONFIG_KMEMCHECK
    diff --git a/arch/x86/mm/gup.c b/arch/x86/mm/gup.c
    index 62a887a3cf50..49bbbc57603b 100644
    --- a/arch/x86/mm/gup.c
    +++ b/arch/x86/mm/gup.c
    @@ -157,18 +157,7 @@ static int gup_pmd_range(pud_t pud, unsigned long addr, unsigned long end,
    pmd_t pmd = *pmdp;

    next = pmd_addr_end(addr, end);
    - /*
    - * The pmd_trans_splitting() check below explains why
    - * pmdp_splitting_flush has to flush the tlb, to stop
    - * this gup-fast code from running while we set the
    - * splitting bit in the pmd. Returning zero will take
    - * the slow path that will call wait_split_huge_page()
    - * if the pmd is still in splitting state. gup-fast
    - * can't because it has irq disabled and
    - * wait_split_huge_page() would never return as the
    - * tlb flush IPI wouldn't run.
    - */
    - if (pmd_none(pmd) || pmd_trans_splitting(pmd))
    + if (pmd_none(pmd))
    return 0;
    if (unlikely(pmd_large(pmd) || !pmd_present(pmd))) {
    /*
    diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
    index 66d5aa27a7a5..23006b1797a0 100644
    --- a/arch/x86/mm/pgtable.c
    +++ b/arch/x86/mm/pgtable.c
    @@ -434,20 +434,6 @@ int pmdp_clear_flush_young(struct vm_area_struct *vma,

    return young;
    }
    -
    -void pmdp_splitting_flush(struct vm_area_struct *vma,
    - unsigned long address, pmd_t *pmdp)
    -{
    - int set;
    - VM_BUG_ON(address & ~HPAGE_PMD_MASK);
    - set = !test_and_set_bit(_PAGE_BIT_SPLITTING,
    - (unsigned long *)pmdp);
    - if (set) {
    - pmd_update(vma->vm_mm, address, pmdp);
    - /* need tlb flush only to serialize against gup-fast */
    - flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);
    - }
    -}
    #endif

    /**
    --
    2.1.4


    \
     
     \ /
      Last update: 2015-06-23 16:01    [W:4.107 / U:0.976 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site