sched: Eliminate the ts->idle_lastupdate field
[safe/jmp/linux-2.6] / kernel / trace / trace_sysprof.c
index 6352808..a7974a5 100644 (file)
@@ -88,11 +88,12 @@ static void backtrace_address(void *data, unsigned long addr, int reliable)
        }
 }
 
-const static struct stacktrace_ops backtrace_ops = {
+static const struct stacktrace_ops backtrace_ops = {
        .warning                = backtrace_warning,
        .warning_symbol         = backtrace_warning_symbol,
        .stack                  = backtrace_stack,
        .address                = backtrace_address,
+       .walk_stack             = print_context_stack,
 };
 
 static int
@@ -161,7 +162,7 @@ static void timer_notify(struct pt_regs *regs, int cpu)
                __trace_special(tr, data, 2, regs->ip, 0);
 
                while (i < sample_max_depth) {
-                       frame.next_fp = 0;
+                       frame.next_fp = NULL;
                        frame.return_address = 0;
                        if (!copy_stack_frame(fp, &frame))
                                break;
@@ -196,29 +197,20 @@ static enum hrtimer_restart stack_trace_timer_fn(struct hrtimer *hrtimer)
        return HRTIMER_RESTART;
 }
 
-static void start_stack_timer(int cpu)
+static void start_stack_timer(void *unused)
 {
-       struct hrtimer *hrtimer = &per_cpu(stack_trace_hrtimer, cpu);
+       struct hrtimer *hrtimer = &__get_cpu_var(stack_trace_hrtimer);
 
        hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
        hrtimer->function = stack_trace_timer_fn;
-       hrtimer->cb_mode = HRTIMER_CB_IRQSAFE_NO_SOFTIRQ;
 
-       hrtimer_start(hrtimer, ns_to_ktime(sample_period), HRTIMER_MODE_REL);
+       hrtimer_start(hrtimer, ns_to_ktime(sample_period),
+                     HRTIMER_MODE_REL_PINNED);
 }
 
 static void start_stack_timers(void)
 {
-       cpumask_t saved_mask = current->cpus_allowed;
-       int cpu;
-
-       for_each_online_cpu(cpu) {
-               cpumask_of_cpu_ptr(new_mask, cpu);
-
-               set_cpus_allowed_ptr(current, new_mask);
-               start_stack_timer(cpu);
-       }
-       set_cpus_allowed_ptr(current, &saved_mask);
+       on_each_cpu(start_stack_timer, NULL, 1);
 }
 
 static void stop_stack_timer(int cpu)
@@ -236,25 +228,6 @@ static void stop_stack_timers(void)
                stop_stack_timer(cpu);
 }
 
-static void stack_reset(struct trace_array *tr)
-{
-       int cpu;
-
-       tr->time_start = ftrace_now(tr->cpu);
-
-       for_each_online_cpu(cpu)
-               tracing_reset(tr->data[cpu]);
-}
-
-static void start_stack_trace(struct trace_array *tr)
-{
-       mutex_lock(&sample_timer_lock);
-       stack_reset(tr);
-       start_stack_timers();
-       tracer_enabled = 1;
-       mutex_unlock(&sample_timer_lock);
-}
-
 static void stop_stack_trace(struct trace_array *tr)
 {
        mutex_lock(&sample_timer_lock);
@@ -263,27 +236,23 @@ static void stop_stack_trace(struct trace_array *tr)
        mutex_unlock(&sample_timer_lock);
 }
 
-static void stack_trace_init(struct trace_array *tr)
+static int stack_trace_init(struct trace_array *tr)
 {
        sysprof_trace = tr;
 
-       if (tr->ctrl)
-               start_stack_trace(tr);
-}
+       tracing_start_cmdline_record();
 
-static void stack_trace_reset(struct trace_array *tr)
-{
-       if (tr->ctrl)
-               stop_stack_trace(tr);
+       mutex_lock(&sample_timer_lock);
+       start_stack_timers();
+       tracer_enabled = 1;
+       mutex_unlock(&sample_timer_lock);
+       return 0;
 }
 
-static void stack_trace_ctrl_update(struct trace_array *tr)
+static void stack_trace_reset(struct trace_array *tr)
 {
-       /* When starting a new trace, reset the buffers */
-       if (tr->ctrl)
-               start_stack_trace(tr);
-       else
-               stop_stack_trace(tr);
+       tracing_stop_cmdline_record();
+       stop_stack_trace(tr);
 }
 
 static struct tracer stack_trace __read_mostly =
@@ -291,7 +260,6 @@ static struct tracer stack_trace __read_mostly =
        .name           = "sysprof",
        .init           = stack_trace_init,
        .reset          = stack_trace_reset,
-       .ctrl_update    = stack_trace_ctrl_update,
 #ifdef CONFIG_FTRACE_SELFTEST
        .selftest    = trace_selftest_startup_sysprof,
 #endif
@@ -348,18 +316,14 @@ sysprof_sample_write(struct file *filp, const char __user *ubuf,
        return cnt;
 }
 
-static struct file_operations sysprof_sample_fops = {
+static const struct file_operations sysprof_sample_fops = {
        .read           = sysprof_sample_read,
        .write          = sysprof_sample_write,
 };
 
 void init_tracer_sysprof_debugfs(struct dentry *d_tracer)
 {
-       struct dentry *entry;
 
-       entry = debugfs_create_file("sysprof_sample_period", 0644,
+       trace_create_file("sysprof_sample_period", 0644,
                        d_tracer, NULL, &sysprof_sample_fops);
-       if (entry)
-               return;
-       pr_warning("Could not create debugfs 'dyn_ftrace_total_info' entry\n");
 }