projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add --verbose-kconsumerd option to sessiond
[lttng-tools.git]
/
ltt-sessiond
/
kernel-ctl.c
diff --git
a/ltt-sessiond/kernel-ctl.c
b/ltt-sessiond/kernel-ctl.c
index 0b0fca836bd59b612b3ffbc4eda86f855b2f8954..3dd146dd4b9792fe6754ef1136a49aef6b111c53 100644
(file)
--- a/
ltt-sessiond/kernel-ctl.c
+++ b/
ltt-sessiond/kernel-ctl.c
@@
-3,8
+3,8
@@
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation;
either
version 2
- * of the License
, or (at your option) any later version
.
+ * as published by the Free Software Foundation;
only
version 2
+ * of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@@
-41,7
+41,12
@@
int kernel_add_channel_context(struct ltt_kernel_channel *chan,
DBG("Adding context to channel %s", chan->channel->name);
ret = kernctl_add_context(chan->fd, ctx);
if (ret < 0) {
DBG("Adding context to channel %s", chan->channel->name);
ret = kernctl_add_context(chan->fd, ctx);
if (ret < 0) {
- perror("add context ioctl");
+ if (errno != EEXIST) {
+ perror("add context ioctl");
+ } else {
+ /* If EEXIST, we just ignore the error */
+ ret = 0;
+ }
goto error;
}
goto error;
}
@@
-209,6
+214,8
@@
int kernel_create_event(struct lttng_event *ev, struct ltt_kernel_channel *chann
/* Add event to event list */
cds_list_add(&event->list, &channel->events_list.head);
/* Add event to event list */
cds_list_add(&event->list, &channel->events_list.head);
+ channel->event_count++;
+
DBG("Event %s created (fd: %d)", ev->name, event->fd);
return 0;
DBG("Event %s created (fd: %d)", ev->name, event->fd);
return 0;
@@
-281,6
+288,9
@@
int kernel_enable_event(struct ltt_kernel_event *event)
ret = kernctl_enable(event->fd);
if (ret < 0) {
perror("enable event ioctl");
ret = kernctl_enable(event->fd);
if (ret < 0) {
perror("enable event ioctl");
+ if (errno == EEXIST) {
+ ret = -EEXIST;
+ }
goto error;
}
goto error;
}
@@
-398,6
+408,23
@@
void kernel_wait_quiescent(int fd)
}
}
}
}
+/*
+ * kernel_calibrate
+ */
+int kernel_calibrate(int fd, struct lttng_kernel_calibrate *calibrate)
+{
+ int ret;
+
+ ret = kernctl_calibrate(fd, calibrate);
+ if (ret < 0) {
+ perror("calibrate ioctl");
+ return -1;
+ }
+
+ return 0;
+}
+
+
/*
* kernel_metadata_flush_buffer
*
/*
* kernel_metadata_flush_buffer
*
@@
-540,18
+567,16
@@
error:
}
/*
}
/*
- * kernel_list_events
- *
- * Get the event list from the kernel tracer and return that list in the CTF
- * format.
+ * Get the event list from the kernel tracer and return the number of elements.
*/
*/
-ssize_t kernel_list_events(int tracer_fd,
char **list
)
+ssize_t kernel_list_events(int tracer_fd,
struct lttng_event **events
)
{
{
- int fd;
- char *
buf, *line = NULL
;
- size_t nb
, nbmem, total
= 0;
+ int fd
, pos
;
+ char *
event
;
+ size_t nb
mem, count
= 0;
ssize_t size;
FILE *fp;
ssize_t size;
FILE *fp;
+ struct lttng_event *elist;
fd = kernctl_tracepoint_list(tracer_fd);
if (fd < 0) {
fd = kernctl_tracepoint_list(tracer_fd);
if (fd < 0) {
@@
-570,29
+595,29
@@
ssize_t kernel_list_events(int tracer_fd, char **list)
* See kernel-ctl.h for explanation of this value
*/
nbmem = KERNEL_EVENT_LIST_SIZE;
* See kernel-ctl.h for explanation of this value
*/
nbmem = KERNEL_EVENT_LIST_SIZE;
-
buf = malloc(
nbmem);
+
elist = malloc(sizeof(struct lttng_event) *
nbmem);
- while ((size =
getline(&line, &nb, fp)) != -
1) {
- if (
total + size
> nbmem) {
+ while ((size =
fscanf(fp, "event { name = %m[^;]; };%n\n", &event, &pos)) ==
1) {
+ if (
count
> nbmem) {
DBG("Reallocating event list from %zd to %zd bytes", nbmem,
DBG("Reallocating event list from %zd to %zd bytes", nbmem,
-
total + size
+ KERNEL_EVENT_LIST_SIZE);
+
nbmem
+ KERNEL_EVENT_LIST_SIZE);
/* Adding the default size again */
/* Adding the default size again */
- nbmem
= total + size +
KERNEL_EVENT_LIST_SIZE;
-
buf = realloc(buf
, nbmem);
- if (
buf
== NULL) {
+ nbmem
+=
KERNEL_EVENT_LIST_SIZE;
+
elist = realloc(elist
, nbmem);
+ if (
elist
== NULL) {
perror("realloc list events");
goto error;
}
}
perror("realloc list events");
goto error;
}
}
-
memcpy(buf + total, line, size
);
-
total += size
;
+
strncpy(elist[count].name, event, strlen(event)
);
+
count++
;
}
}
- *
list = buf
;
+ *
events = elist
;
- DBG("Kernel list events done
"
);
+ DBG("Kernel list events done
(%ld events)", count
);
- return
total
;
+ return
count
;
error:
return -1;
error:
return -1;
This page took
0.025234 seconds
and
4
git commands to generate.