ia64/xen-unstable

changeset 11765:34b2348dfe4b

[HVM][SVM] Revert changeset 11679:a949bd6ceb85

Although in the correct spirit, it seems there is some other
dependency in the code that assumes ExtInts are queued until
thay can be immediately delivered (EFLAGS.IF==1). This patch
therefore caused instability in Linux guests.

Signed-off-by: Keir Fraser <keir@xensource.com>
author kaf24@firebug.cl.cam.ac.uk
date Fri Oct 06 08:09:52 2006 +0100 (2006-10-06)
parents 9d0b22eb1758
children 3971f49ce592
files xen/arch/x86/hvm/svm/intr.c
line diff
     1.1 --- a/xen/arch/x86/hvm/svm/intr.c	Thu Oct 05 23:16:21 2006 +0100
     1.2 +++ b/xen/arch/x86/hvm/svm/intr.c	Fri Oct 06 08:09:52 2006 +0100
     1.3 @@ -74,6 +74,7 @@ asmlinkage void svm_intr_assist(void)
     1.4      int intr_type = APIC_DM_EXTINT;
     1.5      int intr_vector = -1;
     1.6      int re_injecting = 0;
     1.7 +    unsigned long rflags;
     1.8  
     1.9      ASSERT(vmcb);
    1.10  
    1.11 @@ -86,6 +87,14 @@ asmlinkage void svm_intr_assist(void)
    1.12          re_injecting = 1;
    1.13      }
    1.14  
    1.15 +    /* Guest's interrputs masked? */
    1.16 +    rflags = vmcb->rflags;
    1.17 +    if (irq_masked(rflags)) {
    1.18 +        HVM_DBG_LOG(DBG_LEVEL_1, "Guest IRQs masked: rflags: %lx", rflags);
    1.19 +        /* bail out, we won't be injecting an interrupt this time */
    1.20 +        return;
    1.21 +    }
    1.22 +    
    1.23      /* Previous interrupt still pending? */
    1.24      if (vmcb->vintr.fields.irq) {
    1.25  //        printk("Re-injecting IRQ from Vintr\n");