Esempio n. 1
0
static int tracing_sched_register(void)
{
	int ret;

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

	ret = register_trace_sched_wakeup_new(probe_sched_wakeup, NULL);
	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_sched_switch, NULL);
	if (ret) {
		pr_info("sched trace: Couldn't activate tracepoint"
			" probe to kernel_sched_switch\n");
		goto fail_deprobe_wake_new;
	}

	return ret;
fail_deprobe_wake_new:
	unregister_trace_sched_wakeup_new(probe_sched_wakeup, NULL);
fail_deprobe:
	unregister_trace_sched_wakeup(probe_sched_wakeup, NULL);
	return ret;
}
Esempio n. 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);
}