public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] KVM: trace: Add event mask support
@ 2008-08-13  7:54 Yang, Sheng
  2008-08-13  8:04 ` Avi Kivity
  0 siblings, 1 reply; 3+ messages in thread
From: Yang, Sheng @ 2008-08-13  7:54 UTC (permalink / raw)
  To: Avi Kivity; +Cc: kvm

[-- Attachment #1: Type: text/plain, Size: 3763 bytes --]

From bb7cc3fd1e549d38d6bda10a06feda9339de9d3e Mon Sep 17 00:00:00 2001
From: Sheng Yang <sheng.yang@intel.com>
Date: Wed, 13 Aug 2008 14:29:43 +0800
Subject: [PATCH] KVM: trace: Add event mask support

Allow user space application to specify one or morefilter masks to 
limit the events being captured via it.

Signed-off-by: Feng (Eric) Liu <eric.e.liu@intel.com>
Signed-off-by: Sheng Yang <sheng.yang@intel.com>
---
 include/linux/kvm.h  |    7 +++++++
 virt/kvm/kvm_trace.c |   30 +++++++++++++++++++++++++++---
 2 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/include/linux/kvm.h b/include/linux/kvm.h
index d9ef7d3..05713f2 100644
--- a/include/linux/kvm.h
+++ b/include/linux/kvm.h
@@ -18,6 +18,9 @@
 struct kvm_user_trace_setup {
 	__u32 buf_size; /* sub_buffer size of each per-cpu */
 	__u32 buf_nr; /* the number of sub_buffers of each per-cpu */
+	__u16 cat_mask; /* the tracing categories are enabled */
+	__u16 pad1[3];
+	__u64 act_bitmap[16]; /* the actions are enabled for each category 
*/
 };

 /* for KVM_CREATE_MEMORY_REGION */
@@ -292,6 +295,7 @@ struct kvm_s390_interrupt {
 };

 #define KVM_TRC_SHIFT           16
+#define KVM_TRC_CAT_NR_BITS     12
 /*
  * kvm trace categories
  */
@@ -305,6 +309,9 @@ struct kvm_s390_interrupt {
 #define KVM_TRC_VMEXIT          (KVM_TRC_ENTRYEXIT + 0x02)
 #define KVM_TRC_PAGE_FAULT      (KVM_TRC_HANDLER + 0x01)

+#define KVM_TRC_CAT(evt)        (((evt) >> KVM_TRC_SHIFT) & 0x0fff)
+#define KVM_TRC_ACT(evt)        ((evt) & (~0u >> KVM_TRC_SHIFT))
+
 #define KVM_TRC_HEAD_SIZE       12
 #define KVM_TRC_CYCLE_SIZE      8
 #define KVM_TRC_EXTRA_MAX       7
diff --git a/virt/kvm/kvm_trace.c b/virt/kvm/kvm_trace.c
index 41dcc84..bb4046c 100644
--- a/virt/kvm/kvm_trace.c
+++ b/virt/kvm/kvm_trace.c
@@ -27,6 +27,8 @@

 struct kvm_trace {
 	int trace_state;
+	u16 cat_mask;
+	u64 act_bitmap[16];
 	struct rchan *rchan;
 	struct dentry *lost_file;
 	atomic_t lost_records;
@@ -40,6 +42,23 @@ struct kvm_trace_probe {
 	marker_probe_func *probe_func;
 };

+static inline int check_event_mask(struct kvm_trace *kt, u32 event)
+{
+	unsigned long category;
+	int i;
+
+	category = KVM_TRC_CAT(event);
+	if (!(category & kt->cat_mask))
+		return 1;
+
+	i = find_first_bit(&category, KVM_TRC_CAT_NR_BITS);
+
+	if (!test_bit(KVM_TRC_ACT(event), &kt->act_bitmap[i]))
+		return 1;
+
+	return 0;
+}
+
 static inline int calc_rec_size(int timestamp, int extra)
 {
 	int rec_size = KVM_TRC_HEAD_SIZE;
@@ -56,12 +75,15 @@ static void kvm_add_trace(void *probe_private, 
void *call_data,
 	struct kvm_trace_rec rec;
 	struct kvm_vcpu *vcpu;
 	int    i, size;
-	u32    extra;
+	u32    extra, event;

 	if (unlikely(kt->trace_state != KVM_TRACE_STATE_RUNNING))
 		return;

-	rec.rec_val	= TRACE_REC_EVENT_ID(va_arg(*args, u32));
+	event		= TRACE_REC_EVENT_ID(va_arg(*args, u32));
+	if (check_event_mask(kt, event))
+		return;
+
 	vcpu		= va_arg(*args, struct kvm_vcpu *);
 	rec.pid		= current->tgid;
 	rec.vcpu_id	= vcpu->vcpu_id;
@@ -70,7 +92,7 @@ static void kvm_add_trace(void *probe_private, void 
*call_data,
 	WARN_ON(!(extra <= KVM_TRC_EXTRA_MAX));
 	extra 		= min_t(u32, extra, KVM_TRC_EXTRA_MAX);

-	rec.rec_val |= TRACE_REC_TCS(p->timestamp_in)
+	rec.rec_val = event | TRACE_REC_TCS(p->timestamp_in)
 			| TRACE_REC_NUM_DATA_ARGS(extra);

 	if (p->timestamp_in) {
@@ -177,6 +199,8 @@ static int do_kvm_trace_enable(struct 
kvm_user_trace_setup *kuts)
 	if (!kt->rchan)
 		goto err;

+	kt->cat_mask = kuts->cat_mask;
+	memcpy(kt->act_bitmap, kuts->act_bitmap, sizeof(kuts->act_bitmap));
 	kvm_trace = kt;

 	for (i = 0; i < ARRAY_SIZE(kvm_trace_probes); i++) {
--
1.5.6


[-- Attachment #2: 0001-KVM-trace-Add-event-mask-support.patch --]
[-- Type: text/x-diff, Size: 3767 bytes --]

From bb7cc3fd1e549d38d6bda10a06feda9339de9d3e Mon Sep 17 00:00:00 2001
From: Sheng Yang <sheng.yang@intel.com>
Date: Wed, 13 Aug 2008 14:29:43 +0800
Subject: [PATCH] KVM: trace: Add event mask support.

Allow user space application to specify one or morefilter masks to limit the
events being captured via it.

Signed-off-by: Feng (Eric) Liu <eric.e.liu@intel.com>
Signed-off-by: Sheng Yang <sheng.yang@intel.com>
---
 include/linux/kvm.h  |    7 +++++++
 virt/kvm/kvm_trace.c |   30 +++++++++++++++++++++++++++---
 2 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/include/linux/kvm.h b/include/linux/kvm.h
index d9ef7d3..05713f2 100644
--- a/include/linux/kvm.h
+++ b/include/linux/kvm.h
@@ -18,6 +18,9 @@
 struct kvm_user_trace_setup {
 	__u32 buf_size; /* sub_buffer size of each per-cpu */
 	__u32 buf_nr; /* the number of sub_buffers of each per-cpu */
+	__u16 cat_mask; /* the tracing categories are enabled */
+	__u16 pad1[3];
+	__u64 act_bitmap[16]; /* the actions are enabled for each category */
 };
 
 /* for KVM_CREATE_MEMORY_REGION */
@@ -292,6 +295,7 @@ struct kvm_s390_interrupt {
 };
 
 #define KVM_TRC_SHIFT           16
+#define KVM_TRC_CAT_NR_BITS     12
 /*
  * kvm trace categories
  */
@@ -305,6 +309,9 @@ struct kvm_s390_interrupt {
 #define KVM_TRC_VMEXIT          (KVM_TRC_ENTRYEXIT + 0x02)
 #define KVM_TRC_PAGE_FAULT      (KVM_TRC_HANDLER + 0x01)
 
+#define KVM_TRC_CAT(evt)        (((evt) >> KVM_TRC_SHIFT) & 0x0fff)
+#define KVM_TRC_ACT(evt)        ((evt) & (~0u >> KVM_TRC_SHIFT))
+
 #define KVM_TRC_HEAD_SIZE       12
 #define KVM_TRC_CYCLE_SIZE      8
 #define KVM_TRC_EXTRA_MAX       7
diff --git a/virt/kvm/kvm_trace.c b/virt/kvm/kvm_trace.c
index 41dcc84..bb4046c 100644
--- a/virt/kvm/kvm_trace.c
+++ b/virt/kvm/kvm_trace.c
@@ -27,6 +27,8 @@
 
 struct kvm_trace {
 	int trace_state;
+	u16 cat_mask;
+	u64 act_bitmap[16];
 	struct rchan *rchan;
 	struct dentry *lost_file;
 	atomic_t lost_records;
@@ -40,6 +42,23 @@ struct kvm_trace_probe {
 	marker_probe_func *probe_func;
 };
 
+static inline int check_event_mask(struct kvm_trace *kt, u32 event)
+{
+	unsigned long category;
+	int i;
+
+	category = KVM_TRC_CAT(event);
+	if (!(category & kt->cat_mask))
+		return 1;
+
+	i = find_first_bit(&category, KVM_TRC_CAT_NR_BITS);
+
+	if (!test_bit(KVM_TRC_ACT(event), &kt->act_bitmap[i]))
+		return 1;
+
+	return 0;
+}
+
 static inline int calc_rec_size(int timestamp, int extra)
 {
 	int rec_size = KVM_TRC_HEAD_SIZE;
@@ -56,12 +75,15 @@ static void kvm_add_trace(void *probe_private, void *call_data,
 	struct kvm_trace_rec rec;
 	struct kvm_vcpu *vcpu;
 	int    i, size;
-	u32    extra;
+	u32    extra, event;
 
 	if (unlikely(kt->trace_state != KVM_TRACE_STATE_RUNNING))
 		return;
 
-	rec.rec_val	= TRACE_REC_EVENT_ID(va_arg(*args, u32));
+	event		= TRACE_REC_EVENT_ID(va_arg(*args, u32));
+	if (check_event_mask(kt, event))
+		return;
+
 	vcpu		= va_arg(*args, struct kvm_vcpu *);
 	rec.pid		= current->tgid;
 	rec.vcpu_id	= vcpu->vcpu_id;
@@ -70,7 +92,7 @@ static void kvm_add_trace(void *probe_private, void *call_data,
 	WARN_ON(!(extra <= KVM_TRC_EXTRA_MAX));
 	extra 		= min_t(u32, extra, KVM_TRC_EXTRA_MAX);
 
-	rec.rec_val |= TRACE_REC_TCS(p->timestamp_in)
+	rec.rec_val = event | TRACE_REC_TCS(p->timestamp_in)
 			| TRACE_REC_NUM_DATA_ARGS(extra);
 
 	if (p->timestamp_in) {
@@ -177,6 +199,8 @@ static int do_kvm_trace_enable(struct kvm_user_trace_setup *kuts)
 	if (!kt->rchan)
 		goto err;
 
+	kt->cat_mask = kuts->cat_mask;
+	memcpy(kt->act_bitmap, kuts->act_bitmap, sizeof(kuts->act_bitmap));
 	kvm_trace = kt;
 
 	for (i = 0; i < ARRAY_SIZE(kvm_trace_probes); i++) {
-- 
1.5.6


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/2] KVM: trace: Add event mask support
  2008-08-13  7:54 [PATCH 1/2] KVM: trace: Add event mask support Yang, Sheng
@ 2008-08-13  8:04 ` Avi Kivity
  2008-08-13  8:13   ` Yang, Sheng
  0 siblings, 1 reply; 3+ messages in thread
From: Avi Kivity @ 2008-08-13  8:04 UTC (permalink / raw)
  To: Yang, Sheng; +Cc: kvm

Yang, Sheng wrote:
> From bb7cc3fd1e549d38d6bda10a06feda9339de9d3e Mon Sep 17 00:00:00 2001
> From: Sheng Yang <sheng.yang@intel.com>
> Date: Wed, 13 Aug 2008 14:29:43 +0800
> Subject: [PATCH] KVM: trace: Add event mask support
>
> Allow user space application to specify one or morefilter masks to 
> limit the events being captured via it.
>
>   

Sorry about not responding to this earlier.  In light of the ltt-ng 
discussion, it looks like almost all of kvmtrace can be moved to common 
code, with only the trace markers themselves remaining.

So I'd like to wait with this until we've made the transition (and 
afterwards, we'll either have the functionality automatically, or we'll 
need to make the changes to core code).


-- 
error compiling committee.c: too many arguments to function


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/2] KVM: trace: Add event mask support
  2008-08-13  8:04 ` Avi Kivity
@ 2008-08-13  8:13   ` Yang, Sheng
  0 siblings, 0 replies; 3+ messages in thread
From: Yang, Sheng @ 2008-08-13  8:13 UTC (permalink / raw)
  To: Avi Kivity; +Cc: kvm

On Wednesday 13 August 2008 16:04:59 Avi Kivity wrote:
> Yang, Sheng wrote:
> > From bb7cc3fd1e549d38d6bda10a06feda9339de9d3e Mon Sep 17 00:00:00
> > 2001 From: Sheng Yang <sheng.yang@intel.com>
> > Date: Wed, 13 Aug 2008 14:29:43 +0800
> > Subject: [PATCH] KVM: trace: Add event mask support
> >
> > Allow user space application to specify one or morefilter masks
> > to limit the events being captured via it.
>
> Sorry about not responding to this earlier.  In light of the ltt-ng
> discussion, it looks like almost all of kvmtrace can be moved to
> common code, with only the trace markers themselves remaining.
>
> So I'd like to wait with this until we've made the transition (and
> afterwards, we'll either have the functionality automatically, or
> we'll need to make the changes to core code).

OK, that's fine. Looking forward to it. :)

-- 
regards
Yang, Sheng

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2008-08-13  8:10 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-13  7:54 [PATCH 1/2] KVM: trace: Add event mask support Yang, Sheng
2008-08-13  8:04 ` Avi Kivity
2008-08-13  8:13   ` Yang, Sheng

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox