lkml.org 
[lkml]   [2018]   [May]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.2 101/153] x86/mm: Fix {pmd,pud}_{set,clear}_flags()
    3.2.102-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Jan Beulich <JBeulich@suse.com>

    commit 842cef9113c2120f74f645111ded1e020193d84c upstream.

    Just like pte_{set,clear}_flags() their PMD and PUD counterparts should
    not do any address translation. This was outright wrong under Xen
    (causing a dead boot with no useful output on "suitable" systems), and
    produced needlessly more complicated code (even if just slightly) when
    paravirt was enabled.

    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Acked-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/5A8AF1BB02000078001A91C3@prv-mh.provo.novell.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    [bwh: Backported to 3.2:
    - There aren't any pud_{set,clear}_flags() functions
    - There's no p4d level]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    --- a/arch/x86/include/asm/pgtable.h
    +++ b/arch/x86/include/asm/pgtable.h
    @@ -254,14 +254,14 @@ static inline pmd_t pmd_set_flags(pmd_t
    {
    pmdval_t v = native_pmd_val(pmd);

    - return __pmd(v | set);
    + return native_make_pmd(v | set);
    }

    static inline pmd_t pmd_clear_flags(pmd_t pmd, pmdval_t clear)
    {
    pmdval_t v = native_pmd_val(pmd);

    - return __pmd(v & ~clear);
    + return native_make_pmd(v & ~clear);
    }

    static inline pmd_t pmd_mkold(pmd_t pmd)
    --- a/arch/x86/include/asm/pgtable_types.h
    +++ b/arch/x86/include/asm/pgtable_types.h
    @@ -271,6 +271,11 @@ static inline pmdval_t native_pmd_val(pm
    #else
    #include <asm-generic/pgtable-nopmd.h>

    +static inline pmd_t native_make_pmd(pmdval_t val)
    +{
    + return (pmd_t) { .pud.pgd = native_make_pgd(val) };
    +}
    +
    static inline pmdval_t native_pmd_val(pmd_t pmd)
    {
    return native_pgd_val(pmd.pud.pgd);
    \
     
     \ /
      Last update: 2018-05-30 13:31    [W:4.114 / U:0.204 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site