From: "Yang, Sheng" <sheng.yang@intel.com>
To: kvm@vger.kernel.org
Subject: [PATCH 1/2][REPOST] KVM: trace: Add event mask support.
Date: Wed, 25 Jun 2008 16:38:51 +0800 [thread overview]
Message-ID: <200806251638.51804.sheng.yang@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 3148 bytes --]
From 5eb5fb6b40c45b1c140f46b00f5de9f73fc0bab6 Mon Sep 17 00:00:00 2001
From: Sheng Yang <sheng.yang@intel.com>
Date: Wed, 25 Jun 2008 16:37:31 +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 | 24 ++++++++++++++++++++++++
2 files changed, 31 insertions(+), 0 deletions(-)
diff --git a/include/linux/kvm.h b/include/linux/kvm.h
index 0ea064c..f1d3d9e 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 58141f3..179e11f 100644
--- a/virt/kvm/kvm_trace.c
+++ b/virt/kvm/kvm_trace.c
@@ -26,6 +26,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;
@@ -39,6 +41,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 cycle, int extra)
{
int rec_size = KVM_TRC_HEAD_SIZE;
@@ -60,6 +79,9 @@ static void kvm_add_trace(void *probe_private, void
*call_data,
return;
rec.event = va_arg(*args, u32);
+ if (check_event_mask(kt, rec.event))
+ return;
+
vcpu = va_arg(*args, struct kvm_vcpu *);
rec.pid = current->tgid;
rec.vcpu_id = vcpu->vcpu_id;
@@ -175,6 +197,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.5
[-- Attachment #2: 0001-KVM-trace-Add-event-mask-support.patch --]
[-- Type: text/x-diff, Size: 3153 bytes --]
From 5eb5fb6b40c45b1c140f46b00f5de9f73fc0bab6 Mon Sep 17 00:00:00 2001
From: Sheng Yang <sheng.yang@intel.com>
Date: Wed, 25 Jun 2008 16:37:31 +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 | 24 ++++++++++++++++++++++++
2 files changed, 31 insertions(+), 0 deletions(-)
diff --git a/include/linux/kvm.h b/include/linux/kvm.h
index 0ea064c..f1d3d9e 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 58141f3..179e11f 100644
--- a/virt/kvm/kvm_trace.c
+++ b/virt/kvm/kvm_trace.c
@@ -26,6 +26,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;
@@ -39,6 +41,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 cycle, int extra)
{
int rec_size = KVM_TRC_HEAD_SIZE;
@@ -60,6 +79,9 @@ static void kvm_add_trace(void *probe_private, void *call_data,
return;
rec.event = va_arg(*args, u32);
+ if (check_event_mask(kt, rec.event))
+ return;
+
vcpu = va_arg(*args, struct kvm_vcpu *);
rec.pid = current->tgid;
rec.vcpu_id = vcpu->vcpu_id;
@@ -175,6 +197,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.5
reply other threads:[~2008-06-25 8:38 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200806251638.51804.sheng.yang@intel.com \
--to=sheng.yang@intel.com \
--cc=kvm@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox