aboutsummaryrefslogtreecommitdiffstats
path: root/xen/include/asm-x86/hvm/trace.h
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-02-11 09:47:19 +0000
committerKeir Fraser <keir.fraser@citrix.com>2008-02-11 09:47:19 +0000
commite1b02119e639a9e13f79c99d145bf8a3c535593a (patch)
tree6218d66cc914d3462ada18ff5fb72f643c3624ba /xen/include/asm-x86/hvm/trace.h
parent1c8d4c1040bcfda0be3402025efe15c360c2c52d (diff)
downloadxen-e1b02119e639a9e13f79c99d145bf8a3c535593a.tar.gz
xen-e1b02119e639a9e13f79c99d145bf8a3c535593a.tar.bz2
xen-e1b02119e639a9e13f79c99d145bf8a3c535593a.zip
xentrace: Remove redundant tb_done_init checks, and add missing ones.
Hand inspection of gcc -02 output confirms significantly shorter codepaths for inactive (i.e. normal case) tracing. Signed-off-by: Michael A Fetterman <Michael.Fetterman@cl.cam.ac.uk>
Diffstat (limited to 'xen/include/asm-x86/hvm/trace.h')
-rw-r--r--xen/include/asm-x86/hvm/trace.h41
1 files changed, 30 insertions, 11 deletions
diff --git a/xen/include/asm-x86/hvm/trace.h b/xen/include/asm-x86/hvm/trace.h
index 54c578f912..04f90e0f98 100644
--- a/xen/include/asm-x86/hvm/trace.h
+++ b/xen/include/asm-x86/hvm/trace.h
@@ -37,6 +37,9 @@ static inline void hvmtrace_vmexit(struct vcpu *v,
unsigned long rip,
unsigned long exit_reason)
{
+ if ( likely(!tb_init_done) )
+ return;
+
#ifdef __x86_64__
if(hvm_long_mode_enabled(v))
{
@@ -50,7 +53,7 @@ static inline void hvmtrace_vmexit(struct vcpu *v,
d.vid = v->vcpu_id;
d.exit_reason = exit_reason;
d.rip = rip;
- trace_var(TRC_HVM_VMEXIT64, 1/*cycles*/, sizeof(d), (unsigned char *)&d);
+ __trace_var(TRC_HVM_VMEXIT64, 1/*cycles*/, sizeof(d), (unsigned char *)&d);
} else {
#endif
struct {
@@ -63,7 +66,7 @@ static inline void hvmtrace_vmexit(struct vcpu *v,
d.vid = v->vcpu_id;
d.exit_reason = exit_reason;
d.eip = rip;
- trace_var(TRC_HVM_VMEXIT, 1/*cycles*/, sizeof(d), (unsigned char *)&d);
+ __trace_var(TRC_HVM_VMEXIT, 1/*cycles*/, sizeof(d), (unsigned char *)&d);
#ifdef __x86_64__
}
#endif
@@ -75,9 +78,13 @@ static inline void hvmtrace_vmentry(struct vcpu *v)
struct {
unsigned did:16, vid:16;
} d;
+
+ if ( likely(!tb_init_done) )
+ return;
+
d.did = v->domain->domain_id;
d.vid = v->vcpu_id;
- trace_var(TRC_HVM_VMENTRY, 1/*cycles*/, sizeof(d), (unsigned char *)&d);
+ __trace_var(TRC_HVM_VMENTRY, 1/*cycles*/, sizeof(d), (unsigned char *)&d);
}
static inline void hvmtrace_msr_read(struct vcpu *v, u32 ecx, u64 msr_content)
@@ -87,11 +94,15 @@ static inline void hvmtrace_msr_read(struct vcpu *v, u32 ecx, u64 msr_content)
u32 ecx;
u64 msr_content;
} d;
+
+ if ( likely(!tb_init_done) )
+ return;
+
d.did = v->domain->domain_id;
d.vid = v->vcpu_id;
d.ecx = ecx;
d.msr_content = msr_content;
- trace_var(TRC_HVM_MSR_READ, 0/*!cycles*/, sizeof(d), (unsigned char *)&d);
+ __trace_var(TRC_HVM_MSR_READ, 0/*!cycles*/, sizeof(d), (unsigned char *)&d);
}
static inline void hvmtrace_msr_write(struct vcpu *v, u32 ecx, u64 msr_content)
@@ -101,16 +112,23 @@ static inline void hvmtrace_msr_write(struct vcpu *v, u32 ecx, u64 msr_content)
u32 ecx;
u64 msr_content;
} d;
+
+ if ( likely(!tb_init_done) )
+ return;
+
d.did = v->domain->domain_id;
d.vid = v->vcpu_id;
d.ecx = ecx;
d.msr_content = msr_content;
- trace_var(TRC_HVM_MSR_WRITE, 0/*!cycles*/,sizeof(d), (unsigned char *)&d);
+ __trace_var(TRC_HVM_MSR_WRITE, 0/*!cycles*/,sizeof(d), (unsigned char *)&d);
}
static inline void hvmtrace_pf_xen(struct vcpu *v, unsigned long va,
u32 error_code)
{
+ if ( likely(!tb_init_done) )
+ return;
+
#ifdef __x86_64__
if(hvm_long_mode_enabled(v))
{
@@ -123,8 +141,8 @@ static inline void hvmtrace_pf_xen(struct vcpu *v, unsigned long va,
d.vid = v->vcpu_id;
d.error_code = error_code;
d.va = va;
- trace_var(TRC_HVM_PF_XEN64, 0/*!cycles*/,sizeof(d),
- (unsigned char *)&d);
+ __trace_var(TRC_HVM_PF_XEN64, 0/*!cycles*/,sizeof(d),
+ (unsigned char *)&d);
} else {
#endif
struct {
@@ -136,7 +154,8 @@ static inline void hvmtrace_pf_xen(struct vcpu *v, unsigned long va,
d.vid = v->vcpu_id;
d.error_code = error_code;
d.va = va;
- trace_var(TRC_HVM_PF_XEN, 0/*!cycles*/,sizeof(d), (unsigned char *)&d);
+ __trace_var(TRC_HVM_PF_XEN, 0/*!cycles*/,sizeof(d),
+ (unsigned char *)&d);
#ifdef __x86_64__
}
#endif
@@ -144,7 +163,7 @@ static inline void hvmtrace_pf_xen(struct vcpu *v, unsigned long va,
#define HVMTRACE_ND(evt, vcpu, count, d1, d2, d3, d4) \
do { \
- if (DO_TRC_HVM_ ## evt) \
+ if ( unlikely(tb_init_done) && DO_TRC_HVM_ ## evt ) \
{ \
struct { \
unsigned did:16, vid:16; \
@@ -156,8 +175,8 @@ static inline void hvmtrace_pf_xen(struct vcpu *v, unsigned long va,
_d.d[1]=(d2); \
_d.d[2]=(d3); \
_d.d[3]=(d4); \
- trace_var(TRC_HVM_ ## evt, 0/*!cycles*/, \
- sizeof(u32)*count+1, (unsigned char *)&_d); \
+ __trace_var(TRC_HVM_ ## evt, 0/*!cycles*/, \
+ sizeof(u32)*count+1, (unsigned char *)&_d); \
} \
} while(0)