lkml.org 
[lkml]   [2021]   [Dec]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: x86/core] x86/kvm: Remove .fixup usage
    The following commit has been merged into the x86/core branch of tip:

    Commit-ID: c9a34c3f4ece192f6d804039fe6aac9618f0d236
    Gitweb: https://git.kernel.org/tip/c9a34c3f4ece192f6d804039fe6aac9618f0d236
    Author: Peter Zijlstra <peterz@infradead.org>
    AuthorDate: Wed, 10 Nov 2021 11:01:16 +01:00
    Committer: Peter Zijlstra <peterz@infradead.org>
    CommitterDate: Sat, 11 Dec 2021 09:09:48 +01:00

    x86/kvm: Remove .fixup usage

    KVM instruction emulation has a gnarly hack where the .fixup does a
    return, however there's already a ret right after the 10b label, so
    mark that as 11 and have the exception clear %esi to remove the
    .fixup.

    Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Josh Poimboeuf <jpoimboe@redhat.com>
    Link: https://lore.kernel.org/r/20211110101325.722157053@infradead.org
    ---
    arch/x86/include/asm/extable_fixup_types.h | 1 +
    arch/x86/kvm/emulate.c | 16 ++++------------
    2 files changed, 5 insertions(+), 12 deletions(-)

    diff --git a/arch/x86/include/asm/extable_fixup_types.h b/arch/x86/include/asm/extable_fixup_types.h
    index a43b8c1..31ad42f 100644
    --- a/arch/x86/include/asm/extable_fixup_types.h
    +++ b/arch/x86/include/asm/extable_fixup_types.h
    @@ -46,5 +46,6 @@
    #define EX_TYPE_IMM_REG 17 /* reg := (long)imm */
    #define EX_TYPE_EFAULT_REG (EX_TYPE_IMM_REG | EX_DATA_IMM(-EFAULT))
    #define EX_TYPE_ZERO_REG (EX_TYPE_IMM_REG | EX_DATA_IMM(0))
    +#define EX_TYPE_ONE_REG (EX_TYPE_IMM_REG | EX_DATA_IMM(1))

    #endif
    diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
    index b026350..1e19a4d 100644
    --- a/arch/x86/kvm/emulate.c
    +++ b/arch/x86/kvm/emulate.c
    @@ -315,7 +315,7 @@ static int fastop(struct x86_emulate_ctxt *ctxt, fastop_t fop);
    __FOP_FUNC(#name)

    #define __FOP_RET(name) \
    - ASM_RET \
    + "11: " ASM_RET \
    ".size " name ", .-" name "\n\t"

    #define FOP_RET(name) \
    @@ -344,7 +344,7 @@ static int fastop(struct x86_emulate_ctxt *ctxt, fastop_t fop);
    __FOP_RET(#op "_" #dst)

    #define FOP1EEX(op, dst) \
    - FOP1E(op, dst) _ASM_EXTABLE(10b, kvm_fastop_exception)
    + FOP1E(op, dst) _ASM_EXTABLE_TYPE_REG(10b, 11b, EX_TYPE_ZERO_REG, %%esi)

    #define FASTOP1(op) \
    FOP_START(op) \
    @@ -434,10 +434,6 @@ static int fastop(struct x86_emulate_ctxt *ctxt, fastop_t fop);
    #op " %al \n\t" \
    __FOP_RET(#op)

    -asm(".pushsection .fixup, \"ax\"\n"
    - "kvm_fastop_exception: xor %esi, %esi; " ASM_RET
    - ".popsection");
    -
    FOP_START(setcc)
    FOP_SETCC(seto)
    FOP_SETCC(setno)
    @@ -473,12 +469,8 @@ FOP_END;
    \
    asm volatile("1:" insn "\n" \
    "2:\n" \
    - ".pushsection .fixup, \"ax\"\n" \
    - "3: movl $1, %[_fault]\n" \
    - " jmp 2b\n" \
    - ".popsection\n" \
    - _ASM_EXTABLE(1b, 3b) \
    - : [_fault] "+qm"(_fault) inoutclob ); \
    + _ASM_EXTABLE_TYPE_REG(1b, 2b, EX_TYPE_ONE_REG, %[_fault]) \
    + : [_fault] "+r"(_fault) inoutclob ); \
    \
    _fault ? X86EMUL_UNHANDLEABLE : X86EMUL_CONTINUE; \
    })
    \
     
     \ /
      Last update: 2021-12-13 10:56    [W:4.101 / U:0.252 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site