[xen master] SVM: limit GIF=0 region

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[xen master] SVM: limit GIF=0 region

patchbot
commit 66b245d9eaebfef710148d410ae97a2eaedc3170
Author:     Jan Beulich <[hidden email]>
AuthorDate: Tue Sep 11 11:06:41 2018 +0200
Commit:     Jan Beulich <[hidden email]>
CommitDate: Tue Sep 11 11:06:41 2018 +0200

    SVM: limit GIF=0 region
   
    Use EFLAGS.IF for most ordinary purposes; there's in particular no need
    to unduly defer NMI/#MC. Clear GIF only immediately before VMRUN itself.
    This has the additional advantage that svm_stgi_label now indeed marks
    the only place where GIF gets set.
   
    Note regarding the main STI placement: Quite counterintuitively the
    host's EFLAGS.IF continues to have a meaning while the guest runs; see
    PM Vol 2 section "Physical (INTR) Interrupt Masking in EFLAGS". Hence we
    need to set the flag for the duration of time being in guest context.
    However, SPEC_CTRL_ENTRY_FROM_HVM wants to be carried out with EFLAGS.IF
    clear.
   
    Note regarding the main STGI placement: It could be moved further up,
    but at present SPEC_CTRL_EXIT_TO_HVM is not NMI/#MC-safe.
   
    Suggested-by: Andrew Cooper <[hidden email]>
    Signed-off-by: Jan Beulich <[hidden email]>
    Reviewed-by: Boris Ostrovsky <[hidden email]>
---
 xen/arch/x86/hvm/svm/entry.S | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/xen/arch/x86/hvm/svm/entry.S b/xen/arch/x86/hvm/svm/entry.S
index 7d73a69643..908cafb498 100644
--- a/xen/arch/x86/hvm/svm/entry.S
+++ b/xen/arch/x86/hvm/svm/entry.S
@@ -43,7 +43,7 @@ ENTRY(svm_asm_do_resume)
         lea  irq_stat+IRQSTAT_softirq_pending(%rip),%rdx
         xor  %ecx,%ecx
         shl  $IRQSTAT_shift,%eax
-        CLGI
+        cli
         cmp  %ecx,(%rdx,%rax,1)
         jne  .Lsvm_process_softirqs
 
@@ -57,7 +57,7 @@ UNLIKELY_START(ne, nsvm_hap)
          * Someone shot down our nested p2m table; go round again
          * and nsvm_vcpu_switch() will fix it for us.
          */
-        STGI
+        sti
         jmp  .Lsvm_do_resume
 __UNLIKELY_END(nsvm_hap)
 
@@ -87,6 +87,8 @@ __UNLIKELY_END(nsvm_hap)
         pop  %rsi
         pop  %rdi
 
+        CLGI
+        sti
         VMRUN
 
         SAVE_ALL
@@ -103,6 +105,6 @@ GLOBAL(svm_stgi_label)
         jmp  .Lsvm_do_resume
 
 .Lsvm_process_softirqs:
-        STGI
+        sti
         call do_softirq
         jmp  .Lsvm_do_resume
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
[hidden email]
https://lists.xenproject.org/xen-changelog