#include <linux/mutex.h>
#include <linux/sched.h>
#include <linux/slab.h>
-#include <linux/vmalloc.h> /* For vmalloc_sync_all */
+#include "wrapper/vmalloc.h" /* for wrapper_vmalloc_sync_all() */
#include "ltt-events.h"
static LIST_HEAD(sessions);
*/
struct ltt_event *ltt_event_create(struct ltt_channel *chan, char *name,
enum instrum_type itype,
- void *probe, void *filter)
+ const struct lttng_event_desc *event_desc,
+ void *filter)
{
struct ltt_event *event;
int ret;
* creation). Might require a hash if we have lots of events.
*/
list_for_each_entry(event, &chan->session->events, list)
- if (!strcmp(event->name, name))
+ if (!strcmp(event->desc->name, name))
goto exist;
event = kmem_cache_zalloc(event_cache, GFP_KERNEL);
if (!event)
goto cache_error;
- event->name = kmalloc(strlen(name) + 1, GFP_KERNEL);
- if (!event->name)
- goto name_error;
- strcpy(event->name, name);
event->chan = chan;
- event->probe = probe;
+ event->desc = event_desc;
event->filter = filter;
event->id = chan->free_event_id++;
event->itype = itype;
smp_wmb();
switch (itype) {
case INSTRUM_TRACEPOINTS:
- ret = tracepoint_probe_register(name, probe, event);
+ ret = tracepoint_probe_register(name, event_desc->probe_callback,
+ event);
if (ret)
goto register_error;
break;
return event;
register_error:
- kfree(event->name);
-name_error:
kmem_cache_free(event_cache, event);
cache_error:
exist:
switch (event->itype) {
case INSTRUM_TRACEPOINTS:
- ret = tracepoint_probe_unregister(event->name, event->probe,
+ ret = tracepoint_probe_unregister(event->desc->name,
+ event->desc->probe_callback,
event);
if (ret)
return ret;
*/
void _ltt_event_destroy(struct ltt_event *event)
{
- kfree(event->name);
+ ltt_event_put(event->desc);
list_del(&event->list);
kmem_cache_free(event_cache, event);
}
* registered. We deal with this here so we don't have to call
* vmalloc_sync_all() in each module's init.
*/
- vmalloc_sync_all();
+ wrapper_vmalloc_sync_all();
mutex_lock(&sessions_mutex);
list_add_tail(&transport->node, <t_transport_list);
event_cache = KMEM_CACHE(ltt_event, 0);
if (!event_cache)
return -ENOMEM;
- ret = ltt_probes_init();
- if (ret)
- goto error;
ret = ltt_debugfs_abi_init();
if (ret)
goto error_abi;
return 0;
error_abi:
- ltt_probes_exit();
-error:
kmem_cache_destroy(event_cache);
return ret;
}
struct ltt_session *session, *tmpsession;
ltt_debugfs_abi_exit();
- ltt_probes_exit();
list_for_each_entry_safe(session, tmpsession, &sessions, list)
ltt_session_destroy(session);
kmem_cache_destroy(event_cache);