[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] SVM: limit GIF=0 region
Use EFLAGS.IF for all ordinary purposes; there's in particular no need to unduly defer NMI/#MC. Clear/set GIF solely around VMRUN itself. This has the additional advantage that svm_stgi_label now indeed marks the only place where GIF is being set. A note regarding the main STI placement: Orignally I had it at the place the main STGI was sitting at so far. However, my Fam15 box reliably locks up hard with this, unless I have the NMI watchdog enabled. I can only deduce that the CPU doesn't like STGI with EFLAGS.IF clear plus some other condition (the lockup occurs only after exiting the boot loader in the guest). As there's nothing wrong with interrupts being on right after VMRUN, I've decided to put the STI right after the CLGI (matching what KVM does, i.e. having a fair chance of working everywhere). Suggested-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> --- 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,7 +87,11 @@ __UNLIKELY_END(nsvm_hap) pop %rsi pop %rdi + CLGI + sti VMRUN + STGI +GLOBAL(svm_stgi_label) SAVE_ALL @@ -96,13 +100,11 @@ __UNLIKELY_END(nsvm_hap) SPEC_CTRL_ENTRY_FROM_HVM /* Req: b=curr %rsp=regs/cpuinfo, Clob: acd */ /* WARNING! `ret`, `call *`, `jmp *` not safe before this point. */ - STGI -GLOBAL(svm_stgi_label) mov %rsp,%rdi call svm_vmexit_handler jmp .Lsvm_do_resume .Lsvm_process_softirqs: - STGI + sti call do_softirq jmp .Lsvm_do_resume _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |