Message ID | 20210226125621.111723-1-ubizjak@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM/SVM: Move vmenter.S exception fixups out of line | expand |
On 26/02/21 13:56, Uros Bizjak wrote: > Avoid jump by moving exception fixups out of line. > > Cc: Sean Christopherson <seanjc@google.com> > Cc: Paolo Bonzini <pbonzini@redhat.com> > Signed-off-by: Uros Bizjak <ubizjak@gmail.com> > --- > arch/x86/kvm/svm/vmenter.S | 35 ++++++++++++++++++++--------------- > 1 file changed, 20 insertions(+), 15 deletions(-) > > diff --git a/arch/x86/kvm/svm/vmenter.S b/arch/x86/kvm/svm/vmenter.S > index 343108bf0f8c..4fa17df123cd 100644 > --- a/arch/x86/kvm/svm/vmenter.S > +++ b/arch/x86/kvm/svm/vmenter.S > @@ -80,15 +80,9 @@ SYM_FUNC_START(__svm_vcpu_run) > /* Enter guest mode */ > sti > > -3: vmrun %_ASM_AX > - jmp 5f > -4: cmpb $0, kvm_rebooting > - jne 5f > - ud2 > - _ASM_EXTABLE(3b, 4b) > +1: vmrun %_ASM_AX > > -5: > - cli > +2: cli > > #ifdef CONFIG_RETPOLINE > /* IMPORTANT: Stuff the RSB immediately after VM-Exit, before RET! */ > @@ -155,6 +149,13 @@ SYM_FUNC_START(__svm_vcpu_run) > #endif > pop %_ASM_BP > ret > + > +3: cmpb $0, kvm_rebooting > + jne 2b > + ud2 > + > + _ASM_EXTABLE(1b, 3b) > + > SYM_FUNC_END(__svm_vcpu_run) > > /** > @@ -174,18 +175,15 @@ SYM_FUNC_START(__svm_sev_es_vcpu_run) > #endif > push %_ASM_BX > > - /* Enter guest mode */ > + /* Move @vmcb to RAX. */ > mov %_ASM_ARG1, %_ASM_AX > + > + /* Enter guest mode */ > sti > > 1: vmrun %_ASM_AX > - jmp 3f > -2: cmpb $0, kvm_rebooting > - jne 3f > - ud2 > - _ASM_EXTABLE(1b, 2b) > > -3: cli > +2: cli > > #ifdef CONFIG_RETPOLINE > /* IMPORTANT: Stuff the RSB immediately after VM-Exit, before RET! */ > @@ -205,4 +203,11 @@ SYM_FUNC_START(__svm_sev_es_vcpu_run) > #endif > pop %_ASM_BP > ret > + > +3: cmpb $0, kvm_rebooting > + jne 2b > + ud2 > + > + _ASM_EXTABLE(1b, 3b) > + > SYM_FUNC_END(__svm_sev_es_vcpu_run) > Queued, thanks. Paolo
diff --git a/arch/x86/kvm/svm/vmenter.S b/arch/x86/kvm/svm/vmenter.S index 343108bf0f8c..4fa17df123cd 100644 --- a/arch/x86/kvm/svm/vmenter.S +++ b/arch/x86/kvm/svm/vmenter.S @@ -80,15 +80,9 @@ SYM_FUNC_START(__svm_vcpu_run) /* Enter guest mode */ sti -3: vmrun %_ASM_AX - jmp 5f -4: cmpb $0, kvm_rebooting - jne 5f - ud2 - _ASM_EXTABLE(3b, 4b) +1: vmrun %_ASM_AX -5: - cli +2: cli #ifdef CONFIG_RETPOLINE /* IMPORTANT: Stuff the RSB immediately after VM-Exit, before RET! */ @@ -155,6 +149,13 @@ SYM_FUNC_START(__svm_vcpu_run) #endif pop %_ASM_BP ret + +3: cmpb $0, kvm_rebooting + jne 2b + ud2 + + _ASM_EXTABLE(1b, 3b) + SYM_FUNC_END(__svm_vcpu_run) /** @@ -174,18 +175,15 @@ SYM_FUNC_START(__svm_sev_es_vcpu_run) #endif push %_ASM_BX - /* Enter guest mode */ + /* Move @vmcb to RAX. */ mov %_ASM_ARG1, %_ASM_AX + + /* Enter guest mode */ sti 1: vmrun %_ASM_AX - jmp 3f -2: cmpb $0, kvm_rebooting - jne 3f - ud2 - _ASM_EXTABLE(1b, 2b) -3: cli +2: cli #ifdef CONFIG_RETPOLINE /* IMPORTANT: Stuff the RSB immediately after VM-Exit, before RET! */ @@ -205,4 +203,11 @@ SYM_FUNC_START(__svm_sev_es_vcpu_run) #endif pop %_ASM_BP ret + +3: cmpb $0, kvm_rebooting + jne 2b + ud2 + + _ASM_EXTABLE(1b, 3b) + SYM_FUNC_END(__svm_sev_es_vcpu_run)
Avoid jump by moving exception fixups out of line. Cc: Sean Christopherson <seanjc@google.com> Cc: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Uros Bizjak <ubizjak@gmail.com> --- arch/x86/kvm/svm/vmenter.S | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-)