[lttng-dev] [LTTNG-UST PATCH 01/01] Added event exclusion
Ikaheimonen, JP
jp_ikaheimonen at mentor.com
Mon Aug 26 08:52:37 EDT 2013
>From 3818adcb04988c6362916d9b86041d151382bf36 Mon Sep 17 00:00:00 2001
From: JP Ikaheimonen <jp_ikaheimonen at mentor.com>
Date: Thu, 22 Aug 2013 13:37:36 +0300
Subject: [PATCH] Added event exclusion
Add the possibility to exclude events by prepending them with a '!'
character. That is, the commands
lttng enable-event -u "\!met:"
lttng enable-event -a
will enable all tracepoint events (-a) except the ones
starting with 'met:' .
---
include/lttng/ust-events.h | 2 ++
liblttng-ust/lttng-events.c | 35 ++++++++++++++++++++++++++++++++++-
liblttng-ust/lttng-ust-abi.c | 24 ++++++++++++++++++------
3 files changed, 54 insertions(+), 7 deletions(-)
diff --git a/include/lttng/ust-events.h b/include/lttng/ust-events.h
index f40c044..b03869a 100644
--- a/include/lttng/ust-events.h
+++ b/include/lttng/ust-events.h
@@ -290,6 +290,8 @@ struct lttng_probe_desc {
enum lttng_enabler_type {
LTTNG_ENABLER_WILDCARD,
LTTNG_ENABLER_EVENT,
+ LTTNG_ENABLER_EXCLUDER,
+ LTTNG_ENABLER_EXCLUDER_WILDCARD,
};
/*
diff --git a/liblttng-ust/lttng-events.c b/liblttng-ust/lttng-events.c
index 26601a6..a7f0064 100644
--- a/liblttng-ust/lttng-events.c
+++ b/liblttng-ust/lttng-events.c
@@ -488,6 +488,30 @@ int lttng_desc_match_event_enabler(const struct lttng_event_desc *desc,
}
static
+int lttng_desc_match_wildcard_excluder(const struct lttng_event_desc *desc,
+ struct lttng_enabler *enabler)
+{
+ assert(enabler->type == LTTNG_ENABLER_EXCLUDER_WILDCARD);
+ /* Compare excluding final '*' , ignoring first character '!'*/
+ if (strncmp(desc->name, enabler->event_param.name + 1,
+ strlen(enabler->event_param.name) - 2))
+ return 0;
+ return 1;
+}
+
+static
+int lttng_desc_match_event_excluder(const struct lttng_event_desc *desc,
+ struct lttng_enabler *enabler)
+{
+ assert(enabler->type == LTTNG_ENABLER_EXCLUDER);
+ /* compare names, ignoring the first character '!' of the enabler */
+ if (strcmp(desc->name, enabler->event_param.name + 1))
+ return 0;
+ return 1;
+}
+
+
+static
int lttng_desc_match_enabler(const struct lttng_event_desc *desc,
struct lttng_enabler *enabler)
{
@@ -496,6 +520,10 @@ int lttng_desc_match_enabler(const struct lttng_event_desc *desc,
return lttng_desc_match_wildcard_enabler(desc, enabler);
case LTTNG_ENABLER_EVENT:
return lttng_desc_match_event_enabler(desc, enabler);
+ case LTTNG_ENABLER_EXCLUDER_WILDCARD:
+ return lttng_desc_match_wildcard_excluder(desc, enabler);
+ case LTTNG_ENABLER_EXCLUDER:
+ return lttng_desc_match_event_excluder(desc, enabler);
default:
return -EINVAL;
}
@@ -807,8 +835,13 @@ void lttng_session_sync_enablers(struct lttng_session *session)
cds_list_for_each_entry(enabler_ref,
&event->enablers_ref_head, node) {
if (enabler_ref->ref->enabled) {
+ if (enabler_ref->ref->type == LTTNG_ENABLER_EXCLUDER ||
+ enabler_ref->ref->type == LTTNG_ENABLER_EXCLUDER_WILDCARD) {
+ enabled = 0;
+ break;
+ }
enabled = 1;
- break;
+ /* no break here, to ensure all excluders are handled */
}
}
/*
diff --git a/liblttng-ust/lttng-ust-abi.c b/liblttng-ust/lttng-ust-abi.c
index a852aae..e4596be 100644
--- a/liblttng-ust/lttng-ust-abi.c
+++ b/liblttng-ust/lttng-ust-abi.c
@@ -875,14 +875,26 @@ long lttng_channel_cmd(int objd, unsigned int cmd, unsigned long arg,
{
struct lttng_ust_event *event_param =
(struct lttng_ust_event *) arg;
- if (event_param->name[strlen(event_param->name) - 1] == '*') {
- /* If ends with wildcard, create wildcard. */
- return lttng_abi_create_enabler(objd, event_param,
- owner, LTTNG_ENABLER_WILDCARD);
+ if (event_param->name[0] == '!') {
+ if (event_param->name[strlen(event_param->name) - 1] == '*') {
+ /* excluder, with wildcard */
+ return lttng_abi_create_enabler(objd, event_param,
+ owner, LTTNG_ENABLER_EXCLUDER_WILDCARD);
+ } else {
+ /* plain excluder */
+ return lttng_abi_create_enabler(objd, event_param,
+ owner, LTTNG_ENABLER_EXCLUDER);
+ }
} else {
- return lttng_abi_create_enabler(objd, event_param,
+ if (event_param->name[strlen(event_param->name) - 1] == '*') {
+ /* If ends with wildcard, create wildcard. */
+ return lttng_abi_create_enabler(objd, event_param,
+ owner, LTTNG_ENABLER_WILDCARD);
+ } else {
+ return lttng_abi_create_enabler(objd, event_param,
owner, LTTNG_ENABLER_EVENT);
- }
+ }
+ }
}
case LTTNG_UST_CONTEXT:
return lttng_abi_add_context(objd,
--
1.8.1.2
More information about the lttng-dev
mailing list