xentrace: trace interrupt window
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 5 Dec 2008 11:05:45 +0000 (11:05 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 5 Dec 2008 11:05:45 +0000 (11:05 +0000)
Make a specific interrupt-window trace, with information about why the
interrupt in question can't be delivered.

Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
xen/arch/x86/hvm/svm/intr.c
xen/arch/x86/hvm/vmx/intr.c
xen/include/asm-x86/hvm/trace.h
xen/include/public/trace.h

index 330d5879251a649ff9e66940ab0190b3935251f6..b6499070c0c6d20d1c582633dbc2ca665e1c49d0 100644 (file)
@@ -80,7 +80,8 @@ static void enable_intr_window(struct vcpu *v, struct hvm_intack intack)
 
     ASSERT(intack.source != hvm_intsrc_none);
 
-    HVMTRACE_2D(INJ_VIRQ, 0x0, /*fake=*/ 1);
+    HVMTRACE_3D(INTR_WINDOW, intack.vector, intack.source,
+                vmcb->eventinj.fields.v?vmcb->eventinj.fields.vector:-1);
 
     /*
      * Create a dummy virtual interrupt to intercept as soon as the
index daf2e7bcf0e475b5b9e7baccce49aadb0b29e6a6..2c45e26bfac68915544967955ead69c08925095b 100644 (file)
@@ -74,6 +74,13 @@ static void enable_intr_window(struct vcpu *v, struct hvm_intack intack)
 
     ASSERT(intack.source != hvm_intsrc_none);
 
+    if ( unlikely(tb_init_done) )
+    {
+        unsigned int intr = __vmread(VM_ENTRY_INTR_INFO);
+        HVMTRACE_3D(INTR_WINDOW, intack.vector, intack.source,
+                    (intr & INTR_INFO_VALID_MASK) ? intr & 0xff : -1);
+    }
+
     if ( (intack.source == hvm_intsrc_nmi) && cpu_has_vmx_vnmi )
     {
         /*
index 213eb1062919cbfa77699ca6d77029f502676261..9b0b7fd7a9df19679c0ef2e85f8432c4900890ca 100644 (file)
@@ -24,6 +24,7 @@
 #define DO_TRC_HVM_INJ_EXC     DEFAULT_HVM_INJECT
 #define DO_TRC_HVM_INJ_VIRQ    DEFAULT_HVM_INJECT
 #define DO_TRC_HVM_REINJ_VIRQ  DEFAULT_HVM_INJECT
+#define DO_TRC_HVM_INTR_WINDOW DEFAULT_HVM_INJECT
 #define DO_TRC_HVM_IO_READ     DEFAULT_HVM_IO
 #define DO_TRC_HVM_IO_WRITE    DEFAULT_HVM_IO
 #define DO_TRC_HVM_CR_READ     DEFAULT_HVM_REGACCESS
index 5ca0657e0e515fd4b4f1f3784b2f30b11abe6a8c..e2d8adc7b4a8cb62b4f1c6616b8a004763996743 100644 (file)
 #define TRC_HVM_CLTS            (TRC_HVM_HANDLER + 0x18)
 #define TRC_HVM_LMSW            (TRC_HVM_HANDLER + 0x19)
 #define TRC_HVM_LMSW64          (TRC_HVM_HANDLER + TRC_64_FLAG + 0x19)
+#define TRC_HVM_INTR_WINDOW     (TRC_HVM_HANDLER + 0X20)
 
 /* trace subclasses for power management */
 #define TRC_PM_FREQ     0x00801000      /* xen cpu freq events */