X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=ltt-sessiond%2Ftrace.c;h=e0aeac685e28a312b71fc773fa4ab05ca3eccb89;hp=e0051cd1cabe0e7d50bd783c4b4a48d67429e925;hb=e6ddca715d6dedb6ee25fe4392a6e1f9626b2544;hpb=70dc1c3472b32f9f438ae6fdacbc9e656beecbe1 diff --git a/ltt-sessiond/trace.c b/ltt-sessiond/trace.c index e0051cd1c..e0aeac685 100644 --- a/ltt-sessiond/trace.c +++ b/ltt-sessiond/trace.c @@ -24,9 +24,61 @@ #include #include "lttngerr.h" -#include "ltt-sessiond.h" #include "trace.h" +/* + * get_kernel_channel_by_name + * + * Find the channel name for the given kernel session. + */ +struct ltt_kernel_channel *get_kernel_channel_by_name( + char *name, struct ltt_kernel_session *session) +{ + struct ltt_kernel_channel *chan; + + if (session == NULL) { + ERR("Undefine session"); + goto error; + } + + cds_list_for_each_entry(chan, &session->channel_list.head, list) { + if (strcmp(name, chan->channel->name) == 0) { + DBG("Found channel by name %s", name); + return chan; + } + } + +error: + return NULL; +} + +/* + * get_kernel_event_by_name + * + * Find the event name for the given channel. + */ +struct ltt_kernel_event *get_kernel_event_by_name( + char *name, struct ltt_kernel_channel *channel) +{ + struct ltt_kernel_event *ev; + + if (channel == NULL) { + ERR("Undefine channel"); + goto error; + } + + cds_list_for_each_entry(ev, &channel->events_list.head, list) { + if (strcmp(name, ev->event->name) == 0) { + DBG("Found event by name %s for channel %s", name, + channel->channel->name); + return ev; + } + } + +error: + return NULL; +} + /* * trace_create_kernel_session * @@ -66,7 +118,7 @@ error: * * Return pointer to structure or NULL. */ -struct ltt_kernel_channel *trace_create_kernel_channel(struct lttng_channel *chan) +struct ltt_kernel_channel *trace_create_kernel_channel(struct lttng_channel *chan, char *path) { int ret; struct ltt_kernel_channel *lkc; @@ -86,11 +138,12 @@ struct ltt_kernel_channel *trace_create_kernel_channel(struct lttng_channel *cha lkc->fd = 0; lkc->stream_count = 0; + lkc->enabled = 1; /* Init linked list */ CDS_INIT_LIST_HEAD(&lkc->events_list.head); CDS_INIT_LIST_HEAD(&lkc->stream_list.head); /* Set default trace output path */ - ret = asprintf(&lkc->pathname, "%s", DEFAULT_TRACE_OUTPUT); + ret = asprintf(&lkc->pathname, "%s", path); if (ret < 0) { perror("asprintf kernel create channel"); goto error; @@ -122,8 +175,8 @@ struct ltt_kernel_event *trace_create_kernel_event(struct lttng_event *ev) } switch (ev->type) { - case LTTNG_EVENT_KPROBES: - attr->instrumentation = LTTNG_KERNEL_KPROBES; + case LTTNG_EVENT_KPROBE: + attr->instrumentation = LTTNG_KERNEL_KPROBE; attr->u.kprobe.addr = ev->attr.kprobe.addr; attr->u.kprobe.offset = ev->attr.kprobe.offset; strncpy(attr->u.kprobe.symbol_name, @@ -134,8 +187,8 @@ struct ltt_kernel_event *trace_create_kernel_event(struct lttng_event *ev) strncpy(attr->u.ftrace.symbol_name, ev->attr.ftrace.symbol_name, LTTNG_SYM_NAME_LEN); break; - case LTTNG_EVENT_TRACEPOINTS: - attr->instrumentation = LTTNG_KERNEL_TRACEPOINTS; + case LTTNG_EVENT_TRACEPOINT: + attr->instrumentation = LTTNG_KERNEL_TRACEPOINT; break; default: ERR("Unknown kernel instrumentation type (%d)", ev->type); @@ -148,6 +201,7 @@ struct ltt_kernel_event *trace_create_kernel_event(struct lttng_event *ev) /* Setting up a kernel event */ lke->fd = 0; lke->event = attr; + lke->enabled = 1; return lke; @@ -162,7 +216,7 @@ error: * * Return pointer to structure or NULL. */ -struct ltt_kernel_metadata *trace_create_kernel_metadata(void) +struct ltt_kernel_metadata *trace_create_kernel_metadata(char *path) { int ret; struct ltt_kernel_metadata *lkm; @@ -181,12 +235,13 @@ struct ltt_kernel_metadata *trace_create_kernel_metadata(void) chan->attr.num_subbuf = DEFAULT_CHANNEL_SUBBUF_NUM; chan->attr.switch_timer_interval = DEFAULT_CHANNEL_SWITCH_TIMER; chan->attr.read_timer_interval = DEFAULT_CHANNEL_READ_TIMER; + chan->attr.output = DEFAULT_KERNEL_CHANNEL_OUTPUT; /* Init metadata */ lkm->fd = 0; lkm->conf = chan; /* Set default metadata path */ - ret = asprintf(&lkm->pathname, "%s/metadata", DEFAULT_TRACE_OUTPUT); + ret = asprintf(&lkm->pathname, "%s/metadata", path); if (ret < 0) { perror("asprintf kernel metadata"); goto error; @@ -302,7 +357,9 @@ void trace_destroy_kernel_session(struct ltt_kernel_session *session) close(session->metadata_stream_fd); } - trace_destroy_kernel_metadata(session->metadata); + if (session->metadata != NULL) { + trace_destroy_kernel_metadata(session->metadata); + } cds_list_for_each_entry(channel, &session->channel_list.head, list) { trace_destroy_kernel_channel(channel);