7 #include <linux/module.h>
21 static int sched_stopped;
33 struct ctx_switch_entry *
entry;
36 sizeof(*entry), flags, pc);
40 entry->prev_pid = prev->
pid;
41 entry->prev_prio = prev->
prio;
42 entry->prev_state = prev->
state;
43 entry->next_pid = next->
pid;
44 entry->next_prio = next->
prio;
45 entry->next_state = next->
state;
46 entry->next_cpu = task_cpu(next);
48 if (!filter_check_discard(call, entry, buffer, event))
66 if (!tracer_enabled || sched_stopped)
84 unsigned long flags,
int pc)
88 struct ctx_switch_entry *
entry;
92 sizeof(*entry), flags, pc);
96 entry->prev_pid = curr->
pid;
97 entry->prev_prio = curr->
prio;
98 entry->prev_state = curr->
state;
99 entry->next_pid = wakee->
pid;
100 entry->next_prio = wakee->
prio;
101 entry->next_state = wakee->
state;
102 entry->next_cpu = task_cpu(wakee);
104 if (!filter_check_discard(call, entry, buffer, event))
106 ftrace_trace_stack(tr->
buffer, flags, 6, pc);
107 ftrace_trace_userstack(tr->
buffer, flags, pc);
111 probe_sched_wakeup(
void *ignore,
struct task_struct *wakee,
int success)
122 if (!tracer_enabled || sched_stopped)
137 static int tracing_sched_register(
void)
141 ret = register_trace_sched_wakeup(probe_sched_wakeup,
NULL);
143 pr_info(
"wakeup trace: Couldn't activate tracepoint"
144 " probe to kernel_sched_wakeup\n");
148 ret = register_trace_sched_wakeup_new(probe_sched_wakeup,
NULL);
150 pr_info(
"wakeup trace: Couldn't activate tracepoint"
151 " probe to kernel_sched_wakeup_new\n");
155 ret = register_trace_sched_switch(probe_sched_switch,
NULL);
157 pr_info(
"sched trace: Couldn't activate tracepoint"
158 " probe to kernel_sched_switch\n");
159 goto fail_deprobe_wake_new;
163 fail_deprobe_wake_new:
164 unregister_trace_sched_wakeup_new(probe_sched_wakeup,
NULL);
166 unregister_trace_sched_wakeup(probe_sched_wakeup,
NULL);
170 static void tracing_sched_unregister(
void)
172 unregister_trace_sched_switch(probe_sched_switch,
NULL);
173 unregister_trace_sched_wakeup_new(probe_sched_wakeup,
NULL);
174 unregister_trace_sched_wakeup(probe_sched_wakeup,
NULL);
177 static void tracing_start_sched_switch(
void)
181 tracing_sched_register();
185 static void tracing_stop_sched_switch(
void)
189 tracing_sched_unregister();
195 tracing_start_sched_switch();
200 tracing_stop_sched_switch();
215 tracing_start_sched_switch();
234 tracing_stop_sched_switch();