• Juergen Gross's avatar
    x86/mm: Make set_pmd_at() paravirt aware · 20e55bc1
    Juergen Gross authored
    set_pmd_at() calls native_set_pmd() unconditionally on x86. This was
    fine as long as only huge page entries were written via set_pmd_at(),
    as Xen pv guests don't support those.
    
    Commit 2c91bd4a ("mm: speed up mremap by 20x on large regions")
    introduced a usage of set_pmd_at() possible on pv guests, leading to
    failures like:
    
    BUG: unable to handle kernel paging request at ffff888023e26778
    #PF error: [PROT] [WRITE]
    RIP: e030:move_page_tables+0x7c1/0xae0
    move_vma.isra.3+0xd1/0x2d0
    __se_sys_mremap+0x3c6/0x5b0
     do_syscall_64+0x49/0x100
    entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    Make set_pmd_at() paravirt aware by just letting it use set_pmd().
    
    Fixes: 2c91bd4a ("mm: speed up mremap by 20x on large regions")
    Reported-by: default avatarSander Eikelenboom <linux@eikelenboom.it>
    Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: xen-devel@lists.xenproject.org
    Cc: boris.ostrovsky@oracle.com
    Cc: sstabellini@kernel.org
    Cc: hpa@zytor.com
    Cc: bp@alien8.de
    Cc: torvalds@linux-foundation.org
    Link: https://lkml.kernel.org/r/20190210074056.11842-1-jgross@suse.com
    20e55bc1
pgtable.h 34 KB