#include <linux/init.h>
#include <linux/debugfs.h>
#include <linux/ftrace.h>
+#include <linux/kallsyms.h>
#include "trace.h"
trace_boot_enabled = 1;
}
-void stop_boot_trace(struct trace_array *tr)
+void stop_boot_trace(void)
{
trace_boot_enabled = 0;
}
+void reset_boot_trace(struct trace_array *tr)
+{
+ stop_boot_trace();
+}
+
static void boot_trace_init(struct trace_array *tr)
{
int cpu;
if (tr->ctrl)
start_boot_trace();
else
- stop_boot_trace(tr);
+ stop_boot_trace();
}
static enum print_line_t initcall_print_line(struct trace_iterator *iter)
struct timespec rettime = ktime_to_timespec(it->rettime);
if (entry->type == TRACE_BOOT) {
- ret = trace_seq_printf(s, "[%5ld.%06ld] calling %pF @ %i\n",
+ ret = trace_seq_printf(s, "[%5ld.%09ld] calling %s @ %i\n",
calltime.tv_sec,
calltime.tv_nsec,
it->func, it->caller);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
- ret = trace_seq_printf(s, "[%5ld.%06ld] initcall %pF "
+
+ ret = trace_seq_printf(s, "[%5ld.%09ld] initcall %s "
"returned %d after %lld msecs\n",
rettime.tv_sec,
rettime.tv_nsec,
it->func, it->result, it->duration);
+
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
return TRACE_TYPE_HANDLED;
{
.name = "initcall",
.init = boot_trace_init,
- .reset = stop_boot_trace,
+ .reset = reset_boot_trace,
.ctrl_update = boot_trace_ctrl_update,
.print_line = initcall_print_line,
};
-
-void trace_boot(struct boot_trace *it)
+void trace_boot(struct boot_trace *it, initcall_t fn)
{
struct ring_buffer_event *event;
struct trace_boot *entry;
if (!trace_boot_enabled)
return;
+ /* Get its name now since this function could
+ * disappear because it is in the .init section.
+ */
+ sprint_symbol(it->func, (unsigned long)fn);
preempt_disable();
data = tr->data[smp_processor_id()];