+
+int trace_fd = -1;
+int marker_fd = -1;
+
+int init_ftrace()
+{
+#ifdef FTRACE
+ char *debugfs;
+ char path[256];
+ FILE *f;
+
+ debugfs = "/sys/kernel/debug";
+ if (debugfs) {
+ strcpy(path, debugfs);
+ strcat(path,"/tracing/tracing_on");
+ trace_fd = open(path, O_WRONLY);
+ if (trace_fd >= 0)
+ write(trace_fd, "1", 1);
+
+ strcpy(path, debugfs);
+ strcat(path,"/tracing/trace_marker");
+ marker_fd = open(path, O_WRONLY);
+
+ strcpy(path, debugfs);
+ strcat(path,"/tracing/set_ftrace_pid");
+ f = fopen(path, "w");
+ fprintf(f, "%d\n", getpid());
+ fclose(f);
+ system("echo function_graph > /sys/kernel/debug/tracing/current_tracer");
+ system("echo can_send > /sys/kernel/debug/tracing/set_graph_function");
+ system("echo > /sys/kernel/debug/tracing/trace");
+ system("echo 1 > /sys/kernel/debug/tracing/tracing_enabled");
+ }
+#endif /* FTRACE */
+}
+
+static inline void trace_on()
+{
+ if (trace_fd >= 0)
+ write(trace_fd, "1", 1);
+}
+
+static inline void trace_off(int ret)
+{
+ if (marker_fd >= 0) {
+ char marker[100];
+ sprintf(marker, "write returned %d\n", ret);
+ write(marker_fd, marker, strlen(marker));
+ }
+ if (trace_fd >= 0)
+ write(trace_fd, "0", 1);
+}
+
+void msg_info_free(struct msg_info *mi)
+{
+ mi->id = -1;
+}
+