lkml.org 
[lkml]   [2021]   [Jun]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH v2 14/24] x86/xen: Make read_cr2() noinstr
    vmlinux.o: warning: objtool: pv_ops[41]: native_read_cr2
    vmlinux.o: warning: objtool: pv_ops[41]: xen_read_cr2
    vmlinux.o: warning: objtool: pv_ops[41]: xen_read_cr2_direct
    vmlinux.o: warning: objtool: exc_double_fault()+0x15: call to pv_ops[41]() leaves .noinstr.text section

    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    ---
    arch/x86/include/asm/paravirt.h | 2 +-
    arch/x86/kernel/paravirt.c | 7 ++++++-
    arch/x86/xen/xen-asm.S | 2 ++
    3 files changed, 9 insertions(+), 2 deletions(-)

    --- a/arch/x86/include/asm/paravirt.h
    +++ b/arch/x86/include/asm/paravirt.h
    @@ -133,7 +133,7 @@ static inline void write_cr0(unsigned lo
    PVOP_VCALL1(cpu.write_cr0, x);
    }

    -static inline unsigned long read_cr2(void)
    +static __always_inline unsigned long read_cr2(void)
    {
    return PVOP_ALT_CALLEE0(unsigned long, mmu.read_cr2,
    "mov %%cr2, %%rax;",
    --- a/arch/x86/kernel/paravirt.c
    +++ b/arch/x86/kernel/paravirt.c
    @@ -238,6 +238,11 @@ struct pv_info pv_info = {
    /* 64-bit pagetable entries */
    #define PTE_IDENT __PV_IS_CALLEE_SAVE(_paravirt_ident_64)

    +static noinstr unsigned long pv_native_read_cr2(void)
    +{
    + return native_read_cr2();
    +}
    +
    struct paravirt_patch_template pv_ops = {
    /* Cpu ops. */
    .cpu.io_delay = native_io_delay,
    @@ -298,7 +303,7 @@ struct paravirt_patch_template pv_ops =
    .mmu.exit_mmap = paravirt_nop,

    #ifdef CONFIG_PARAVIRT_XXL
    - .mmu.read_cr2 = __PV_IS_CALLEE_SAVE(native_read_cr2),
    + .mmu.read_cr2 = __PV_IS_CALLEE_SAVE(pv_native_read_cr2),
    .mmu.write_cr2 = native_write_cr2,
    .mmu.read_cr3 = __native_read_cr3,
    .mmu.write_cr3 = native_write_cr3,
    --- a/arch/x86/xen/xen-asm.S
    +++ b/arch/x86/xen/xen-asm.S
    @@ -102,6 +102,7 @@ SYM_FUNC_START(check_events)
    ret
    SYM_FUNC_END(check_events)

    +.pushsection .noinstr.text, "ax"
    SYM_FUNC_START(xen_read_cr2)
    FRAME_BEGIN
    _ASM_MOV PER_CPU_VAR(xen_vcpu), %_ASM_AX
    @@ -116,6 +117,7 @@ SYM_FUNC_START(xen_read_cr2_direct)
    FRAME_END
    ret
    SYM_FUNC_END(xen_read_cr2_direct);
    +.popsection

    .macro xen_pv_trap name
    SYM_CODE_START(xen_\name)

    \
     
     \ /
      Last update: 2021-06-24 11:57    [W:2.202 / U:0.552 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site