@@ -218,4 +218,5 @@ void tracefs_trace_pipe_stop(struct tracefs_instance *instance);
int tracefs_kprobe_raw(const char *system, const char *event,
const char *addr, const char *format);
int tracefs_kprobe_clear(bool force);
+int tracefs_kprobe_clear_probe(const char *system, const char *event, bool force);
#endif /* _TRACE_FS_H */
@@ -184,3 +184,32 @@ int tracefs_kprobe_clear(bool force)
free(content);
return ret;
}
+
+int tracefs_kprobe_clear_probe(const char *system, const char *event, bool force)
+{
+ char **instance_list;
+ char *content;
+ int ret;
+
+ if (!system)
+ system = "kprobes";
+
+ ret = asprintf(&content, "-:%s/%s", system, event);
+ if (ret < 0)
+ return -1;
+
+ /*
+ * Since we know we are disabling a specific event, try
+ * to disable it first before clearing it.
+ */
+ if (force) {
+ instance_list = tracefs_instances(NULL);
+ disable_events(system, event, instance_list);
+ tracefs_list_free(instance_list);
+ }
+
+ ret = tracefs_instance_file_append(NULL, KPROBE_EVENTS, content);
+ free(content);
+
+ return ret < 0 ? -1 : 0;
+}