* [PATCH 0 of 3] Add ability for KVM TRACE to work on other archs
@ 2008-06-20 4:19 Jerone Young
2008-06-20 4:19 ` [PATCH 1 of 3] Remove use of bit fields in kvm trace structure Jerone Young
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Jerone Young @ 2008-06-20 4:19 UTC (permalink / raw)
To: kvm; +Cc: kvm-ppc
This set of patches allows KVM TRACE to work on other architectures by moving definitions to common places and changing how variables in data structures are used.
Signed-off-by: Jerone Young <jyoung5@.us.ibm.com>
5 files changed, 66 insertions(+), 51 deletions(-)
include/asm-x86/kvm.h | 22 ---------------------
include/asm-x86/kvm_host.h | 18 -----------------
include/linux/kvm.h | 10 ++++++---
include/linux/kvm_host.h | 45 ++++++++++++++++++++++++++++++++++++++++++++
virt/kvm/kvm_trace.c | 22 +++++++++++++--------
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH 1 of 3] Remove use of bit fields in kvm trace structure 2008-06-20 4:19 [PATCH 0 of 3] Add ability for KVM TRACE to work on other archs Jerone Young @ 2008-06-20 4:19 ` Jerone Young 2008-06-20 16:59 ` Hollis Blanchard 2008-06-23 2:33 ` Avi Kivity 2008-06-20 4:19 ` [PATCH 2 of 3] Move KVM TRACE DEFINITIONS to common header Jerone Young 2008-06-20 4:19 ` [PATCH 3 of 3] Add new KVM TRACE events Jerone Young 2 siblings, 2 replies; 10+ messages in thread From: Jerone Young @ 2008-06-20 4:19 UTC (permalink / raw) To: kvm; +Cc: kvm-ppc 2 files changed, 21 insertions(+), 11 deletions(-) include/linux/kvm.h | 10 +++++++--- virt/kvm/kvm_trace.c | 22 ++++++++++++++-------- This patch fixes kvmtrace use on big endian systems. When using bit fields the compiler will lay data out in the wrong order expected when laid down into a file. This fixes it by using one variable instead of using bit fields. Signed-off-by: Jerone Young <jyoung5@us.ibm.com> diff --git a/include/linux/kvm.h b/include/linux/kvm.h --- a/include/linux/kvm.h +++ b/include/linux/kvm.h @@ -311,9 +311,13 @@ struct kvm_s390_interrupt { /* This structure represents a single trace buffer record. */ struct kvm_trace_rec { - __u32 event:28; - __u32 extra_u32:3; - __u32 cycle_in:1; + /* variable rec_val + * is split into: + * bits 0 - 27 -> event id + * bits 28 -30 -> number of extra data args of size u32 + * bits 31 -> binary indicator for if tsc is in record + */ + __u32 rec_val; __u32 pid; __u32 vcpu_id; union { diff --git a/virt/kvm/kvm_trace.c b/virt/kvm/kvm_trace.c --- a/virt/kvm/kvm_trace.c +++ b/virt/kvm/kvm_trace.c @@ -54,12 +54,15 @@ static void kvm_add_trace(void *probe_pr struct kvm_trace *kt = kvm_trace; struct kvm_trace_rec rec; struct kvm_vcpu *vcpu; - int i, extra, size; + int i, size; + u32 extra; if (unlikely(kt->trace_state != KVM_TRACE_STATE_RUNNING)) return; + + /* set event id */ + rec.rec_val = 0x0fffffff & va_arg(*args, u32); - rec.event = va_arg(*args, u32); vcpu = va_arg(*args, struct kvm_vcpu *); rec.pid = current->tgid; rec.vcpu_id = vcpu->vcpu_id; @@ -67,21 +70,24 @@ static void kvm_add_trace(void *probe_pr extra = va_arg(*args, u32); WARN_ON(!(extra <= KVM_TRC_EXTRA_MAX)); extra = min_t(u32, extra, KVM_TRC_EXTRA_MAX); - rec.extra_u32 = extra; - rec.cycle_in = p->cycle_in; + /* set inidicator for tcs record */ + rec.rec_val |= 0x80000000 & (p->cycle_in << 31); + + /* set extra data num */ + rec.rec_val |= 0x70000000 & (extra << 28); - if (rec.cycle_in) { + if (p->cycle_in) { rec.u.cycle.cycle_u64 = get_cycles(); - for (i = 0; i < rec.extra_u32; i++) + for (i = 0; i < extra; i++) rec.u.cycle.extra_u32[i] = va_arg(*args, u32); } else { - for (i = 0; i < rec.extra_u32; i++) + for (i = 0; i < extra; i++) rec.u.nocycle.extra_u32[i] = va_arg(*args, u32); } - size = calc_rec_size(rec.cycle_in, rec.extra_u32 * sizeof(u32)); + size = calc_rec_size(p->cycle_in, extra * sizeof(u32)); relay_write(kt->rchan, &rec, size); } ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1 of 3] Remove use of bit fields in kvm trace structure 2008-06-20 4:19 ` [PATCH 1 of 3] Remove use of bit fields in kvm trace structure Jerone Young @ 2008-06-20 16:59 ` Hollis Blanchard 2008-06-23 2:33 ` Avi Kivity 1 sibling, 0 replies; 10+ messages in thread From: Hollis Blanchard @ 2008-06-20 16:59 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm, kvm-ppc, Liu, Eric E, Jerone Young Slightly unconventional coding style, but Acked-by: Hollis Blanchard <hollisb@us.ibm.com> Eric, as I mentioned previously, bitfields cannot be used in portable binary formats. Avi, would you apply please? -- Hollis Blanchard IBM Linux Technology Center On Thu, 2008-06-19 at 23:19 -0500, Jerone Young wrote: > 2 files changed, 21 insertions(+), 11 deletions(-) > include/linux/kvm.h | 10 +++++++--- > virt/kvm/kvm_trace.c | 22 ++++++++++++++-------- > > > This patch fixes kvmtrace use on big endian systems. When using bit fields the compiler will lay data out in the wrong order expected when laid down into a file. This fixes it by using one variable instead of using bit fields. > > Signed-off-by: Jerone Young <jyoung5@us.ibm.com> > > diff --git a/include/linux/kvm.h b/include/linux/kvm.h > --- a/include/linux/kvm.h > +++ b/include/linux/kvm.h > @@ -311,9 +311,13 @@ struct kvm_s390_interrupt { > > /* This structure represents a single trace buffer record. */ > struct kvm_trace_rec { > - __u32 event:28; > - __u32 extra_u32:3; > - __u32 cycle_in:1; > + /* variable rec_val > + * is split into: > + * bits 0 - 27 -> event id > + * bits 28 -30 -> number of extra data args of size u32 > + * bits 31 -> binary indicator for if tsc is in record > + */ > + __u32 rec_val; > __u32 pid; > __u32 vcpu_id; > union { > diff --git a/virt/kvm/kvm_trace.c b/virt/kvm/kvm_trace.c > --- a/virt/kvm/kvm_trace.c > +++ b/virt/kvm/kvm_trace.c > @@ -54,12 +54,15 @@ static void kvm_add_trace(void *probe_pr > struct kvm_trace *kt = kvm_trace; > struct kvm_trace_rec rec; > struct kvm_vcpu *vcpu; > - int i, extra, size; > + int i, size; > + u32 extra; > > if (unlikely(kt->trace_state != KVM_TRACE_STATE_RUNNING)) > return; > + > + /* set event id */ > + rec.rec_val = 0x0fffffff & va_arg(*args, u32); > > - rec.event = va_arg(*args, u32); > vcpu = va_arg(*args, struct kvm_vcpu *); > rec.pid = current->tgid; > rec.vcpu_id = vcpu->vcpu_id; > @@ -67,21 +70,24 @@ static void kvm_add_trace(void *probe_pr > extra = va_arg(*args, u32); > WARN_ON(!(extra <= KVM_TRC_EXTRA_MAX)); > extra = min_t(u32, extra, KVM_TRC_EXTRA_MAX); > - rec.extra_u32 = extra; > > - rec.cycle_in = p->cycle_in; > + /* set inidicator for tcs record */ > + rec.rec_val |= 0x80000000 & (p->cycle_in << 31); > + > + /* set extra data num */ > + rec.rec_val |= 0x70000000 & (extra << 28); > > - if (rec.cycle_in) { > + if (p->cycle_in) { > rec.u.cycle.cycle_u64 = get_cycles(); > > - for (i = 0; i < rec.extra_u32; i++) > + for (i = 0; i < extra; i++) > rec.u.cycle.extra_u32[i] = va_arg(*args, u32); > } else { > - for (i = 0; i < rec.extra_u32; i++) > + for (i = 0; i < extra; i++) > rec.u.nocycle.extra_u32[i] = va_arg(*args, u32); > } > > - size = calc_rec_size(rec.cycle_in, rec.extra_u32 * sizeof(u32)); > + size = calc_rec_size(p->cycle_in, extra * sizeof(u32)); > relay_write(kt->rchan, &rec, size); > } > > -- > To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1 of 3] Remove use of bit fields in kvm trace structure 2008-06-20 4:19 ` [PATCH 1 of 3] Remove use of bit fields in kvm trace structure Jerone Young 2008-06-20 16:59 ` Hollis Blanchard @ 2008-06-23 2:33 ` Avi Kivity 1 sibling, 0 replies; 10+ messages in thread From: Avi Kivity @ 2008-06-23 2:33 UTC (permalink / raw) To: Jerone Young; +Cc: kvm, kvm-ppc Jerone Young wrote: > > This patch fixes kvmtrace use on big endian systems. When using bit fields the compiler will lay data out in the wrong order expected when laid down into a file. This fixes it by using one variable instead of using bit fields. > > Signed-off-by: Jerone Young <jyoung5@us.ibm.com> > > diff --git a/include/linux/kvm.h b/include/linux/kvm.h > --- a/include/linux/kvm.h > +++ b/include/linux/kvm.h > @@ -311,9 +311,13 @@ struct kvm_s390_interrupt { > > /* This structure represents a single trace buffer record. */ > struct kvm_trace_rec { > - __u32 event:28; > - __u32 extra_u32:3; > - __u32 cycle_in:1; > + /* variable rec_val > + * is split into: > + * bits 0 - 27 -> event id > + * bits 28 -30 -> number of extra data args of size u32 > + * bits 31 -> binary indicator for if tsc is in record > + */ > + __u32 rec_val; > Please use #defines for shifts and masks instead of open-coding. These #defines would be part of the public interface. -- Do not meddle in the internals of kernels, for they are subtle and quick to panic. ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2 of 3] Move KVM TRACE DEFINITIONS to common header 2008-06-20 4:19 [PATCH 0 of 3] Add ability for KVM TRACE to work on other archs Jerone Young 2008-06-20 4:19 ` [PATCH 1 of 3] Remove use of bit fields in kvm trace structure Jerone Young @ 2008-06-20 4:19 ` Jerone Young 2008-06-29 11:50 ` Avi Kivity 2008-06-20 4:19 ` [PATCH 3 of 3] Add new KVM TRACE events Jerone Young 2 siblings, 1 reply; 10+ messages in thread From: Jerone Young @ 2008-06-20 4:19 UTC (permalink / raw) To: kvm; +Cc: kvm-ppc 3 files changed, 40 insertions(+), 40 deletions(-) include/asm-x86/kvm.h | 22 ---------------------- include/asm-x86/kvm_host.h | 18 ------------------ include/linux/kvm_host.h | 40 ++++++++++++++++++++++++++++++++++++++++ This patch moves moves definitions required to use kvm trace from x86 specific kvm headers to common kvm headers. Signed-off-by: Jerone Young <jyoung5@us.ibm.com> diff --git a/include/asm-x86/kvm.h b/include/asm-x86/kvm.h --- a/include/asm-x86/kvm.h +++ b/include/asm-x86/kvm.h @@ -208,26 +208,4 @@ struct kvm_pit_state { struct kvm_pit_state { struct kvm_pit_channel_state channels[3]; }; - -#define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) -#define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) -#define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04) -#define KVM_TRC_IO_READ (KVM_TRC_HANDLER + 0x05) -#define KVM_TRC_IO_WRITE (KVM_TRC_HANDLER + 0x06) -#define KVM_TRC_CR_READ (KVM_TRC_HANDLER + 0x07) -#define KVM_TRC_CR_WRITE (KVM_TRC_HANDLER + 0x08) -#define KVM_TRC_DR_READ (KVM_TRC_HANDLER + 0x09) -#define KVM_TRC_DR_WRITE (KVM_TRC_HANDLER + 0x0A) -#define KVM_TRC_MSR_READ (KVM_TRC_HANDLER + 0x0B) -#define KVM_TRC_MSR_WRITE (KVM_TRC_HANDLER + 0x0C) -#define KVM_TRC_CPUID (KVM_TRC_HANDLER + 0x0D) -#define KVM_TRC_INTR (KVM_TRC_HANDLER + 0x0E) -#define KVM_TRC_NMI (KVM_TRC_HANDLER + 0x0F) -#define KVM_TRC_VMMCALL (KVM_TRC_HANDLER + 0x10) -#define KVM_TRC_HLT (KVM_TRC_HANDLER + 0x11) -#define KVM_TRC_CLTS (KVM_TRC_HANDLER + 0x12) -#define KVM_TRC_LMSW (KVM_TRC_HANDLER + 0x13) -#define KVM_TRC_APIC_ACCESS (KVM_TRC_HANDLER + 0x14) -#define KVM_TRC_TDP_FAULT (KVM_TRC_HANDLER + 0x15) - #endif diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h --- a/include/asm-x86/kvm_host.h +++ b/include/asm-x86/kvm_host.h @@ -683,24 +683,6 @@ enum { TASK_SWITCH_GATE = 3, }; -#define KVMTRACE_5D(evt, vcpu, d1, d2, d3, d4, d5, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 5, d1, d2, d3, d4, d5) -#define KVMTRACE_4D(evt, vcpu, d1, d2, d3, d4, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 4, d1, d2, d3, d4, 0) -#define KVMTRACE_3D(evt, vcpu, d1, d2, d3, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 3, d1, d2, d3, 0, 0) -#define KVMTRACE_2D(evt, vcpu, d1, d2, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 2, d1, d2, 0, 0, 0) -#define KVMTRACE_1D(evt, vcpu, d1, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 1, d1, 0, 0, 0, 0) -#define KVMTRACE_0D(evt, vcpu, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 0, 0, 0, 0, 0, 0) #ifdef CONFIG_64BIT #define KVM_EX_ENTRY ".quad" diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -322,6 +322,46 @@ extern struct dentry *kvm_debugfs_dir; #ifdef CONFIG_KVM_TRACE int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg); void kvm_trace_cleanup(void); + +#define KVMTRACE_5D(evt, vcpu, d1, d2, d3, d4, d5, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 5, d1, d2, d3, d4, d5) +#define KVMTRACE_4D(evt, vcpu, d1, d2, d3, d4, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 4, d1, d2, d3, d4, 0) +#define KVMTRACE_3D(evt, vcpu, d1, d2, d3, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 3, d1, d2, d3, 0, 0) +#define KVMTRACE_2D(evt, vcpu, d1, d2, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 2, d1, d2, 0, 0, 0) +#define KVMTRACE_1D(evt, vcpu, d1, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 1, d1, 0, 0, 0, 0) +#define KVMTRACE_0D(evt, vcpu, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 0, 0, 0, 0, 0, 0) + +#define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) +#define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) +#define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04) +#define KVM_TRC_IO_READ (KVM_TRC_HANDLER + 0x05) +#define KVM_TRC_IO_WRITE (KVM_TRC_HANDLER + 0x06) +#define KVM_TRC_CR_READ (KVM_TRC_HANDLER + 0x07) +#define KVM_TRC_CR_WRITE (KVM_TRC_HANDLER + 0x08) +#define KVM_TRC_DR_READ (KVM_TRC_HANDLER + 0x09) +#define KVM_TRC_DR_WRITE (KVM_TRC_HANDLER + 0x0A) +#define KVM_TRC_MSR_READ (KVM_TRC_HANDLER + 0x0B) +#define KVM_TRC_MSR_WRITE (KVM_TRC_HANDLER + 0x0C) +#define KVM_TRC_CPUID (KVM_TRC_HANDLER + 0x0D) +#define KVM_TRC_INTR (KVM_TRC_HANDLER + 0x0E) +#define KVM_TRC_NMI (KVM_TRC_HANDLER + 0x0F) +#define KVM_TRC_VMMCALL (KVM_TRC_HANDLER + 0x10) +#define KVM_TRC_HLT (KVM_TRC_HANDLER + 0x11) +#define KVM_TRC_CLTS (KVM_TRC_HANDLER + 0x12) +#define KVM_TRC_LMSW (KVM_TRC_HANDLER + 0x13) +#define KVM_TRC_APIC_ACCESS (KVM_TRC_HANDLER + 0x14) +#define KVM_TRC_TDP_FAULT (KVM_TRC_HANDLER + 0x15) #else static inline int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg) ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2 of 3] Move KVM TRACE DEFINITIONS to common header 2008-06-20 4:19 ` [PATCH 2 of 3] Move KVM TRACE DEFINITIONS to common header Jerone Young @ 2008-06-29 11:50 ` Avi Kivity 2008-07-01 19:59 ` Hollis Blanchard 0 siblings, 1 reply; 10+ messages in thread From: Avi Kivity @ 2008-06-29 11:50 UTC (permalink / raw) To: Jerone Young; +Cc: kvm, kvm-ppc Jerone Young wrote: > 3 files changed, 40 insertions(+), 40 deletions(-) > include/asm-x86/kvm.h | 22 ---------------------- > include/asm-x86/kvm_host.h | 18 ------------------ > include/linux/kvm_host.h | 40 ++++++++++++++++++++++++++++++++++++++++ > > > This patch moves moves definitions required to use kvm trace from x86 specific kvm headers to common kvm headers. > > I applied patch 1, but: > vcpu, 0, 0, 0, 0, 0, 0) > > #ifdef CONFIG_64BIT > #define KVM_EX_ENTRY ".quad" > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -322,6 +322,46 @@ extern struct dentry *kvm_debugfs_dir; > #ifdef CONFIG_KVM_TRACE > int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg); > void kvm_trace_cleanup(void); > +#define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) > +#define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) > +#define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04) > +#define KVM_TRC_IO_READ (KVM_TRC_HANDLER + 0x05) > +#define KVM_TRC_IO_WRITE (KVM_TRC_HANDLER + 0x06) > +#define KVM_TRC_CR_READ (KVM_TRC_HANDLER + 0x07) > +#define KVM_TRC_CR_WRITE (KVM_TRC_HANDLER + 0x08) > +#define KVM_TRC_DR_READ (KVM_TRC_HANDLER + 0x09) > +#define KVM_TRC_DR_WRITE (KVM_TRC_HANDLER + 0x0A) > +#define KVM_TRC_MSR_READ (KVM_TRC_HANDLER + 0x0B) > +#define KVM_TRC_MSR_WRITE (KVM_TRC_HANDLER + 0x0C) > +#define KVM_TRC_CPUID (KVM_TRC_HANDLER + 0x0D) > +#define KVM_TRC_INTR (KVM_TRC_HANDLER + 0x0E) > +#define KVM_TRC_NMI (KVM_TRC_HANDLER + 0x0F) > +#define KVM_TRC_VMMCALL (KVM_TRC_HANDLER + 0x10) > +#define KVM_TRC_HLT (KVM_TRC_HANDLER + 0x11) > +#define KVM_TRC_CLTS (KVM_TRC_HANDLER + 0x12) > +#define KVM_TRC_LMSW (KVM_TRC_HANDLER + 0x13) > +#define KVM_TRC_APIC_ACCESS (KVM_TRC_HANDLER + 0x14) > +#define KVM_TRC_TDP_FAULT (KVM_TRC_HANDLER + 0x15) > #else > static inline > int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg) > This hides the defines from the public interface. The KVM_TRC_* constants should be in kvm.h. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2 of 3] Move KVM TRACE DEFINITIONS to common header 2008-06-29 11:50 ` Avi Kivity @ 2008-07-01 19:59 ` Hollis Blanchard 2008-07-01 21:23 ` [PATCH 2 of 3] [v2] " Hollis Blanchard 0 siblings, 1 reply; 10+ messages in thread From: Hollis Blanchard @ 2008-07-01 19:59 UTC (permalink / raw) To: Avi Kivity; +Cc: Jerone Young, kvm, kvm-ppc Move KVM trace definitions from x86 specific kvm headers to common kvm headers to create a cross-architecture numbering scheme for trace events. This means the kvmtrace_format userspace tool won't need to know which architecture produced the log file being processed. Signed-off-by: Jerone Young <jyoung5@us.ibm.com> Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com> --- Avi, you said you already applied #1, and this is the revised #2. There is no need to apply #3; I've combined those macro definitions with the PowerPC-specific patches that use them. diff --git a/include/asm-x86/kvm.h b/include/asm-x86/kvm.h --- a/include/asm-x86/kvm.h +++ b/include/asm-x86/kvm.h @@ -208,26 +208,4 @@ struct kvm_pit_state { struct kvm_pit_state { struct kvm_pit_channel_state channels[3]; }; - -#define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) -#define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) -#define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04) -#define KVM_TRC_IO_READ (KVM_TRC_HANDLER + 0x05) -#define KVM_TRC_IO_WRITE (KVM_TRC_HANDLER + 0x06) -#define KVM_TRC_CR_READ (KVM_TRC_HANDLER + 0x07) -#define KVM_TRC_CR_WRITE (KVM_TRC_HANDLER + 0x08) -#define KVM_TRC_DR_READ (KVM_TRC_HANDLER + 0x09) -#define KVM_TRC_DR_WRITE (KVM_TRC_HANDLER + 0x0A) -#define KVM_TRC_MSR_READ (KVM_TRC_HANDLER + 0x0B) -#define KVM_TRC_MSR_WRITE (KVM_TRC_HANDLER + 0x0C) -#define KVM_TRC_CPUID (KVM_TRC_HANDLER + 0x0D) -#define KVM_TRC_INTR (KVM_TRC_HANDLER + 0x0E) -#define KVM_TRC_NMI (KVM_TRC_HANDLER + 0x0F) -#define KVM_TRC_VMMCALL (KVM_TRC_HANDLER + 0x10) -#define KVM_TRC_HLT (KVM_TRC_HANDLER + 0x11) -#define KVM_TRC_CLTS (KVM_TRC_HANDLER + 0x12) -#define KVM_TRC_LMSW (KVM_TRC_HANDLER + 0x13) -#define KVM_TRC_APIC_ACCESS (KVM_TRC_HANDLER + 0x14) -#define KVM_TRC_TDP_FAULT (KVM_TRC_HANDLER + 0x15) - #endif diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h --- a/include/asm-x86/kvm_host.h +++ b/include/asm-x86/kvm_host.h @@ -685,24 +685,6 @@ enum { TASK_SWITCH_GATE = 3, }; -#define KVMTRACE_5D(evt, vcpu, d1, d2, d3, d4, d5, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 5, d1, d2, d3, d4, d5) -#define KVMTRACE_4D(evt, vcpu, d1, d2, d3, d4, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 4, d1, d2, d3, d4, 0) -#define KVMTRACE_3D(evt, vcpu, d1, d2, d3, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 3, d1, d2, d3, 0, 0) -#define KVMTRACE_2D(evt, vcpu, d1, d2, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 2, d1, d2, 0, 0, 0) -#define KVMTRACE_1D(evt, vcpu, d1, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 1, d1, 0, 0, 0, 0) -#define KVMTRACE_0D(evt, vcpu, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 0, 0, 0, 0, 0, 0) #ifdef CONFIG_64BIT #define KVM_EX_ENTRY ".quad" diff --git a/include/linux/kvm.h b/include/linux/kvm.h --- a/include/linux/kvm.h +++ b/include/linux/kvm.h @@ -450,4 +450,25 @@ struct kvm_trace_rec { #define KVM_GET_MP_STATE _IOR(KVMIO, 0x98, struct kvm_mp_state) #define KVM_SET_MP_STATE _IOW(KVMIO, 0x99, struct kvm_mp_state) +#define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) +#define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) +#define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04) +#define KVM_TRC_IO_READ (KVM_TRC_HANDLER + 0x05) +#define KVM_TRC_IO_WRITE (KVM_TRC_HANDLER + 0x06) +#define KVM_TRC_CR_READ (KVM_TRC_HANDLER + 0x07) +#define KVM_TRC_CR_WRITE (KVM_TRC_HANDLER + 0x08) +#define KVM_TRC_DR_READ (KVM_TRC_HANDLER + 0x09) +#define KVM_TRC_DR_WRITE (KVM_TRC_HANDLER + 0x0A) +#define KVM_TRC_MSR_READ (KVM_TRC_HANDLER + 0x0B) +#define KVM_TRC_MSR_WRITE (KVM_TRC_HANDLER + 0x0C) +#define KVM_TRC_CPUID (KVM_TRC_HANDLER + 0x0D) +#define KVM_TRC_INTR (KVM_TRC_HANDLER + 0x0E) +#define KVM_TRC_NMI (KVM_TRC_HANDLER + 0x0F) +#define KVM_TRC_VMMCALL (KVM_TRC_HANDLER + 0x10) +#define KVM_TRC_HLT (KVM_TRC_HANDLER + 0x11) +#define KVM_TRC_CLTS (KVM_TRC_HANDLER + 0x12) +#define KVM_TRC_LMSW (KVM_TRC_HANDLER + 0x13) +#define KVM_TRC_APIC_ACCESS (KVM_TRC_HANDLER + 0x14) +#define KVM_TRC_TDP_FAULT (KVM_TRC_HANDLER + 0x15) + #endif diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -322,6 +322,26 @@ extern struct dentry *kvm_debugfs_dir; #ifdef CONFIG_KVM_TRACE int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg); void kvm_trace_cleanup(void); + +#define KVMTRACE_5D(evt, vcpu, d1, d2, d3, d4, d5, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 5, d1, d2, d3, d4, d5) +#define KVMTRACE_4D(evt, vcpu, d1, d2, d3, d4, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 4, d1, d2, d3, d4, 0) +#define KVMTRACE_3D(evt, vcpu, d1, d2, d3, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 3, d1, d2, d3, 0, 0) +#define KVMTRACE_2D(evt, vcpu, d1, d2, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 2, d1, d2, 0, 0, 0) +#define KVMTRACE_1D(evt, vcpu, d1, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 1, d1, 0, 0, 0, 0) +#define KVMTRACE_0D(evt, vcpu, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 0, 0, 0, 0, 0, 0) + #else static inline int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg) -- Hollis Blanchard IBM Linux Technology Center ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2 of 3] [v2] Move KVM TRACE DEFINITIONS to common header 2008-07-01 19:59 ` Hollis Blanchard @ 2008-07-01 21:23 ` Hollis Blanchard 2008-07-05 9:35 ` Avi Kivity 0 siblings, 1 reply; 10+ messages in thread From: Hollis Blanchard @ 2008-07-01 21:23 UTC (permalink / raw) To: Avi Kivity; +Cc: Jerone Young, kvm, kvm-ppc Move KVM trace definitions from x86 specific kvm headers to common kvm headers to create a cross-architecture numbering scheme for trace events. This means the kvmtrace_format userspace tool won't need to know which architecture produced the log file being processed. Signed-off-by: Jerone Young <jyoung5@us.ibm.com> Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com> --- The previous versions of this patch would not build when CONFIG_KVM_TRACE was not enabled. Please use this patch instead. diff --git a/include/asm-x86/kvm.h b/include/asm-x86/kvm.h --- a/include/asm-x86/kvm.h +++ b/include/asm-x86/kvm.h @@ -208,26 +208,4 @@ struct kvm_pit_state { struct kvm_pit_state { struct kvm_pit_channel_state channels[3]; }; - -#define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) -#define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) -#define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04) -#define KVM_TRC_IO_READ (KVM_TRC_HANDLER + 0x05) -#define KVM_TRC_IO_WRITE (KVM_TRC_HANDLER + 0x06) -#define KVM_TRC_CR_READ (KVM_TRC_HANDLER + 0x07) -#define KVM_TRC_CR_WRITE (KVM_TRC_HANDLER + 0x08) -#define KVM_TRC_DR_READ (KVM_TRC_HANDLER + 0x09) -#define KVM_TRC_DR_WRITE (KVM_TRC_HANDLER + 0x0A) -#define KVM_TRC_MSR_READ (KVM_TRC_HANDLER + 0x0B) -#define KVM_TRC_MSR_WRITE (KVM_TRC_HANDLER + 0x0C) -#define KVM_TRC_CPUID (KVM_TRC_HANDLER + 0x0D) -#define KVM_TRC_INTR (KVM_TRC_HANDLER + 0x0E) -#define KVM_TRC_NMI (KVM_TRC_HANDLER + 0x0F) -#define KVM_TRC_VMMCALL (KVM_TRC_HANDLER + 0x10) -#define KVM_TRC_HLT (KVM_TRC_HANDLER + 0x11) -#define KVM_TRC_CLTS (KVM_TRC_HANDLER + 0x12) -#define KVM_TRC_LMSW (KVM_TRC_HANDLER + 0x13) -#define KVM_TRC_APIC_ACCESS (KVM_TRC_HANDLER + 0x14) -#define KVM_TRC_TDP_FAULT (KVM_TRC_HANDLER + 0x15) - #endif diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h --- a/include/asm-x86/kvm_host.h +++ b/include/asm-x86/kvm_host.h @@ -685,24 +685,6 @@ enum { TASK_SWITCH_GATE = 3, }; -#define KVMTRACE_5D(evt, vcpu, d1, d2, d3, d4, d5, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 5, d1, d2, d3, d4, d5) -#define KVMTRACE_4D(evt, vcpu, d1, d2, d3, d4, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 4, d1, d2, d3, d4, 0) -#define KVMTRACE_3D(evt, vcpu, d1, d2, d3, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 3, d1, d2, d3, 0, 0) -#define KVMTRACE_2D(evt, vcpu, d1, d2, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 2, d1, d2, 0, 0, 0) -#define KVMTRACE_1D(evt, vcpu, d1, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 1, d1, 0, 0, 0, 0) -#define KVMTRACE_0D(evt, vcpu, name) \ - trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ - vcpu, 0, 0, 0, 0, 0, 0) #ifdef CONFIG_64BIT #define KVM_EX_ENTRY ".quad" diff --git a/include/linux/kvm.h b/include/linux/kvm.h --- a/include/linux/kvm.h +++ b/include/linux/kvm.h @@ -450,4 +450,25 @@ struct kvm_trace_rec { #define KVM_GET_MP_STATE _IOR(KVMIO, 0x98, struct kvm_mp_state) #define KVM_SET_MP_STATE _IOW(KVMIO, 0x99, struct kvm_mp_state) +#define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) +#define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) +#define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04) +#define KVM_TRC_IO_READ (KVM_TRC_HANDLER + 0x05) +#define KVM_TRC_IO_WRITE (KVM_TRC_HANDLER + 0x06) +#define KVM_TRC_CR_READ (KVM_TRC_HANDLER + 0x07) +#define KVM_TRC_CR_WRITE (KVM_TRC_HANDLER + 0x08) +#define KVM_TRC_DR_READ (KVM_TRC_HANDLER + 0x09) +#define KVM_TRC_DR_WRITE (KVM_TRC_HANDLER + 0x0A) +#define KVM_TRC_MSR_READ (KVM_TRC_HANDLER + 0x0B) +#define KVM_TRC_MSR_WRITE (KVM_TRC_HANDLER + 0x0C) +#define KVM_TRC_CPUID (KVM_TRC_HANDLER + 0x0D) +#define KVM_TRC_INTR (KVM_TRC_HANDLER + 0x0E) +#define KVM_TRC_NMI (KVM_TRC_HANDLER + 0x0F) +#define KVM_TRC_VMMCALL (KVM_TRC_HANDLER + 0x10) +#define KVM_TRC_HLT (KVM_TRC_HANDLER + 0x11) +#define KVM_TRC_CLTS (KVM_TRC_HANDLER + 0x12) +#define KVM_TRC_LMSW (KVM_TRC_HANDLER + 0x13) +#define KVM_TRC_APIC_ACCESS (KVM_TRC_HANDLER + 0x14) +#define KVM_TRC_TDP_FAULT (KVM_TRC_HANDLER + 0x15) + #endif diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -319,6 +319,25 @@ extern struct kvm_stats_debugfs_item deb extern struct kvm_stats_debugfs_item debugfs_entries[]; extern struct dentry *kvm_debugfs_dir; +#define KVMTRACE_5D(evt, vcpu, d1, d2, d3, d4, d5, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 5, d1, d2, d3, d4, d5) +#define KVMTRACE_4D(evt, vcpu, d1, d2, d3, d4, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 4, d1, d2, d3, d4, 0) +#define KVMTRACE_3D(evt, vcpu, d1, d2, d3, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 3, d1, d2, d3, 0, 0) +#define KVMTRACE_2D(evt, vcpu, d1, d2, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 2, d1, d2, 0, 0, 0) +#define KVMTRACE_1D(evt, vcpu, d1, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 1, d1, 0, 0, 0, 0) +#define KVMTRACE_0D(evt, vcpu, name) \ + trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ + vcpu, 0, 0, 0, 0, 0, 0) + #ifdef CONFIG_KVM_TRACE int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg); void kvm_trace_cleanup(void); -- Hollis Blanchard IBM Linux Technology Center ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2 of 3] [v2] Move KVM TRACE DEFINITIONS to common header 2008-07-01 21:23 ` [PATCH 2 of 3] [v2] " Hollis Blanchard @ 2008-07-05 9:35 ` Avi Kivity 0 siblings, 0 replies; 10+ messages in thread From: Avi Kivity @ 2008-07-05 9:35 UTC (permalink / raw) To: Hollis Blanchard; +Cc: Jerone Young, kvm, kvm-ppc Hollis Blanchard wrote: > Move KVM trace definitions from x86 specific kvm headers to common kvm > headers to create a cross-architecture numbering scheme for trace > events. This means the kvmtrace_format userspace tool won't need to know > which architecture produced the log file being processed. > > Applied, thanks. -- I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain. ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 3 of 3] Add new KVM TRACE events 2008-06-20 4:19 [PATCH 0 of 3] Add ability for KVM TRACE to work on other archs Jerone Young 2008-06-20 4:19 ` [PATCH 1 of 3] Remove use of bit fields in kvm trace structure Jerone Young 2008-06-20 4:19 ` [PATCH 2 of 3] Move KVM TRACE DEFINITIONS to common header Jerone Young @ 2008-06-20 4:19 ` Jerone Young 2 siblings, 0 replies; 10+ messages in thread From: Jerone Young @ 2008-06-20 4:19 UTC (permalink / raw) To: kvm; +Cc: kvm-ppc 1 file changed, 5 insertions(+) include/linux/kvm_host.h | 5 +++++ Add new kvm trace events. - context switch - TLB write - TLB invalidate - guest TLB write - shadow TLB write Signed-off-by: Jerone Young <jyoung5@us.ibm.com> diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -362,6 +362,11 @@ void kvm_trace_cleanup(void); #define KVM_TRC_LMSW (KVM_TRC_HANDLER + 0x13) #define KVM_TRC_APIC_ACCESS (KVM_TRC_HANDLER + 0x14) #define KVM_TRC_TDP_FAULT (KVM_TRC_HANDLER + 0x15) +#define KVM_TRC_CONT_SWITCH (KVM_TRC_HANDLER + 0x16) /* context switch */ +#define KVM_TRC_TLB_WRITE (KVM_TRC_HANDLER + 0x17) /* TLB write */ +#define KVM_TRC_TLB_INVAL (KVM_TRC_HANDLER + 0x18) /* TLB invalidate */ +#define KVM_TRC_GTLB_WRITE (KVM_TRC_HANDLER + 0x19) /* guest TLB write */ +#define KVM_TRC_STLB_WRITE (KVM_TRC_HANDLER + 0x20) /* shadow TLB write */ #else static inline int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg) ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2008-07-05 9:35 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-06-20 4:19 [PATCH 0 of 3] Add ability for KVM TRACE to work on other archs Jerone Young 2008-06-20 4:19 ` [PATCH 1 of 3] Remove use of bit fields in kvm trace structure Jerone Young 2008-06-20 16:59 ` Hollis Blanchard 2008-06-23 2:33 ` Avi Kivity 2008-06-20 4:19 ` [PATCH 2 of 3] Move KVM TRACE DEFINITIONS to common header Jerone Young 2008-06-29 11:50 ` Avi Kivity 2008-07-01 19:59 ` Hollis Blanchard 2008-07-01 21:23 ` [PATCH 2 of 3] [v2] " Hollis Blanchard 2008-07-05 9:35 ` Avi Kivity 2008-06-20 4:19 ` [PATCH 3 of 3] Add new KVM TRACE events Jerone Young
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox