|
@@ -2400,6 +2400,27 @@ static void test_ftrace_alive(struct seq_file *m)
|
|
|
seq_printf(m, "# MAY BE MISSING FUNCTION EVENTS\n");
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_TRACER_MAX_TRACE
|
|
|
+static void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter)
|
|
|
+{
|
|
|
+ if (iter->trace->allocated_snapshot)
|
|
|
+ seq_printf(m, "#\n# * Snapshot is allocated *\n#\n");
|
|
|
+ else
|
|
|
+ seq_printf(m, "#\n# * Snapshot is freed *\n#\n");
|
|
|
+
|
|
|
+ seq_printf(m, "# Snapshot commands:\n");
|
|
|
+ seq_printf(m, "# echo 0 > snapshot : Clears and frees snapshot buffer\n");
|
|
|
+ seq_printf(m, "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n");
|
|
|
+ seq_printf(m, "# Takes a snapshot of the main buffer.\n");
|
|
|
+ seq_printf(m, "# echo 2 > snapshot : Clears snapshot buffer (but does not allocate)\n");
|
|
|
+ seq_printf(m, "# (Doesn't have to be '2' works with any number that\n");
|
|
|
+ seq_printf(m, "# is not a '0' or '1')\n");
|
|
|
+}
|
|
|
+#else
|
|
|
+/* Should never be called */
|
|
|
+static inline void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) { }
|
|
|
+#endif
|
|
|
+
|
|
|
static int s_show(struct seq_file *m, void *v)
|
|
|
{
|
|
|
struct trace_iterator *iter = v;
|
|
@@ -2411,7 +2432,9 @@ static int s_show(struct seq_file *m, void *v)
|
|
|
seq_puts(m, "#\n");
|
|
|
test_ftrace_alive(m);
|
|
|
}
|
|
|
- if (iter->trace && iter->trace->print_header)
|
|
|
+ if (iter->snapshot && trace_empty(iter))
|
|
|
+ print_snapshot_help(m, iter);
|
|
|
+ else if (iter->trace && iter->trace->print_header)
|
|
|
iter->trace->print_header(m);
|
|
|
else
|
|
|
trace_default_header(m);
|