lkml.org 
[lkml]   [2018]   [Mar]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 19/35] x86/pgtable: Move pti_set_user_pgtbl() to pgtable.h
    Date
    From: Joerg Roedel <jroedel@suse.de>

    There it is also usable from 32 bit code.

    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    ---
    arch/x86/include/asm/pgtable.h | 23 +++++++++++++++++++++++
    arch/x86/include/asm/pgtable_64.h | 21 ---------------------
    2 files changed, 23 insertions(+), 21 deletions(-)

    diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
    index 0a9f746..1e900c1 100644
    --- a/arch/x86/include/asm/pgtable.h
    +++ b/arch/x86/include/asm/pgtable.h
    @@ -618,8 +618,31 @@ static inline int is_new_memtype_allowed(u64 paddr, unsigned long size,

    pmd_t *populate_extra_pmd(unsigned long vaddr);
    pte_t *populate_extra_pte(unsigned long vaddr);
    +
    +#ifdef CONFIG_PAGE_TABLE_ISOLATION
    +pgd_t __pti_set_user_pgtbl(pgd_t *pgdp, pgd_t pgd);
    +
    +/*
    + * Take a PGD location (pgdp) and a pgd value that needs to be set there.
    + * Populates the user and returns the resulting PGD that must be set in
    + * the kernel copy of the page tables.
    + */
    +static inline pgd_t pti_set_user_pgtbl(pgd_t *pgdp, pgd_t pgd)
    +{
    + if (!static_cpu_has(X86_FEATURE_PTI))
    + return pgd;
    + return __pti_set_user_pgtbl(pgdp, pgd);
    +}
    +#else /* CONFIG_PAGE_TABLE_ISOLATION */
    +static inline pgd_t pti_set_user_pgtbl(pgd_t *pgdp, pgd_t pgd)
    +{
    + return pgd;
    +}
    +#endif /* CONFIG_PAGE_TABLE_ISOLATION */
    +
    #endif /* __ASSEMBLY__ */

    +
    #ifdef CONFIG_X86_32
    # include <asm/pgtable_32.h>
    #else
    diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h
    index 5e68083..4cbf517 100644
    --- a/arch/x86/include/asm/pgtable_64.h
    +++ b/arch/x86/include/asm/pgtable_64.h
    @@ -145,27 +145,6 @@ static inline bool pgdp_maps_userspace(void *__ptr)
    return (ptr & ~PAGE_MASK) < (PAGE_SIZE / 2);
    }

    -#ifdef CONFIG_PAGE_TABLE_ISOLATION
    -pgd_t __pti_set_user_pgtbl(pgd_t *pgdp, pgd_t pgd);
    -
    -/*
    - * Take a PGD location (pgdp) and a pgd value that needs to be set there.
    - * Populates the user and returns the resulting PGD that must be set in
    - * the kernel copy of the page tables.
    - */
    -static inline pgd_t pti_set_user_pgtbl(pgd_t *pgdp, pgd_t pgd)
    -{
    - if (!static_cpu_has(X86_FEATURE_PTI))
    - return pgd;
    - return __pti_set_user_pgtbl(pgdp, pgd);
    -}
    -#else
    -static inline pgd_t pti_set_user_pgtbl(pgd_t *pgdp, pgd_t pgd)
    -{
    - return pgd;
    -}
    -#endif
    -
    static inline void native_set_p4d(p4d_t *p4dp, p4d_t p4d)
    {
    #if defined(CONFIG_PAGE_TABLE_ISOLATION) && !defined(CONFIG_X86_5LEVEL)
    --
    2.7.4
    \
     
     \ /
      Last update: 2018-03-16 20:35    [W:4.168 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site