[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] x86/HVM: adjust hvm_interrupt_blocked()
First of all, hvm_intsrc_mce was not considered here at all, yet nothing blocks #MC (other than an already in-progress #MC, but dealing with this is not the purpose of this patch). Additionally STI-shadow only blocks maskable interrupts, but not NMI. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -3771,19 +3771,24 @@ enum hvm_intblk hvm_interrupt_blocked(st return intr; } - if ( (intack.source != hvm_intsrc_nmi) && - !(guest_cpu_user_regs()->eflags & X86_EFLAGS_IF) ) - return hvm_intblk_rflags_ie; + if ( intack.source == hvm_intsrc_mce ) + return hvm_intblk_none; intr_shadow = hvm_funcs.get_interrupt_shadow(v); - if ( intr_shadow & (HVM_INTR_SHADOW_STI|HVM_INTR_SHADOW_MOV_SS) ) + if ( intr_shadow & HVM_INTR_SHADOW_MOV_SS ) return hvm_intblk_shadow; if ( intack.source == hvm_intsrc_nmi ) return ((intr_shadow & HVM_INTR_SHADOW_NMI) ? hvm_intblk_nmi_iret : hvm_intblk_none); + if ( intr_shadow & HVM_INTR_SHADOW_STI ) + return hvm_intblk_shadow; + + if ( !(guest_cpu_user_regs()->eflags & X86_EFLAGS_IF) ) + return hvm_intblk_rflags_ie; + if ( intack.source == hvm_intsrc_lapic ) { uint32_t tpr = vlapic_get_reg(vcpu_vlapic(v), APIC_TASKPRI) & 0xF0; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |