4 * Copyright 2010 (c) - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
6 * Holds LTTng probes registry.
8 * Dual LGPL v2.1/GPL v2 license.
13 #include <urcu/list.h>
14 #include <lttng/ust-events.h>
17 #include "ltt-tracer-core.h"
20 * probe list is protected by ust_lock()/ust_unlock().
22 static CDS_LIST_HEAD(probe_list
);
25 const struct lttng_probe_desc
*find_provider(const char *provider
)
27 struct lttng_probe_desc
*iter
;
29 cds_list_for_each_entry(iter
, &probe_list
, head
) {
30 if (!strcmp(iter
->provider
, provider
))
37 const struct lttng_event_desc
*find_event(const char *name
)
39 struct lttng_probe_desc
*probe_desc
;
42 cds_list_for_each_entry(probe_desc
, &probe_list
, head
) {
43 for (i
= 0; i
< probe_desc
->nr_events
; i
++) {
44 if (!strcmp(probe_desc
->event_desc
[i
]->name
, name
))
45 return probe_desc
->event_desc
[i
];
51 int ltt_probe_register(struct lttng_probe_desc
*desc
)
53 struct lttng_probe_desc
*iter
;
58 if (find_provider(desc
->provider
)) {
63 * TODO: This is O(N^2). Turn into a hash table when probe registration
64 * overhead becomes an issue.
66 for (i
= 0; i
< desc
->nr_events
; i
++) {
67 if (find_event(desc
->event_desc
[i
]->name
)) {
74 * We sort the providers by struct lttng_probe_desc pointer
77 cds_list_for_each_entry_reverse(iter
, &probe_list
, head
) {
78 BUG_ON(iter
== desc
); /* Should never be in the list twice */
80 /* We belong to the location right after iter. */
81 cds_list_add(&desc
->head
, &iter
->head
);
85 /* We should be added at the head of the list */
86 cds_list_add(&desc
->head
, &probe_list
);
90 * fix the events awaiting probe load.
92 for (i
= 0; i
< desc
->nr_events
; i
++) {
93 ret
= pending_probe_fix_events(desc
->event_desc
[i
]);
101 void ltt_probe_unregister(struct lttng_probe_desc
*desc
)
104 cds_list_del(&desc
->head
);
109 * called with UST lock held.
111 const struct lttng_event_desc
*ltt_event_get(const char *name
)
113 const struct lttng_event_desc
*event
;
115 event
= find_event(name
);
121 void ltt_event_put(const struct lttng_event_desc
*event
)
This page took 0.040284 seconds and 6 git commands to generate.