* Copyright (C) 2010-2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
*/
-/*
- * This page_alloc.h wrapper needs to be included before gfpflags.h because it
- * overrides a function with a define.
- */
-#include "wrapper/page_alloc.h"
-
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/sched.h>
#include <linux/seq_file.h>
#include <linux/file.h>
#include <linux/anon_inodes.h>
-#include <wrapper/file.h>
#include <linux/jhash.h>
#include <linux/uaccess.h>
-#include <linux/vmalloc.h>
#include <linux/uuid.h>
#include <linux/dmi.h>
+#include <linux/vmalloc.h>
+#include <linux/limits.h>
-#include <wrapper/vmalloc.h> /* for wrapper_vmalloc_sync_all() */
#include <wrapper/random.h>
-#include <wrapper/tracepoint.h>
-#include <wrapper/list.h>
-#include <wrapper/types.h>
#include <lttng-kernel-version.h>
#include <lttng-events.h>
#include <lttng-tracer.h>
#include <lttng-abi-old.h>
#include <lttng-endian.h>
#include <lttng-string-utils.h>
+#include <lttng-tracepoint.h>
#include <wrapper/ringbuffer/backend.h>
#include <wrapper/ringbuffer/frontend.h>
-#include <wrapper/time.h>
#define METADATA_CACHE_DEFAULT_SIZE 4096
int i;
mutex_lock(&sessions_mutex);
- session = lttng_kvzalloc(sizeof(struct lttng_session), GFP_KERNEL);
+ session = kvzalloc_node(sizeof(struct lttng_session), GFP_KERNEL,
+ NUMA_NO_NODE);
if (!session)
goto err;
INIT_LIST_HEAD(&session->chan);
INIT_LIST_HEAD(&session->events);
- uuid_le_gen(&session->uuid);
+ guid_gen(&session->uuid);
metadata_cache = kzalloc(sizeof(struct lttng_metadata_cache),
GFP_KERNEL);
err_free_cache:
kfree(metadata_cache);
err_free_session:
- lttng_kvfree(session);
+ kvfree(session);
err:
mutex_unlock(&sessions_mutex);
return NULL;
kref_put(&session->metadata_cache->refcount, metadata_cache_destroy);
list_del(&session->list);
mutex_unlock(&sessions_mutex);
- lttng_kvfree(session);
+ kvfree(session);
}
int lttng_session_statedump(struct lttng_session *session)
name_len = strlen(event_name);
hash = jhash(event_name, name_len, 0);
head = &session->events_ht.table[hash & (LTTNG_EVENT_HT_SIZE - 1)];
- lttng_hlist_for_each_entry(event, head, hlist) {
+ hlist_for_each_entry(event, head, hlist) {
WARN_ON_ONCE(!event->desc);
if (!strncmp(event->desc->name, event_name,
LTTNG_KERNEL_SYM_NAME_LEN - 1)
desc = event->desc;
switch (event->instrumentation) {
case LTTNG_KERNEL_TRACEPOINT:
- ret = lttng_wrapper_tracepoint_probe_register(desc->kname,
- desc->probe_callback,
- event);
+ ret = lttng_tracepoint_probe_register(desc->kname,
+ desc->probe_callback,
+ event);
break;
case LTTNG_KERNEL_SYSCALL:
ret = lttng_syscall_filter_enable(event->chan,
desc = event->desc;
switch (event->instrumentation) {
case LTTNG_KERNEL_TRACEPOINT:
- ret = lttng_wrapper_tracepoint_probe_unregister(event->desc->kname,
+ ret = lttng_tracepoint_probe_unregister(event->desc->kname,
event->desc->probe_callback,
event);
break;
for (i = 0; i < LTTNG_ID_TABLE_SIZE; i++) {
struct hlist_head *head = &id_tracker_p->id_hash[i];
- lttng_hlist_for_each_entry(e, head, hlist) {
+ hlist_for_each_entry(e, head, hlist) {
if (iter++ >= *pos)
return e;
}
for (i = 0; i < LTTNG_ID_TABLE_SIZE; i++) {
struct hlist_head *head = &id_tracker_p->id_hash[i];
- lttng_hlist_for_each_entry(e, head, hlist) {
+ hlist_for_each_entry(e, head, hlist) {
if (iter++ >= *ppos)
return e;
}
struct seq_file *m;
int file_fd, ret;
- file_fd = lttng_get_unused_fd();
+ file_fd = get_unused_fd_flags(0);
if (file_fd < 0) {
ret = file_fd;
goto fd_error;
int lttng_match_enabler_star_glob(const char *desc_name,
const char *pattern)
{
- if (!strutils_star_glob_match(pattern, LTTNG_SIZE_MAX,
- desc_name, LTTNG_SIZE_MAX))
+ if (!strutils_star_glob_match(pattern, SIZE_MAX,
+ desc_name, SIZE_MAX))
return 0;
return 1;
}
*/
hash = jhash(event_name, name_len, 0);
head = &session->events_ht.table[hash & (LTTNG_EVENT_HT_SIZE - 1)];
- lttng_hlist_for_each_entry(event, head, hlist) {
+ hlist_for_each_entry(event, head, hlist) {
if (event->desc == desc
&& event->chan == enabler->chan)
found = 1;
uint64_t tcf = trace_clock_freq();
int64_t offset;
unsigned long flags;
-#ifdef LTTNG_KERNEL_HAS_TIMESPEC64
struct timespec64 rts = { 0, 0 };
-#else
- struct timespec rts = { 0, 0 };
-#endif
/* Disable interrupts to increase correlation precision. */
local_irq_save(flags);
monotonic[0] = trace_clock_read64();
-#ifdef LTTNG_KERNEL_HAS_TIMESPEC64
ktime_get_real_ts64(&rts);
-#else
- getnstimeofday(&rts);
-#endif
monotonic[1] = trace_clock_read64();
local_irq_restore(flags);
* @transport: transport structure
*
* Registers a transport which can be used as output to extract the data out of
- * LTTng. The module calling this registration function must ensure that no
- * trap-inducing code will be executed by the transport functions. E.g.
- * vmalloc_sync_all() must be called between a vmalloc and the moment the memory
- * is made visible to the transport function. This registration acts as a
- * vmalloc_sync_all. Therefore, only if the module allocates virtual memory
- * after its registration must it synchronize the TLBs.
+ * LTTng.
*/
void lttng_transport_register(struct lttng_transport *transport)
{
- /*
- * Make sure no page fault can be triggered by the module about to be
- * registered. We deal with this here so we don't have to call
- * vmalloc_sync_all() in each module's init.
- */
- wrapper_vmalloc_sync_all();
-
mutex_lock(&sessions_mutex);
list_add_tail(&transport->node, <tng_transport_list);
mutex_unlock(&sessions_mutex);
{
int ret;
- ret = wrapper_lttng_fixup_sig(THIS_MODULE);
- if (ret)
- return ret;
- ret = wrapper_get_pfnblock_flags_mask_init();
- if (ret)
- return ret;
- ret = wrapper_get_pageblock_flags_mask_init();
- if (ret)
- return ret;
ret = lttng_probes_init();
if (ret)
return ret;