projects
/
lttng-ust.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
wakeup shm: set permissions on shm
[lttng-ust.git]
/
libust
/
ltt-probes.c
diff --git
a/libust/ltt-probes.c
b/libust/ltt-probes.c
index 45d2dabdef22e977fe8122deeb9a5417aa07fc21..04392d8e6f479ddd452eb388933720a58f753d39 100644
(file)
--- a/
libust/ltt-probes.c
+++ b/
libust/ltt-probes.c
@@
-8,15
+8,18
@@
* Dual LGPL v2.1/GPL v2 license.
*/
* Dual LGPL v2.1/GPL v2 license.
*/
-#include <linux/module.h>
-#include <linux/list.h>
-#include <linux/mutex.h>
-#include <linux/seq_file.h>
+#include <string.h>
+#include <errno.h>
+#include <urcu/list.h>
+#include <ust/core.h>
+#include <ust/lttng-events.h>
-#include "ltt-
events
.h"
+#include "ltt-
tracer-core
.h"
-static LIST_HEAD(probe_list);
-static DEFINE_MUTEX(probe_mutex);
+/*
+ * probe list is protected by ust_lock()/ust_unlock().
+ */
+static CDS_LIST_HEAD(probe_list);
static
const struct lttng_event_desc *find_event(const char *name)
static
const struct lttng_event_desc *find_event(const char *name)
@@
-24,7
+27,7
@@
const struct lttng_event_desc *find_event(const char *name)
struct lttng_probe_desc *probe_desc;
int i;
struct lttng_probe_desc *probe_desc;
int i;
- list_for_each_entry(probe_desc, &probe_list, head) {
+
cds_
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];
for (i = 0; i < probe_desc->nr_events; i++) {
if (!strcmp(probe_desc->event_desc[i].name, name))
return &probe_desc->event_desc[i];
@@
-38,7
+41,7
@@
int ltt_probe_register(struct lttng_probe_desc *desc)
int ret = 0;
int i;
int ret = 0;
int i;
-
mutex_lock(&probe_mutex
);
+
ust_lock(
);
/*
* TODO: This is O(N^2). Turn into a hash table when probe registration
* overhead becomes an issue.
/*
* TODO: This is O(N^2). Turn into a hash table when probe registration
* overhead becomes an issue.
@@
-49,51
+52,53
@@
int ltt_probe_register(struct lttng_probe_desc *desc)
goto end;
}
}
goto end;
}
}
- list_add(&desc->head, &probe_list);
+ cds_list_add(&desc->head, &probe_list);
+
+ /*
+ * fix the events awaiting probe load.
+ */
+ for (i = 0; i < desc->nr_events; i++) {
+ ret = pending_probe_fix_events(&desc->event_desc[i]);
+ assert(!ret);
+ }
end:
end:
-
mutex_unlock(&probe_mutex
);
+
ust_unlock(
);
return ret;
}
return ret;
}
-EXPORT_SYMBOL_GPL(ltt_probe_register);
void ltt_probe_unregister(struct lttng_probe_desc *desc)
{
void ltt_probe_unregister(struct lttng_probe_desc *desc)
{
-
mutex_lock(&probe_mutex
);
- list_del(&desc->head);
-
mutex_unlock(&probe_mutex
);
+
ust_lock(
);
+
cds_
list_del(&desc->head);
+
ust_unlock(
);
}
}
-EXPORT_SYMBOL_GPL(ltt_probe_unregister);
+/*
+ * called with UST lock held.
+ */
const struct lttng_event_desc *ltt_event_get(const char *name)
{
const struct lttng_event_desc *event;
const struct lttng_event_desc *ltt_event_get(const char *name)
{
const struct lttng_event_desc *event;
- int ret;
- mutex_lock(&probe_mutex);
event = find_event(name);
event = find_event(name);
- mutex_unlock(&probe_mutex);
if (!event)
return NULL;
if (!event)
return NULL;
- ret = try_module_get(event->owner);
- WARN_ON_ONCE(!ret);
return event;
}
return event;
}
-EXPORT_SYMBOL_GPL(ltt_event_get);
void ltt_event_put(const struct lttng_event_desc *event)
{
void ltt_event_put(const struct lttng_event_desc *event)
{
- module_put(event->owner);
}
}
-EXPORT_SYMBOL_GPL(ltt_event_put);
+#if 0
static
void *tp_list_start(struct seq_file *m, loff_t *pos)
{
struct lttng_probe_desc *probe_desc;
int iter = 0, i;
static
void *tp_list_start(struct seq_file *m, loff_t *pos)
{
struct lttng_probe_desc *probe_desc;
int iter = 0, i;
- mutex_lock(&probe_mutex);
- list_for_each_entry(probe_desc, &probe_list, head) {
+
pthread_
mutex_lock(&probe_mutex);
+
cds_
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];
for (i = 0; i < probe_desc->nr_events; i++) {
if (iter++ >= *pos)
return (void *) &probe_desc->event_desc[i];
@@
-110,7
+115,7
@@
void *tp_list_next(struct seq_file *m, void *p, loff_t *ppos)
int iter = 0, i;
(*ppos)++;
int iter = 0, i;
(*ppos)++;
- list_for_each_entry(probe_desc, &probe_list, head) {
+
cds_
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];
for (i = 0; i < probe_desc->nr_events; i++) {
if (iter++ >= *ppos)
return (void *) &probe_desc->event_desc[i];
@@
-123,7
+128,7
@@
void *tp_list_next(struct seq_file *m, void *p, loff_t *ppos)
static
void tp_list_stop(struct seq_file *m, void *p)
{
static
void tp_list_stop(struct seq_file *m, void *p)
{
- mutex_unlock(&probe_mutex);
+
pthread_
mutex_unlock(&probe_mutex);
}
static
}
static
@@
-161,3
+166,4
@@
const struct file_operations lttng_tracepoint_list_fops = {
.llseek = seq_lseek,
.release = seq_release,
};
.llseek = seq_lseek,
.release = seq_release,
};
+#endif //0
This page took
0.025359 seconds
and
4
git commands to generate.