lkml.org 
[lkml]   [2018]   [Jan]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 07/16] x86/mm: Move two more functions from pgtable_64.h to pgtable.h
    Date
    From: Joerg Roedel <jroedel@suse.de>

    These two functions are required for PTI on 32 bit:

    * pgdp_maps_userspace()
    * pgd_large()

    Also re-implement pgdp_maps_userspace() so that it will work
    on 64 and 32 bit kernels.

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

    diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
    index 0a9f746cbdc1..abafe4d7fd3e 100644
    --- a/arch/x86/include/asm/pgtable.h
    +++ b/arch/x86/include/asm/pgtable.h
    @@ -1109,6 +1109,22 @@ static inline int pud_write(pud_t pud)
    return pud_flags(pud) & _PAGE_RW;
    }

    +/*
    + * Page table pages are page-aligned. The lower half of the top
    + * level is used for userspace and the top half for the kernel.
    + *
    + * Returns true for parts of the PGD that map userspace and
    + * false for the parts that map the kernel.
    + */
    +static inline bool pgdp_maps_userspace(void *__ptr)
    +{
    + unsigned long ptr = (unsigned long)__ptr;
    +
    + return (((ptr & ~PAGE_MASK) / sizeof(pgd_t)) < KERNEL_PGD_BOUNDARY);
    +}
    +
    +static inline int pgd_large(pgd_t pgd) { return 0; }
    +
    #ifdef CONFIG_PAGE_TABLE_ISOLATION
    /*
    * All top-level PAGE_TABLE_ISOLATION page tables are order-1 pages
    diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h
    index 58d7f10e937d..3c5a73c8bb50 100644
    --- a/arch/x86/include/asm/pgtable_64.h
    +++ b/arch/x86/include/asm/pgtable_64.h
    @@ -131,20 +131,6 @@ static inline pud_t native_pudp_get_and_clear(pud_t *xp)
    #endif
    }

    -/*
    - * Page table pages are page-aligned. The lower half of the top
    - * level is used for userspace and the top half for the kernel.
    - *
    - * Returns true for parts of the PGD that map userspace and
    - * false for the parts that map the kernel.
    - */
    -static inline bool pgdp_maps_userspace(void *__ptr)
    -{
    - unsigned long ptr = (unsigned long)__ptr;
    -
    - return (ptr & ~PAGE_MASK) < (PAGE_SIZE / 2);
    -}
    -
    #ifdef CONFIG_PAGE_TABLE_ISOLATION
    pgd_t __pti_set_user_pgd(pgd_t *pgdp, pgd_t pgd);

    @@ -208,7 +194,6 @@ extern void sync_global_pgds(unsigned long start, unsigned long end);
    /*
    * Level 4 access.
    */
    -static inline int pgd_large(pgd_t pgd) { return 0; }
    #define mk_kernel_pgd(address) __pgd((address) | _KERNPG_TABLE)

    /* PUD - Level3 access */
    --
    2.13.6
    \
     
     \ /
      Last update: 2018-01-16 17:53    [W:6.089 / U:0.756 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site