summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt (Google) <rostedt@goodmis.org>2022-02-01 19:02:06 -0500
committerSteven Rostedt (Google) <rostedt@goodmis.org>2022-02-01 19:02:06 -0500
commit14003545bca64d270621caad2f565bd224a10e1b (patch)
treed2676fb81fce56478925e2de6092bbcf1edbae08
parent360f786918feace4484ed11e5d9311c6f1feb0d1 (diff)
downloadktrace-14003545bca64d270621caad2f565bd224a10e1b.tar.gz
ktrace: Add disable tracing and events
Add the disable command to disable tracing and events just like the enable command works. Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
-rw-r--r--src/enable.c92
-rw-r--r--src/ktrace.c3
-rw-r--r--src/ktrace.h6
3 files changed, 101 insertions, 0 deletions
diff --git a/src/enable.c b/src/enable.c
index 3187135..d670ccf 100644
--- a/src/enable.c
+++ b/src/enable.c
@@ -10,6 +10,12 @@ static void enable_usage(struct ccli *ccli)
" <type> : tracing, event\n");
}
+static void disable_usage(struct ccli *ccli)
+{
+ ccli_printf(ccli, "usage: disable <type> <type-command>\n"
+ " <type> : tracing, event\n");
+}
+
static int enable_tracing(struct ccli *ccli, void *data,
int argc, char **argv)
{
@@ -17,6 +23,13 @@ static int enable_tracing(struct ccli *ccli, void *data,
return 0;
}
+static int disable_tracing(struct ccli *ccli, void *data,
+ int argc, char **argv)
+{
+ ccli_printf(ccli, "# echo 0 > %s/tracing_on\n", tracefs_tracing_dir());
+ return 0;
+}
+
static char *get_event(struct ccli *ccli, void *data, char *ename)
{
struct tep_handle *tep = data;
@@ -53,6 +66,23 @@ static int enable_event(struct ccli *ccli, void *data,
return 0;
}
+static int disable_event(struct ccli *ccli, void *data,
+ int argc, char **argv)
+{
+ char *file;
+
+ if (argc < 1) {
+ ccli_printf(ccli, "usage: enable event system/event\n");
+ return 0;
+ }
+
+ file = get_event(ccli, data, argv[0]);
+ if (file)
+ ccli_printf(ccli, "# echo 0 > %s\n", file);
+ tracefs_put_tracing_file(file);
+ return 0;
+}
+
int cmd_enable(struct ccli *ccli, const char *command, const char *line,
void *data, int argc, char **argv)
{
@@ -72,6 +102,25 @@ int cmd_enable(struct ccli *ccli, const char *command, const char *line,
return 0;
}
+int cmd_disable(struct ccli *ccli, const char *command, const char *line,
+ void *data, int argc, char **argv)
+{
+ if (argc < 2) {
+ disable_usage(ccli);
+ return 0;
+ }
+
+ if (strcmp(argv[1], "tracing") == 0)
+ return disable_tracing(ccli, data, argc - 2, argv + 2);
+
+ if (strcmp(argv[1], "event") == 0)
+ return disable_event(ccli, data, argc - 2, argv + 2);
+
+ enable_usage(ccli);
+
+ return 0;
+}
+
static int enable_event_completion(struct ccli *ccli, void *data,
int argc, char **argv,
char ***list, int word, char *match)
@@ -84,6 +133,18 @@ static int enable_event_completion(struct ccli *ccli, void *data,
return 0;
}
+static int disable_event_completion(struct ccli *ccli, void *data,
+ int argc, char **argv,
+ char ***list, int word, char *match)
+{
+ struct tep_handle *tep = data;
+
+ if (word == 0)
+ return event_completion(ccli, tep, list, match, 0);
+
+ return 0;
+}
+
int enable_completion(struct ccli *ccli, const char *command,
const char *line, int word,
char *match, char ***list, void *data)
@@ -113,3 +174,34 @@ int enable_completion(struct ccli *ccli, const char *command,
return ret;
}
+
+
+int disable_completion(struct ccli *ccli, const char *command,
+ const char *line, int word,
+ char *match, char ***list, void *data)
+{
+ char *types[] = { "tracing", "event" };
+ char **argv;
+ int argc;
+ int cnt = 0;
+ int ret = 0;
+ int i;
+
+ if (word == 1) {
+ for (i = 0; ret >= 0 && i < ARRAY_SIZE(types); i++)
+ ret = ccli_list_add(ccli, list, &cnt, types[i]);
+ return ret;
+ }
+
+ argc = ccli_line_parse(line, &argv);
+ if (argc < 0)
+ return 0;
+
+ if (strcmp(argv[1], "event") == 0)
+ ret = disable_event_completion(ccli, data, argc - 2, argv + 2,
+ list, word - 2, match);
+
+ ccli_argv_free(argv);
+
+ return ret;
+}
diff --git a/src/ktrace.c b/src/ktrace.c
index 62ae831..3be95bb 100644
--- a/src/ktrace.c
+++ b/src/ktrace.c
@@ -112,6 +112,9 @@ int main (int argc, char **argv)
ccli_register_command(ccli, "enable", cmd_enable, tep);
ccli_register_completion(ccli, "enable", enable_completion);
+ ccli_register_command(ccli, "disable", cmd_disable, tep);
+ ccli_register_completion(ccli, "disable", disable_completion);
+
ccli_loop(ccli);
save_history(ccli);
diff --git a/src/ktrace.h b/src/ktrace.h
index ef2e490..27fab9a 100644
--- a/src/ktrace.h
+++ b/src/ktrace.h
@@ -24,6 +24,12 @@ int enable_completion(struct ccli *ccli, const char *command,
int cmd_enable(struct ccli *ccli, const char *command, const char *line,
void *data, int argc, char **argv);
+int disable_completion(struct ccli *ccli, const char *command,
+ const char *line, int word,
+ char *match, char ***list, void *data);
+int cmd_disable(struct ccli *ccli, const char *command, const char *line,
+ void *data, int argc, char **argv);
+
struct tep_event *find_event(struct tep_handle *tep, char *ename);
int event_completion(struct ccli *ccli, struct tep_handle *tep,