[PATCH 2/5] ftrace: remove wakeup functions from sched_switch tracer

From: Steven Rostedt
Date: Thu May 22 2008 - 00:23:40 EST


The added wakeup functions inside the sched_switch tracer dirty the trace
quite a bit. The sched_switch tracer is used to watch context switches.
Adding wakeups to this make the flow of this trace much more complex to
understand.

Perhaps we can add a way to turn on or off this tracing but for now I'm
reverting the sched_switch back to its original behavior.

Signed-off-by: Steven Rostedt <srostedt@xxxxxxxxxx>
---
kernel/trace/trace_sched_switch.c | 92 --------------------------------------
1 file changed, 1 insertion(+), 91 deletions(-)

Index: linux-tip.git/kernel/trace/trace_sched_switch.c
===================================================================
--- linux-tip.git.orig/kernel/trace/trace_sched_switch.c 2008-05-21 13:25:34.000000000 -0400
+++ linux-tip.git/kernel/trace/trace_sched_switch.c 2008-05-21 22:24:13.000000000 -0400
@@ -72,59 +72,6 @@ sched_switch_callback(void *probe_data,
sched_switch_func(probe_data, __rq, prev, next);
}

-static void
-wakeup_func(void *private, void *__rq, struct task_struct *wakee, struct
- task_struct *curr)
-{
- struct trace_array **ptr = private;
- struct trace_array *tr = *ptr;
- struct trace_array_cpu *data;
- unsigned long flags;
- long disabled;
- int cpu;
-
- if (!tracer_enabled)
- return;
-
- tracing_record_cmdline(curr);
-
- local_irq_save(flags);
- cpu = raw_smp_processor_id();
- data = tr->data[cpu];
- disabled = atomic_inc_return(&data->disabled);
-
- if (likely(disabled == 1))
- tracing_sched_wakeup_trace(tr, data, wakee, curr, flags);
-
- atomic_dec(&data->disabled);
- local_irq_restore(flags);
-}
-
-static notrace void
-wake_up_callback(void *probe_data, void *call_data,
- const char *format, va_list *args)
-{
- struct task_struct *curr;
- struct task_struct *task;
- struct rq *__rq;
-
- if (likely(!tracer_enabled))
- return;
-
- /* Skip pid %d state %ld */
- (void)va_arg(*args, int);
- (void)va_arg(*args, long);
- /* now get the meat: "rq %p task %p rq->curr %p" */
- __rq = va_arg(*args, typeof(__rq));
- task = va_arg(*args, typeof(task));
- curr = va_arg(*args, typeof(curr));
-
- tracing_record_cmdline(task);
- tracing_record_cmdline(curr);
-
- wakeup_func(probe_data, __rq, task, curr);
-}
-
void
ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3)
{
@@ -163,47 +110,16 @@ static int tracing_sched_register(void)
{
int ret;

- ret = marker_probe_register("kernel_sched_wakeup",
- "pid %d state %ld ## rq %p task %p rq->curr %p",
- wake_up_callback,
- &ctx_trace);
- if (ret) {
- pr_info("wakeup trace: Couldn't add marker"
- " probe to kernel_sched_wakeup\n");
- return ret;
- }
-
- ret = marker_probe_register("kernel_sched_wakeup_new",
- "pid %d state %ld ## rq %p task %p rq->curr %p",
- wake_up_callback,
- &ctx_trace);
- if (ret) {
- pr_info("wakeup trace: Couldn't add marker"
- " probe to kernel_sched_wakeup_new\n");
- goto fail_deprobe;
- }
-
ret = marker_probe_register("kernel_sched_schedule",
"prev_pid %d next_pid %d prev_state %ld "
"## rq %p prev %p next %p",
sched_switch_callback,
&ctx_trace);
- if (ret) {
+ if (ret)
pr_info("sched trace: Couldn't add marker"
" probe to kernel_sched_schedule\n");
- goto fail_deprobe_wake_new;
- }

return ret;
-fail_deprobe_wake_new:
- marker_probe_unregister("kernel_sched_wakeup_new",
- wake_up_callback,
- &ctx_trace);
-fail_deprobe:
- marker_probe_unregister("kernel_sched_wakeup",
- wake_up_callback,
- &ctx_trace);
- return ret;
}

static void tracing_sched_unregister(void)
@@ -211,12 +127,6 @@ static void tracing_sched_unregister(voi
marker_probe_unregister("kernel_sched_schedule",
sched_switch_callback,
&ctx_trace);
- marker_probe_unregister("kernel_sched_wakeup_new",
- wake_up_callback,
- &ctx_trace);
- marker_probe_unregister("kernel_sched_wakeup",
- wake_up_callback,
- &ctx_trace);
}

void tracing_start_sched_switch(void)

--
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/