Merge branch 'master' into benchmark
authorDavid Goulet <david.goulet@polymtl.ca>
Mon, 19 Sep 2011 20:46:32 +0000 (16:46 -0400)
committerDavid Goulet <david.goulet@polymtl.ca>
Mon, 19 Sep 2011 20:46:32 +0000 (16:46 -0400)
include/lttng-kernel.h
include/lttng/lttng.h
liblttngctl/lttngctl.c
ltt-sessiond/ltt-sessiond.h
ltt-sessiond/main.c
ltt-sessiond/trace-kernel.c
lttng/commands/calibrate.c
lttng/commands/enable_events.c
lttng/commands/list.c

index 394962054877f751a653050013a7b448e64a70b1..475cde8cfd82dd267cc9e0fb98636d85a964af57 100644 (file)
@@ -38,6 +38,8 @@ enum lttng_kernel_instrumentation {
        LTTNG_KERNEL_KPROBE        = 1,
        LTTNG_KERNEL_FUNCTION      = 2,
        LTTNG_KERNEL_KRETPROBE     = 3,
+       LTTNG_KERNEL_NOOP          = 4,    /* not hooked */
+       LTTNG_KERNEL_SYSCALL       = 5,
 };
 
 enum lttng_kernel_context_type {
index 3e5b055625b332772b502160a248b96ea7c01ccb..bde46fa60337fb8ff07b2410e92478c5b167d5db 100644 (file)
@@ -65,6 +65,8 @@ enum lttng_event_type {
        LTTNG_EVENT_PROBE,
        LTTNG_EVENT_FUNCTION,
        LTTNG_EVENT_FUNCTION_ENTRY,
+       LTTNG_EVENT_NOOP,
+       LTTNG_EVENT_SYSCALL,
 };
 
 /*
index 4b803dc5b06e4ee76a56caf388d6af3b7911cd18..bec1dbb8503c60da423e2f2f7f44161382b69e27 100644 (file)
@@ -506,7 +506,7 @@ int lttng_enable_event(struct lttng_handle *handle,
 
        copy_lttng_domain(&lsm.domain, &handle->domain);
 
-       if (ev) {
+       if (ev && ev->name[0] != '\0') {
                lsm.cmd_type = LTTNG_ENABLE_EVENT;
                memcpy(&lsm.u.enable.event, ev, sizeof(lsm.u.enable.event));
        } else {
index 63ef6d57dd3a3c038ee09758ba864e6fb28cb74b..617ca54c40ae61a72bf9dfe1a7c4e84582a70817 100644 (file)
@@ -56,7 +56,6 @@ const struct module_param kernel_modules_list[] = {
        { "lttng-probe-irq", 0 },
        { "lttng-probe-kvm", 0 },
        { "lttng-probe-sched", 0 },
-       { "lttng-probe-syscalls", 0 },
 };
 
 extern const char default_home_dir[],
index 6667adb49271627c143f1e07625ed69d7d15d27e..3ba75fe886a3af6050b7646845e8ff76e40cb762 100644 (file)
@@ -1514,7 +1514,7 @@ static void init_kernel_tracer(void)
        int ret;
        char *proc_mounts = "/proc/mounts";
        char line[256];
-       char *debugfs_path = NULL, *lttng_path;
+       char *debugfs_path = NULL, *lttng_path = NULL;
        FILE *fp;
 
        /* Detect debugfs */
@@ -1772,6 +1772,12 @@ static void list_lttng_events(struct ltt_kernel_channel *kchan,
                                memcpy(&events[i].attr.ftrace, &event->event->u.ftrace,
                                                sizeof(struct lttng_kernel_function));
                                break;
+                       case LTTNG_KERNEL_NOOP:
+                               events[i].type = LTTNG_EVENT_NOOP;
+                               break;
+                       case LTTNG_KERNEL_SYSCALL:
+                               events[i].type = LTTNG_EVENT_SYSCALL;
+                               break;
                }
                i++;
        }
@@ -2666,7 +2672,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx)
        case LTTNG_LIST_EVENTS:
        {
                size_t nb_event;
-               struct lttng_event *events;
+               struct lttng_event *events = NULL;
 
                nb_event = cmd_list_events(cmd_ctx->session,
                                cmd_ctx->lsm->u.list.channel_name, &events);
index 57a9eb42dffae62be66c6ef0286219dd50bc8b1b..37d9d143a17c6439345c28ac97e976a8a2e2c575 100644 (file)
@@ -204,6 +204,9 @@ struct ltt_kernel_event *trace_kernel_create_event(struct lttng_event *ev)
        case LTTNG_EVENT_TRACEPOINT:
                attr->instrumentation = LTTNG_KERNEL_TRACEPOINT;
                break;
+       case LTTNG_EVENT_SYSCALL:
+               attr->instrumentation = LTTNG_KERNEL_SYSCALL;
+               break;
        default:
                ERR("Unknown kernel instrumentation type (%d)", ev->type);
                goto error;
index b4d0fe04537c8be1cb1212b34ae5aca8bf739381..e17a2fd73b12b82f11363f1150edc89f1a7a27fe 100644 (file)
@@ -47,6 +47,7 @@ enum {
        OPT_PROBE,
        OPT_FUNCTION,
        OPT_FUNCTION_ENTRY,
+       OPT_SYSCALL,
 };
 
 static struct lttng_handle *handle;
@@ -63,6 +64,7 @@ static struct poptOption long_options[] = {
        {"probe",          0,   POPT_ARG_NONE, 0, OPT_PROBE, 0, 0},
        {"function",       0,   POPT_ARG_NONE, 0, OPT_FUNCTION, 0, 0},
        {"function:entry", 0,   POPT_ARG_NONE, 0, OPT_FUNCTION_ENTRY, 0, 0},
+       {"syscall",        0,   POPT_ARG_NONE, 0, OPT_SYSCALL, 0, 0},
        {0, 0, 0, 0, 0, 0, 0}
 };
 
@@ -87,6 +89,7 @@ static void usage(FILE *ofp)
        fprintf(ofp, "                           Dynamic function entry/return probe.\n");
        fprintf(ofp, "    --function:entry symbol\n");
        fprintf(ofp, "                           Function tracer event\n");
+       fprintf(ofp, "    --syscall              System call eventl\n");
        fprintf(ofp, "    --marker               User-space marker (deprecated)\n");
        fprintf(ofp, "\n");
 }
@@ -130,6 +133,9 @@ static int calibrate_lttng(void)
                case LTTNG_EVENT_FUNCTION_ENTRY:
                        DBG("Calibrating kernel function entry");
                        break;
+               case LTTNG_EVENT_SYSCALL:
+                       DBG("Calibrating kernel syscall");
+                       break;
                default:
                        ret = CMD_NOT_IMPLEMENTED;
                        goto end;
@@ -194,6 +200,9 @@ int cmd_calibrate(int argc, const char **argv)
                case OPT_FUNCTION_ENTRY:
                        ret = CMD_NOT_IMPLEMENTED;
                        break;
+               case OPT_SYSCALL:
+                       ret = CMD_NOT_IMPLEMENTED;
+                       break;
                default:
                        usage(stderr);
                        ret = CMD_UNDEFINED;
index f6bca6e94823fd28e997614ba55bf67b499b7ba7..85fd86a08c4b89e27692eacaa736b99c947d84a0 100644 (file)
@@ -53,6 +53,7 @@ enum {
        OPT_PROBE,
        OPT_FUNCTION,
        OPT_FUNCTION_ENTRY,
+       OPT_SYSCALL,
 };
 
 static struct lttng_handle *handle;
@@ -72,6 +73,7 @@ static struct poptOption long_options[] = {
        {"probe",         0,   POPT_ARG_STRING, 0, OPT_PROBE, 0, 0},
        {"function",       0,   POPT_ARG_STRING, 0, OPT_FUNCTION, 0, 0},
        {"function:entry", 0,   POPT_ARG_STRING, 0, OPT_FUNCTION_ENTRY, 0, 0},
+       {"syscall",        0,     POPT_ARG_NONE, 0, OPT_SYSCALL, 0, 0},
        {0, 0, 0, 0, 0, 0, 0}
 };
 
@@ -103,6 +105,7 @@ static void usage(FILE *ofp)
        fprintf(ofp, "                           decimal (NNN...) or hexadecimal (0xNNN...)\n");
        fprintf(ofp, "    --function:entry symbol\n");
        fprintf(ofp, "                           Function tracer event\n");
+       fprintf(ofp, "    --syscall              System call event\n");
        fprintf(ofp, "    --marker               User-space marker (deprecated)\n");
        fprintf(ofp, "\n");
 }
@@ -210,15 +213,33 @@ static int enable_events(char *session_name)
        }
 
        if (opt_enable_all) {
-               if (opt_kernel) {
-                       ret = lttng_enable_event(handle, NULL, channel_name);
-                       if (ret == 0) {
-                               MSG("All kernel events are enabled in channel %s", channel_name);
+               switch (opt_event_type) {
+               case LTTNG_EVENT_TRACEPOINT:
+                       if (opt_kernel) {
+                               ret = lttng_enable_event(handle, NULL, channel_name);
+                               if (ret == 0) {
+                                       MSG("All kernel events are enabled in channel %s", channel_name);
+                               }
+                               goto error;
+                       }
+                       /* TODO: User-space tracer */
+                       break;
+               case LTTNG_EVENT_SYSCALL:
+                       if (opt_kernel) {
+                               ev.name[0] = '\0';
+                               ev.type = opt_event_type;
+
+                               ret = lttng_enable_event(handle, &ev, channel_name);
+                               if (ret == 0) {
+                                       MSG("All kernel system calls are enabled in channel %s", channel_name);
+                               }
+                               goto error;
                        }
+                       break;
+               default:
+                       MSG("Enable all not supported for this instrumentation type.");
                        goto error;
                }
-
-               /* TODO: User-space tracer */
        }
 
        /* Strip event list */
@@ -258,6 +279,10 @@ static int enable_events(char *session_name)
                                        LTTNG_SYMBOL_NAME_LEN);
                                ev.attr.ftrace.symbol_name[LTTNG_SYMBOL_NAME_LEN - 1] = '\0';
                                break;
+                       case LTTNG_EVENT_SYSCALL:
+                               MSG("per-syscall selection not supported yet. Use \"-a\" for all syscalls.");
+                               ret = CMD_NOT_IMPLEMENTED;
+                               goto error;
                        default:
                                ret = CMD_NOT_IMPLEMENTED;
                                goto error;
@@ -339,6 +364,9 @@ int cmd_enable_events(int argc, const char **argv)
                        opt_event_type = LTTNG_EVENT_FUNCTION_ENTRY;
                        opt_function_entry_symbol = poptGetOptArg(pc);
                        break;
+               case OPT_SYSCALL:
+                       opt_event_type = LTTNG_EVENT_SYSCALL;
+                       break;
                default:
                        usage(stderr);
                        ret = CMD_UNDEFINED;
index f0c8c880f536e0b23742bdc0160f54c8fd2a294b..c73ea74dc457f504775abede040a1a3cceb7aec4 100644 (file)
@@ -177,6 +177,14 @@ static int list_events(const char *channel_name)
                                                events[i].name, events[i].enabled);
                                MSG("%ssymbol: \"%s\"", indent8, events[i].attr.ftrace.symbol_name);
                                break;
+                       case LTTNG_EVENT_SYSCALL:
+                               MSG("%s (type: syscall) [enabled: %d]", indent6,
+                                               events[i].enabled);
+                               break;
+                       case LTTNG_EVENT_NOOP:
+                               MSG("%s (type: noop) [enabled: %d]", indent6,
+                                               events[i].enabled);
+                               break;
                }
        }
 
This page took 0.04641 seconds and 4 git commands to generate.