hvm, xentrace: Extend HVMTRACE_ND so that a modifier to the basic
authorKeir Fraser <keir@xen.org>
Thu, 14 Apr 2011 13:54:24 +0000 (14:54 +0100)
committerKeir Fraser <keir@xen.org>
Thu, 14 Apr 2011 13:54:24 +0000 (14:54 +0100)
event reason can be ORed into the trace record.

Signed-off-by: Keir Fraser <keir@xen.org>
xen/arch/x86/hvm/svm/svm.c
xen/arch/x86/hvm/vmx/vmx.c
xen/include/asm-x86/hvm/trace.h

index 2602c25374a292c0b6cae1ac383287ac0e2451d5..462ca88ab4fcf9fd62d06bfe61b6b838c88e6f32 100644 (file)
@@ -1729,11 +1729,11 @@ asmlinkage void svm_vmexit_handler(struct cpu_user_regs *regs)
     }
 
     if ( hvm_long_mode_enabled(v) )
-        HVMTRACE_ND(VMEXIT64, 1/*cycles*/, 3, exit_reason,
+        HVMTRACE_ND(VMEXIT64, 0, 1/*cycles*/, 3, exit_reason,
                     (uint32_t)regs->eip, (uint32_t)((uint64_t)regs->eip >> 32),
                     0, 0, 0);
     else
-        HVMTRACE_ND(VMEXIT, 1/*cycles*/, 2, exit_reason,
+        HVMTRACE_ND(VMEXIT, 0, 1/*cycles*/, 2, exit_reason,
                     (uint32_t)regs->eip, 
                     0, 0, 0, 0);
 
@@ -2014,7 +2014,7 @@ asmlinkage void svm_vmexit_handler(struct cpu_user_regs *regs)
 
 asmlinkage void svm_trace_vmentry(void)
 {
-    HVMTRACE_ND (VMENTRY, 1/*cycles*/, 0, 0, 0, 0, 0, 0, 0);
+    HVMTRACE_ND(VMENTRY, 0, 1/*cycles*/, 0, 0, 0, 0, 0, 0, 0);
 }
   
 /*
index 82d0704f1b0c80d3a0452a9d332ee6f41e2fee8d..cda6420f39aa70f46e2889b4f24f53085f2fab6f 100644 (file)
@@ -2251,11 +2251,11 @@ asmlinkage void vmx_vmexit_handler(struct cpu_user_regs *regs)
     exit_reason = __vmread(VM_EXIT_REASON);
 
     if ( hvm_long_mode_enabled(v) )
-        HVMTRACE_ND(VMEXIT64, 1/*cycles*/, 3, exit_reason,
+        HVMTRACE_ND(VMEXIT64, 0, 1/*cycles*/, 3, exit_reason,
                     (uint32_t)regs->eip, (uint32_t)((uint64_t)regs->eip >> 32),
                     0, 0, 0);
     else
-        HVMTRACE_ND(VMEXIT, 1/*cycles*/, 2, exit_reason,
+        HVMTRACE_ND(VMEXIT, 0, 1/*cycles*/, 2, exit_reason,
                     (uint32_t)regs->eip, 
                     0, 0, 0, 0);
 
@@ -2699,7 +2699,7 @@ asmlinkage void vmx_vmenter_helper(void)
         vpid_sync_all();
 
  out:
-    HVMTRACE_ND (VMENTRY, 1/*cycles*/, 0, 0, 0, 0, 0, 0, 0);
+    HVMTRACE_ND(VMENTRY, 0, 1/*cycles*/, 0, 0, 0, 0, 0, 0, 0);
 }
 
 /*
index 2245b7ab1d1037de36c984bc28f55da748308283..24500cc96a9a33dc67343ce2e97ec7a3fa3b6af5 100644 (file)
 #define TRC_PAR_LONG(par) (par)
 #endif
 
-#define HVMTRACE_ND(evt, cycles, count, d1, d2, d3, d4, d5, d6)         \
-    do {                                                                \
-        if ( unlikely(tb_init_done) && DO_TRC_HVM_ ## evt )             \
-        {                                                               \
-            struct {                                                    \
-                u32 d[6];                                               \
-            } _d;                                                       \
-            _d.d[0]=(d1);                                               \
-            _d.d[1]=(d2);                                               \
-            _d.d[2]=(d3);                                               \
-            _d.d[3]=(d4);                                               \
-            _d.d[4]=(d5);                                               \
-            _d.d[5]=(d6);                                               \
-            __trace_var(TRC_HVM_ ## evt, cycles,                        \
-                        sizeof(*_d.d) * count, &_d);                    \
-        }                                                               \
+#define HVMTRACE_ND(evt, modifier, cycles, count, d1, d2, d3, d4, d5, d6) \
+    do {                                                                  \
+        if ( unlikely(tb_init_done) && DO_TRC_HVM_ ## evt )               \
+        {                                                                 \
+            struct {                                                      \
+                u32 d[6];                                                 \
+            } _d;                                                         \
+            _d.d[0]=(d1);                                                 \
+            _d.d[1]=(d2);                                                 \
+            _d.d[2]=(d3);                                                 \
+            _d.d[3]=(d4);                                                 \
+            _d.d[4]=(d5);                                                 \
+            _d.d[5]=(d6);                                                 \
+            __trace_var(TRC_HVM_ ## evt | (modifier), cycles,             \
+                        sizeof(*_d.d) * count, &_d);                      \
+        }                                                                 \
     } while(0)
 
 #define HVMTRACE_6D(evt, d1, d2, d3, d4, d5, d6)    \
-                      HVMTRACE_ND(evt, 0, 6, d1, d2, d3,  d4, d5, d6)
+    HVMTRACE_ND(evt, 0, 0, 6, d1, d2, d3, d4, d5, d6)
 #define HVMTRACE_5D(evt, d1, d2, d3, d4, d5)        \
-                      HVMTRACE_ND(evt, 0, 5, d1, d2, d3,  d4, d5, 0)
-#define HVMTRACE_4D(evt, d1, d2, d3, d4)               \
-                      HVMTRACE_ND(evt, 0, 4, d1, d2, d3,  d4, 0, 0)
-#define HVMTRACE_3D(evt, d1, d2, d3)                   \
-                      HVMTRACE_ND(evt, 0, 3, d1, d2, d3,  0, 0, 0)
-#define HVMTRACE_2D(evt, d1, d2)                       \
-                      HVMTRACE_ND(evt, 0, 2, d1, d2,  0,  0, 0, 0)
-#define HVMTRACE_1D(evt, d1)                           \
-                      HVMTRACE_ND(evt, 0, 1, d1,  0,  0,  0, 0, 0)
-#define HVMTRACE_0D(evt)                               \
-                      HVMTRACE_ND(evt, 0, 0, 0,  0,  0,  0, 0, 0)
+    HVMTRACE_ND(evt, 0, 0, 5, d1, d2, d3, d4, d5,  0)
+#define HVMTRACE_4D(evt, d1, d2, d3, d4)            \
+    HVMTRACE_ND(evt, 0, 0, 4, d1, d2, d3, d4,  0,  0)
+#define HVMTRACE_3D(evt, d1, d2, d3)                \
+    HVMTRACE_ND(evt, 0, 0, 3, d1, d2, d3,  0,  0,  0)
+#define HVMTRACE_2D(evt, d1, d2)                    \
+    HVMTRACE_ND(evt, 0, 0, 2, d1, d2,  0,  0,  0,  0)
+#define HVMTRACE_1D(evt, d1)                        \
+    HVMTRACE_ND(evt, 0, 0, 1, d1,  0,  0,  0,  0,  0)
+#define HVMTRACE_0D(evt)                            \
+    HVMTRACE_ND(evt, 0, 0, 0,  0,  0,  0,  0,  0,  0)