detailed syscall tracing (work in progress)
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 16 Sep 2011 23:11:44 +0000 (19:11 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 16 Sep 2011 23:11:44 +0000 (19:11 -0400)
Buidl disabled for now.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Makefile
ltt-debugfs-abi.c
ltt-events.c
ltt-events.h
lttng-syscalls.c [new file with mode: 0644]
probes/lttng-events.h
probes/lttng-probe-syscalls.c

index 07c3226854ecde968ec14d892e5e9b791cc5f9e8..0de745f616be9ac8170eab3a696545889e04f9af 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -21,6 +21,8 @@ ltt-relay-objs :=  ltt-events.o ltt-debugfs-abi.o \
                        lttng-context-vtid.o lttng-context-ppid.o \
                        lttng-context-vppid.o lttng-calibrate.o
 
+#add for testing       lttng-syscalls.o
+
 ifneq ($(CONFIG_PERF_EVENTS),)
 ltt-relay-objs += $(shell \
        if [ $(VERSION) -ge 3 \
index 3d231c0d211c10f01a1542b02615f2ab0e2bf2ec..86a1720068c49eb96d306f86711f6bb54bd22b65 100644 (file)
@@ -268,7 +268,7 @@ void lttng_metadata_create_events(struct file *channel_file)
         * We tolerate no failure path after event creation. It will stay
         * invariant for the rest of the session.
         */
-       event = ltt_event_create(channel, &metadata_params, NULL);
+       event = ltt_event_create(channel, &metadata_params, NULL, NULL);
        if (!event) {
                goto create_error;
        }
@@ -534,7 +534,7 @@ int lttng_abi_create_event(struct file *channel_file,
                 * We tolerate no failure path after event creation. It
                 * will stay invariant for the rest of the session.
                 */
-               event = ltt_event_create(channel, &event_param, NULL);
+               event = ltt_event_create(channel, &event_param, NULL, NULL);
                if (!event) {
                        ret = -EINVAL;
                        goto event_error;
index f9688f549be3bee9f105dd87b29130ef2839431d..c64c20368aa6ec07b4afa6a8b08e9a27ba5ad6af 100644 (file)
@@ -266,7 +266,8 @@ void _ltt_channel_destroy(struct ltt_channel *chan)
  */
 struct ltt_event *ltt_event_create(struct ltt_channel *chan,
                                   struct lttng_kernel_event *event_param,
-                                  void *filter)
+                                  void *filter,
+                                  const struct lttng_event_desc *internal_desc)
 {
        struct ltt_event *event;
        int ret;
@@ -366,6 +367,9 @@ struct ltt_event *ltt_event_create(struct ltt_channel *chan,
                WARN_ON_ONCE(!ret);
                break;
        case LTTNG_KERNEL_NOOP:
+               event->desc = internal_desc;
+               if (!event->desc)
+                       goto register_error;
                break;
        default:
                WARN_ON_ONCE(1);
@@ -378,10 +382,7 @@ struct ltt_event *ltt_event_create(struct ltt_channel *chan,
        return event;
 
 statedump_error:
-       WARN_ON_ONCE(tracepoint_probe_unregister(event_param->name,
-                               event->desc->probe_callback,
-                               event));
-       ltt_event_put(event->desc);
+       /* If a statedump error occurs, events will not be readable. */
 register_error:
        kmem_cache_free(event_cache, event);
 cache_error:
@@ -418,6 +419,9 @@ int _ltt_event_unregister(struct ltt_event *event)
                lttng_ftrace_unregister(event);
                ret = 0;
                break;
+       case LTTNG_KERNEL_NOOP:
+               ret = 0;
+               break;
        default:
                WARN_ON_ONCE(1);
        }
@@ -446,6 +450,8 @@ void _ltt_event_destroy(struct ltt_event *event)
                module_put(event->desc->owner);
                lttng_ftrace_destroy_private(event);
                break;
+       case LTTNG_KERNEL_NOOP:
+               break;
        default:
                WARN_ON_ONCE(1);
        }
index 395e410e40b33daa175e45f4ee3a49c6dd300fbe..f3f5b8fde1a57355f4aeafab94e5691153c57c24 100644 (file)
@@ -278,7 +278,8 @@ struct ltt_channel *ltt_global_channel_create(struct ltt_session *session,
 
 struct ltt_event *ltt_event_create(struct ltt_channel *chan,
                                   struct lttng_kernel_event *event_param,
-                                  void *filter);
+                                  void *filter,
+                                  const struct lttng_event_desc *internal_desc);
 
 int ltt_channel_enable(struct ltt_channel *channel);
 int ltt_channel_disable(struct ltt_channel *channel);
diff --git a/lttng-syscalls.c b/lttng-syscalls.c
new file mode 100644 (file)
index 0000000..28348ab
--- /dev/null
@@ -0,0 +1,266 @@
+/*
+ * lttng-syscalls.c
+ *
+ * Copyright 2010 (c) - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * LTTng sched probes.
+ *
+ * Dual LGPL v2.1/GPL v2 license.
+ */
+
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <asm/ptrace.h>
+#include <asm/syscall.h>
+
+#include "ltt-events.h"
+
+static void syscall_entry_probe(void *__data, struct pt_regs *regs, long id);
+
+/*
+ * Create LTTng tracepoint probes.
+ */
+#define LTTNG_PACKAGE_BUILD
+#define CREATE_TRACE_POINTS
+
+/* Hijack probe callback for system calls */
+#define TP_PROBE_CB(_template)         &syscall_entry_probe
+#define TP_MODULE_OVERRIDE
+
+#define TRACE_INCLUDE_PATH ../instrumentation/syscalls/headers
+
+#include "instrumentation/syscalls/headers/syscalls.h"
+
+#undef TP_MODULE_OVERRIDE
+#undef TP_PROBE_CB
+#undef LTTNG_PACKAGE_BUILD
+#undef CREATE_TRACE_POINTS
+
+struct trace_syscall_entry {
+       void *func;
+       const struct lttng_event_desc *desc;    /* Set dynamically */
+       const struct lttng_event_field *fields;
+       unsigned int nrargs;
+};
+
+static int sc_table_desc_filled;
+
+#define CREATE_SYSCALL_TABLE
+
+#undef TRACE_SYSCALL_TABLE
+#define TRACE_SYSCALL_TABLE(_name, _nr, _nrargs)               \
+       [ _nr ] = {                                             \
+               .func = __event_probe__##_name,                 \
+               .nrargs = (_nrargs),                            \
+               .fields = __event_fields___##_name,             \
+       },
+
+static struct trace_syscall_entry sc_table[] = {
+#include "instrumentation/syscalls/headers/syscalls.h"
+};
+
+#undef CREATE_SYSCALL_TABLE
+
+static void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
+{
+       struct trace_syscall_entry *entry;
+       struct ltt_channel *chan = __data;
+       struct ltt_event *event;
+
+       if (unlikely(id >= ARRAY_SIZE(sc_table)))
+               return;
+       entry = &sc_table[id];
+       if (unlikely(!entry->func))
+               return;
+       event = chan->sc_table[id];
+       WARN_ON_ONCE(!event);
+
+       switch (entry->nrargs) {
+       case 0:
+       {
+               void (*fptr)(void *__data) = entry->func;
+
+               fptr(event);
+               break;
+       }
+       case 1:
+       {
+               void (*fptr)(void *__data, unsigned long arg0) = entry->func;
+               unsigned long args[1];
+
+               syscall_get_arguments(current, regs, 0, entry->nrargs, args);
+               fptr(event, args[0]);
+               break;
+       }
+       case 2:
+       {
+               void (*fptr)(void *__data,
+                       unsigned long arg0,
+                       unsigned long arg1) = entry->func;
+               unsigned long args[2];
+
+               syscall_get_arguments(current, regs, 0, entry->nrargs, args);
+               fptr(event, args[0], args[1]);
+               break;
+       }
+       case 3:
+       {
+               void (*fptr)(void *__data,
+                       unsigned long arg0,
+                       unsigned long arg1,
+                       unsigned long arg2) = entry->func;
+               unsigned long args[3];
+
+               syscall_get_arguments(current, regs, 0, entry->nrargs, args);
+               fptr(event, args[0], args[1], args[2]);
+               break;
+       }
+       case 4:
+       {
+               void (*fptr)(void *__data,
+                       unsigned long arg0,
+                       unsigned long arg1,
+                       unsigned long arg2,
+                       unsigned long arg3) = entry->func;
+               unsigned long args[4];
+
+               syscall_get_arguments(current, regs, 0, entry->nrargs, args);
+               fptr(event, args[0], args[1], args[2], args[3]);
+               break;
+       }
+       case 5:
+       {
+               void (*fptr)(void *__data,
+                       unsigned long arg0,
+                       unsigned long arg1,
+                       unsigned long arg2,
+                       unsigned long arg3,
+                       unsigned long arg4) = entry->func;
+               unsigned long args[5];
+
+               syscall_get_arguments(current, regs, 0, entry->nrargs, args);
+               fptr(event, args[0], args[1], args[2], args[3], args[4]);
+               break;
+       }
+       case 6:
+       {
+               void (*fptr)(void *__data,
+                       unsigned long arg0,
+                       unsigned long arg1,
+                       unsigned long arg2,
+                       unsigned long arg3,
+                       unsigned long arg4,
+                       unsigned long arg5) = entry->func;
+               unsigned long args[6];
+
+               syscall_get_arguments(current, regs, 0, entry->nrargs, args);
+               fptr(event, args[0], args[1], args[2],
+                       args[3], args[4], args[5]);
+               break;
+       }
+       default:
+               break;
+       }
+}
+
+static const struct lttng_event_desc *find_syscall_desc(unsigned int id)
+{
+       unsigned int i;
+
+       for (i = 0; i < __probe_desc___syscalls.nr_events; i++) {
+               if (__probe_desc___syscalls.event_desc[i].fields
+                               == sc_table[id].fields)
+                       return &__probe_desc___syscalls.event_desc[i];
+       }
+       WARN_ON_ONCE(1);
+       return NULL;
+}
+
+static void fill_sc_table_desc(void)
+{
+       unsigned int i;
+
+       if (sc_table_desc_filled)
+               return;
+       /*
+        * This is O(n^2), but rare. Eventually get the TRACE_EVENT code
+        * to emit per-event symbols to skip this.
+        */
+       for (i = 0; i < ARRAY_SIZE(sc_table); i++) {
+               const struct lttng_event_desc **desc = &sc_table[i].desc;
+
+               if (!sc_table[i].func)
+                       continue;
+               (*desc) = find_syscall_desc(i);
+       }
+       sc_table_desc_filled = 1;
+}
+
+
+int lttng_syscalls_register(struct ltt_channel *chan, void *filter)
+{
+       unsigned int i;
+       int ret;
+
+       wrapper_vmalloc_sync_all();
+       fill_sc_table_desc();
+
+       if (!chan->sc_table) {
+               /* create syscall table mapping syscall to events */
+               chan->sc_table = kzalloc(sizeof(struct ltt_event *)
+                                       * ARRAY_SIZE(sc_table), GFP_KERNEL);
+               if (!chan->sc_table)
+                       return -ENOMEM;
+       }
+
+       /* Allocate events for each syscall, insert into table */
+       for (i = 0; i < ARRAY_SIZE(sc_table); i++) {
+               struct lttng_kernel_event ev;
+               const struct lttng_event_desc *desc = sc_table[i].desc;
+
+               if (!desc)
+                       continue;
+               /*
+                * Skip those already populated by previous failed
+                * register for this channel.
+                */
+               if (chan->sc_table[i])
+                       continue;
+               memset(&ev, 0, sizeof(ev));
+               strncpy(ev.name, desc->name, LTTNG_SYM_NAME_LEN);
+               ev.name[LTTNG_SYM_NAME_LEN - 1] = '\0';
+               ev.instrumentation = LTTNG_KERNEL_NOOP;
+               chan->sc_table[i] = ltt_event_create(chan, &ev, filter,
+                                                    desc);
+               if (!chan->sc_table[i]) {
+                       /*
+                        * If something goes wrong in event registration
+                        * after the first one, we have no choice but to
+                        * leave the previous events in there, until
+                        * deleted by session teardown.
+                        */
+                       return -EINVAL;
+               }
+       }
+       ret = tracepoint_probe_register("sys_enter",
+                       (void *) syscall_entry_probe, chan);
+       return ret;
+}
+
+/*
+ * Only called at session destruction.
+ */
+int lttng_syscalls_unregister(struct ltt_channel *chan)
+{
+       int ret;
+
+       if (!chan->sc_table)
+               return 0;
+       ret = tracepoint_probe_unregister("sys_enter",
+                       (void *) syscall_entry_probe, chan);
+       if (ret)
+               return ret;
+       /* ltt_event destroy will be performed by ltt_session_destroy() */
+       kfree(chan->sc_table);
+       return 0;
+}
index 39b28886b725ba9813fabb7a1a3840522adbf0e3..925e12daaec0eb249a029abab1c57a577c221b6e 100644 (file)
@@ -536,15 +536,6 @@ static void __event_probe__##_name(void *__data, _proto)                 \
 
 #include "lttng-events-reset.h"        /* Reset all macros within TRACE_EVENT */
 
-/* Override for syscall tracing */
-#ifndef TP_REGISTER_OVERRIDE
-#define TP_REGISTER_OVERRIDE   ltt_probe_register
-#endif
-
-#ifndef TP_UNREGISTER_OVERRIDE
-#define TP_UNREGISTER_OVERRIDE ltt_probe_unregister
-#endif
-
 #define TP_ID1(_token, _system)        _token##_system
 #define TP_ID(_token, _system) TP_ID1(_token, _system)
 #define module_init_eval1(_token, _system)     module_init(_token##_system)
@@ -552,20 +543,22 @@ static void __event_probe__##_name(void *__data, _proto)                \
 #define module_exit_eval1(_token, _system)     module_exit(_token##_system)
 #define module_exit_eval(_token, _system)      module_exit_eval1(_token, _system)
 
+#ifndef TP_MODULE_OVERRIDE
 static int TP_ID(__lttng_events_init__, TRACE_SYSTEM)(void)
 {
        wrapper_vmalloc_sync_all();
-       return TP_REGISTER_OVERRIDE(&TP_ID(__probe_desc___, TRACE_SYSTEM));
+       return ltt_probe_register(&TP_ID(__probe_desc___, TRACE_SYSTEM));
 }
 
 module_init_eval(__lttng_events_init__, TRACE_SYSTEM);
 
 static void TP_ID(__lttng_events_exit__, TRACE_SYSTEM)(void)
 {
-       TP_UNREGISTER_OVERRIDE(&TP_ID(__probe_desc___, TRACE_SYSTEM));
+       ltt_probe_unregister(&TP_ID(__probe_desc___, TRACE_SYSTEM));
 }
 
 module_exit_eval(__lttng_events_exit__, TRACE_SYSTEM);
+#endif
 
 #undef module_init_eval
 #undef module_exit_eval
index bb7217b46c8a01d148a1137e693c219d73495c54..8ce73dfa25b0c2c86a5ff11602f7017997ac8d1c 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * probes/lttng-probe-sched.c
+ * probes/lttng-probe-syscalls.c
  *
  * Copyright 2010 (c) - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
- * LTTng sched probes.
+ * LTTng syscalls probes.
  *
  * Dual LGPL v2.1/GPL v2 license.
  */
@@ -11,8 +11,6 @@
 #include <linux/module.h>
 #include "../ltt-events.h"
 
-#ifndef SYSCALL_DETAIL
-
 /*
  * Create the tracepoint static inlines from the kernel to validate that our
  * trace event macros match the kernel we run on.
 
 #include "../instrumentation/events/lttng-module/syscalls.h"
 
-#else  /* SYSCALL_DETAIL */
-
-#include <linux/slab.h>
-#include <asm/ptrace.h>
-#include <asm/syscall.h>
-
-static void syscall_entry_probe(void *__data, struct pt_regs *regs, long id);
-static int lttng_syscalls_register_probe(struct lttng_probe_desc *desc);
-static void lttng_syscalls_unregister_probe(struct lttng_probe_desc *desc);
-
-static struct lttng_probe_desc *syscall_probe_desc;
-
-/*
- * Create LTTng tracepoint probes.
- */
-#define LTTNG_PACKAGE_BUILD
-#define CREATE_TRACE_POINTS
-
-/* Hijack probe callback for system calls */
-#define TP_PROBE_CB(_template)         &syscall_entry_probe
-#define TP_REGISTER_OVERRIDE           lttng_syscalls_register_probe
-#define TP_UNREGISTER_OVERRIDE         lttng_syscalls_unregister_probe
-
-#define TRACE_INCLUDE_PATH ../instrumentation/syscalls/headers
-
-#include "../instrumentation/syscalls/headers/syscalls.h"
-
-#undef TP_UNREGISTER_OVERRIDE
-#undef TP_REGISTER_OVERRIDE
-#undef TP_PROBE_CB
-#undef LTTNG_PACKAGE_BUILD
-#undef CREATE_TRACE_POINTS
-
-struct trace_syscall_entry {
-       void *func;
-       const struct lttng_event_desc *desc;    /* Set dynamically */
-       const struct lttng_event_field *fields;
-       unsigned int nrargs;
-};
-
-static int sc_table_desc_filled;
-
-#define CREATE_SYSCALL_TABLE
-
-#undef TRACE_SYSCALL_TABLE
-#define TRACE_SYSCALL_TABLE(_name, _nr, _nrargs)               \
-       [ _nr ] = {                                             \
-               .func = __event_probe__##_name,                 \
-               .nrargs = (_nrargs),                            \
-               .fields = __event_fields___##_name,             \
-       },
-
-static struct trace_syscall_entry sc_table[] = {
-#include "../instrumentation/syscalls/headers/syscalls.h"
-};
-
-#undef CREATE_SYSCALL_TABLE
-
-static void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
-{
-       struct trace_syscall_entry *entry;
-       struct ltt_channel *chan = __data;
-       struct ltt_event *event;
-
-       if (unlikely(id >= ARRAY_SIZE(sc_table)))
-               return;
-       entry = &sc_table[id];
-       if (unlikely(!entry->func))
-               return;
-       event = chan->sc_table[id];
-       WARN_ON_ONCE(!event);
-
-       switch (entry->nrargs) {
-       case 0:
-       {
-               void (*fptr)(void *__data) = entry->func;
-
-               fptr(event);
-               break;
-       }
-       case 1:
-       {
-               void (*fptr)(void *__data, unsigned long arg0) = entry->func;
-               unsigned long args[1];
-
-               syscall_get_arguments(current, regs, 0, entry->nrargs, args);
-               fptr(event, args[0]);
-               break;
-       }
-       case 2:
-       {
-               void (*fptr)(void *__data,
-                       unsigned long arg0,
-                       unsigned long arg1) = entry->func;
-               unsigned long args[2];
-
-               syscall_get_arguments(current, regs, 0, entry->nrargs, args);
-               fptr(event, args[0], args[1]);
-               break;
-       }
-       case 3:
-       {
-               void (*fptr)(void *__data,
-                       unsigned long arg0,
-                       unsigned long arg1,
-                       unsigned long arg2) = entry->func;
-               unsigned long args[3];
-
-               syscall_get_arguments(current, regs, 0, entry->nrargs, args);
-               fptr(event, args[0], args[1], args[2]);
-               break;
-       }
-       case 4:
-       {
-               void (*fptr)(void *__data,
-                       unsigned long arg0,
-                       unsigned long arg1,
-                       unsigned long arg2,
-                       unsigned long arg3) = entry->func;
-               unsigned long args[4];
-
-               syscall_get_arguments(current, regs, 0, entry->nrargs, args);
-               fptr(event, args[0], args[1], args[2], args[3]);
-               break;
-       }
-       case 5:
-       {
-               void (*fptr)(void *__data,
-                       unsigned long arg0,
-                       unsigned long arg1,
-                       unsigned long arg2,
-                       unsigned long arg3,
-                       unsigned long arg4) = entry->func;
-               unsigned long args[5];
-
-               syscall_get_arguments(current, regs, 0, entry->nrargs, args);
-               fptr(event, args[0], args[1], args[2], args[3], args[4]);
-               break;
-       }
-       case 6:
-       {
-               void (*fptr)(void *__data,
-                       unsigned long arg0,
-                       unsigned long arg1,
-                       unsigned long arg2,
-                       unsigned long arg3,
-                       unsigned long arg4,
-                       unsigned long arg5) = entry->func;
-               unsigned long args[6];
-
-               syscall_get_arguments(current, regs, 0, entry->nrargs, args);
-               fptr(event, args[0], args[1], args[2],
-                       args[3], args[4], args[5]);
-               break;
-       }
-       default:
-               break;
-       }
-}
-
-static const struct lttng_event_desc *find_syscall_desc(unsigned int id)
-{
-       unsigned int i;
-
-       for (i = 0; i < syscall_probe_desc->nr_events; i++) {
-               if (syscall_probe_desc->event_desc[i].fields
-                               == sc_table[id].fields)
-                       return &syscall_probe_desc->event_desc[i];
-       }
-       WARN_ON_ONCE(1);
-       return NULL;
-}
-
-static void fill_sc_table_desc(void)
-{
-       unsigned int i;
-
-       if (sc_table_desc_filled)
-               return;
-       /*
-        * This is O(n^2), but rare. Eventually get the TRACE_EVENT code
-        * to emit per-event symbols to skip this.
-        */
-       for (i = 0; i < ARRAY_SIZE(sc_table); i++) {
-               const struct lttng_event_desc **desc = &sc_table[i].desc;
-
-               if (!sc_table[i].func)
-                       continue;
-               (*desc) = find_syscall_desc(i);
-       }
-       sc_table_desc_filled = 1;
-}
-
-
-int lttng_syscalls_register(struct ltt_channel *chan, void *filter)
-{
-       unsigned int i;
-       int ret;
-
-       fill_sc_table_desc();
-
-       if (!chan->sc_table) {
-               /* create syscall table mapping syscall to events */
-               chan->sc_table = kzalloc(sizeof(struct ltt_event *)
-                                       * ARRAY_SIZE(sc_table), GFP_KERNEL);
-               if (!chan->sc_table)
-                       return -ENOMEM;
-       }
-
-       /* Allocate events for each syscall, insert into table */
-       for (i = 0; i < ARRAY_SIZE(sc_table); i++) {
-               struct lttng_kernel_event ev;
-               const struct lttng_event_desc *desc = sc_table[i].desc;
-
-               /*
-                * Skip those already populated by previous failed
-                * register for this channel.
-                */
-               if (chan->sc_table[i])
-                       continue;
-               memset(&ev, 0, sizeof(ev));
-               strncpy(ev.name, desc->name, LTTNG_SYM_NAME_LEN);
-               ev.name[LTTNG_SYM_NAME_LEN - 1] = '\0';
-               ev.instrumentation = LTTNG_KERNEL_NOOP;
-               chan->sc_table[i] = ltt_event_create(chan, &ev, filter);
-               if (!chan->sc_table[i]) {
-                       /*
-                        * If something goes wrong in event registration
-                        * after the first one, we have no choice but to
-                        * leave the previous events in there, until
-                        * deleted by session teardown.
-                        */
-                       return -EINVAL;
-               }
-       }
-       ret = tracepoint_probe_register("syscall_entry",
-                       (void *) syscall_entry_probe, chan);
-       return ret;
-}
-
-/*
- * Only called at session destruction.
- */
-int lttng_syscalls_unregister(struct ltt_channel *chan)
-{
-       int ret;
-
-       if (!chan->sc_table)
-               return 0;
-       ret = tracepoint_probe_unregister("syscall_entry",
-                       (void *) syscall_entry_probe, chan);
-       if (ret)
-               return ret;
-       /* ltt_event destroy will be performed by ltt_session_destroy() */
-       kfree(chan->sc_table);
-       return 0;
-}
-
-static int lttng_syscalls_register_probe(struct lttng_probe_desc *desc)
-{
-       WARN_ON_ONCE(syscall_probe_desc);
-       syscall_probe_desc = desc;
-       return 0;
-}
-
-static void lttng_syscalls_unregister_probe(struct lttng_probe_desc *desc)
-{
-       WARN_ON_ONCE(!syscall_probe_desc);
-       syscall_probe_desc = NULL;
-}
-
-#endif /* SYSCALL_DETAIL */
-
 MODULE_LICENSE("GPL and additional rights");
 MODULE_AUTHOR("Mathieu Desnoyers <mathieu.desnoyers@efficios.com>");
-MODULE_DESCRIPTION("LTTng sched probes");
+MODULE_DESCRIPTION("LTTng generic syscall probes");
This page took 0.037427 seconds and 4 git commands to generate.