From: David Goulet Date: Mon, 19 Sep 2011 20:46:32 +0000 (-0400) Subject: Merge branch 'master' into benchmark X-Git-Url: http://git.lttng.org./?a=commitdiff_plain;h=01d92d2f4d254089531424e50f8e8fd9226dd5d6;hp=8915fb60ff20357b2fa21891e57aa46d83fd3d65;p=lttng-tools.git Merge branch 'master' into benchmark --- diff --git a/include/lttng-kernel.h b/include/lttng-kernel.h index 394962054..475cde8cf 100644 --- a/include/lttng-kernel.h +++ b/include/lttng-kernel.h @@ -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 { diff --git a/include/lttng/lttng.h b/include/lttng/lttng.h index 3e5b05562..bde46fa60 100644 --- a/include/lttng/lttng.h +++ b/include/lttng/lttng.h @@ -65,6 +65,8 @@ enum lttng_event_type { LTTNG_EVENT_PROBE, LTTNG_EVENT_FUNCTION, LTTNG_EVENT_FUNCTION_ENTRY, + LTTNG_EVENT_NOOP, + LTTNG_EVENT_SYSCALL, }; /* diff --git a/liblttngctl/lttngctl.c b/liblttngctl/lttngctl.c index 4b803dc5b..bec1dbb85 100644 --- a/liblttngctl/lttngctl.c +++ b/liblttngctl/lttngctl.c @@ -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 { diff --git a/ltt-sessiond/ltt-sessiond.h b/ltt-sessiond/ltt-sessiond.h index 63ef6d57d..617ca54c4 100644 --- a/ltt-sessiond/ltt-sessiond.h +++ b/ltt-sessiond/ltt-sessiond.h @@ -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[], diff --git a/ltt-sessiond/main.c b/ltt-sessiond/main.c index 6667adb49..3ba75fe88 100644 --- a/ltt-sessiond/main.c +++ b/ltt-sessiond/main.c @@ -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); diff --git a/ltt-sessiond/trace-kernel.c b/ltt-sessiond/trace-kernel.c index 57a9eb42d..37d9d143a 100644 --- a/ltt-sessiond/trace-kernel.c +++ b/ltt-sessiond/trace-kernel.c @@ -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; diff --git a/lttng/commands/calibrate.c b/lttng/commands/calibrate.c index b4d0fe045..e17a2fd73 100644 --- a/lttng/commands/calibrate.c +++ b/lttng/commands/calibrate.c @@ -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; diff --git a/lttng/commands/enable_events.c b/lttng/commands/enable_events.c index f6bca6e94..85fd86a08 100644 --- a/lttng/commands/enable_events.c +++ b/lttng/commands/enable_events.c @@ -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; diff --git a/lttng/commands/list.c b/lttng/commands/list.c index f0c8c880f..c73ea74dc 100644 --- a/lttng/commands/list.c +++ b/lttng/commands/list.c @@ -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; } }