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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.