* Copyright 2010 (c) - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
*
* Holds LTTng probes registry.
+ *
+ * Dual LGPL v2.1/GPL v2 license.
*/
#include <linux/module.h>
list_for_each_entry(probe_desc, &probe_list, head) {
for (i = 0; i < probe_desc->nr_events; i++) {
- if (!strcmp(probe_desc->event_desc[i].name, name))
- return &probe_desc->event_desc[i];
+ if (!strcmp(probe_desc->event_desc[i]->name, name))
+ return probe_desc->event_desc[i];
}
}
return NULL;
* overhead becomes an issue.
*/
for (i = 0; i < desc->nr_events; i++) {
- if (find_event(desc->event_desc[i].name)) {
+ if (find_event(desc->event_desc[i]->name)) {
ret = -EEXIST;
goto end;
}
struct lttng_probe_desc *probe_desc;
int iter = 0, i;
+ mutex_lock(&probe_mutex);
list_for_each_entry(probe_desc, &probe_list, head) {
for (i = 0; i < probe_desc->nr_events; i++) {
if (iter++ >= *pos)
- return (void *) &probe_desc->event_desc[i];
+ return (void *) probe_desc->event_desc[i];
}
}
/* End of list */
list_for_each_entry(probe_desc, &probe_list, head) {
for (i = 0; i < probe_desc->nr_events; i++) {
if (iter++ >= *ppos)
- return (void *) &probe_desc->event_desc[i];
+ return (void *) probe_desc->event_desc[i];
}
}
/* End of list */
static
void tp_list_stop(struct seq_file *m, void *p)
{
+ mutex_unlock(&probe_mutex);
}
static
{
const struct lttng_event_desc *probe_desc = p;
+ /*
+ * Don't export lttng internal events (metadata).
+ */
+ if (!strncmp(probe_desc->name, "lttng_", sizeof("lttng_") - 1))
+ return 0;
seq_printf(m, "event { name = %s; };\n",
probe_desc->name);
return 0;
}
const struct file_operations lttng_tracepoint_list_fops = {
+ .owner = THIS_MODULE,
.open = lttng_tracepoint_list_open,
.read = seq_read,
.llseek = seq_lseek,
- .release = seq_release_private,
+ .release = seq_release,
};