static void start_irqsoff_tracer(struct trace_array *tr)
{
	register_ftrace_function(&trace_ops);
	if (tracing_is_enabled())
		tracer_enabled = 1;
	else
		tracer_enabled = 0;
}
Beispiel #2
0
static void start_wakeup_tracer(struct trace_array *tr)
{
    int ret;

    ret = register_trace_sched_wakeup(probe_wakeup);
    if (ret) {
        pr_info("wakeup trace: Couldn't activate tracepoint"
                " probe to kernel_sched_wakeup\n");
        return;
    }

    ret = register_trace_sched_wakeup_new(probe_wakeup);
    if (ret) {
        pr_info("wakeup trace: Couldn't activate tracepoint"
                " probe to kernel_sched_wakeup_new\n");
        goto fail_deprobe;
    }

    ret = register_trace_sched_switch(probe_wakeup_sched_switch);
    if (ret) {
        pr_info("sched trace: Couldn't activate tracepoint"
                " probe to kernel_sched_switch\n");
        goto fail_deprobe_wake_new;
    }

    ret = register_trace_sched_migrate_task(probe_wakeup_migrate_task);
    if (ret) {
        pr_info("wakeup trace: Couldn't activate tracepoint"
                " probe to kernel_sched_migrate_task\n");
        return;
    }

    wakeup_reset(tr);

    /*
     * Don't let the tracer_enabled = 1 show up before
     * the wakeup_task is reset. This may be overkill since
     * wakeup_reset does a spin_unlock after setting the
     * wakeup_task to NULL, but I want to be safe.
     * This is a slow path anyway.
     */
    smp_wmb();

    register_ftrace_function(&trace_ops);

    if (tracing_is_enabled())
        tracer_enabled = 1;
    else
        tracer_enabled = 0;

    return;
fail_deprobe_wake_new:
    unregister_trace_sched_wakeup_new(probe_wakeup);
fail_deprobe:
    unregister_trace_sched_wakeup(probe_wakeup);
}
int trace_mark_enabled(void) {
	return tracing_is_enabled();
}