|
@@ -25,6 +25,7 @@ static int __read_mostly tracer_enabled;
|
|
|
static struct task_struct *wakeup_task;
|
|
|
static int wakeup_cpu;
|
|
|
static unsigned wakeup_prio = -1;
|
|
|
+static int wakeup_rt;
|
|
|
|
|
|
static raw_spinlock_t wakeup_lock =
|
|
|
(raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED;
|
|
@@ -224,7 +225,7 @@ probe_wakeup(struct rq *rq, struct task_struct *p, int success)
|
|
|
tracing_record_cmdline(p);
|
|
|
tracing_record_cmdline(current);
|
|
|
|
|
|
- if (likely(!rt_task(p)) ||
|
|
|
+ if ((wakeup_rt && !rt_task(p)) ||
|
|
|
p->prio >= wakeup_prio ||
|
|
|
p->prio >= current->prio)
|
|
|
return;
|
|
@@ -321,7 +322,7 @@ static void stop_wakeup_tracer(struct trace_array *tr)
|
|
|
unregister_trace_sched_wakeup(probe_wakeup);
|
|
|
}
|
|
|
|
|
|
-static int wakeup_tracer_init(struct trace_array *tr)
|
|
|
+static int __wakeup_tracer_init(struct trace_array *tr)
|
|
|
{
|
|
|
tracing_max_latency = 0;
|
|
|
wakeup_trace = tr;
|
|
@@ -329,6 +330,18 @@ static int wakeup_tracer_init(struct trace_array *tr)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int wakeup_tracer_init(struct trace_array *tr)
|
|
|
+{
|
|
|
+ wakeup_rt = 0;
|
|
|
+ return __wakeup_tracer_init(tr);
|
|
|
+}
|
|
|
+
|
|
|
+static int wakeup_rt_tracer_init(struct trace_array *tr)
|
|
|
+{
|
|
|
+ wakeup_rt = 1;
|
|
|
+ return __wakeup_tracer_init(tr);
|
|
|
+}
|
|
|
+
|
|
|
static void wakeup_tracer_reset(struct trace_array *tr)
|
|
|
{
|
|
|
stop_wakeup_tracer(tr);
|
|
@@ -360,6 +373,19 @@ static struct tracer wakeup_tracer __read_mostly =
|
|
|
#endif
|
|
|
};
|
|
|
|
|
|
+static struct tracer wakeup_rt_tracer __read_mostly =
|
|
|
+{
|
|
|
+ .name = "wakeup_rt",
|
|
|
+ .init = wakeup_rt_tracer_init,
|
|
|
+ .reset = wakeup_tracer_reset,
|
|
|
+ .start = wakeup_tracer_start,
|
|
|
+ .stop = wakeup_tracer_stop,
|
|
|
+ .print_max = 1,
|
|
|
+#ifdef CONFIG_FTRACE_SELFTEST
|
|
|
+ .selftest = trace_selftest_startup_wakeup,
|
|
|
+#endif
|
|
|
+};
|
|
|
+
|
|
|
__init static int init_wakeup_tracer(void)
|
|
|
{
|
|
|
int ret;
|
|
@@ -368,6 +394,10 @@ __init static int init_wakeup_tracer(void)
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
|
+ ret = register_tracer(&wakeup_rt_tracer);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
device_initcall(init_wakeup_tracer);
|