diff options
Diffstat (limited to 'kernel/trace/trace.c')
-rw-r--r-- | kernel/trace/trace.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index ae6fa2d1cdf7..1a41023a1f88 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
@@ -843,7 +843,15 @@ __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) | |||
843 | 843 | ||
844 | memcpy(max_data->comm, tsk->comm, TASK_COMM_LEN); | 844 | memcpy(max_data->comm, tsk->comm, TASK_COMM_LEN); |
845 | max_data->pid = tsk->pid; | 845 | max_data->pid = tsk->pid; |
846 | max_data->uid = task_uid(tsk); | 846 | /* |
847 | * If tsk == current, then use current_uid(), as that does not use | ||
848 | * RCU. The irq tracer can be called out of RCU scope. | ||
849 | */ | ||
850 | if (tsk == current) | ||
851 | max_data->uid = current_uid(); | ||
852 | else | ||
853 | max_data->uid = task_uid(tsk); | ||
854 | |||
847 | max_data->nice = tsk->static_prio - 20 - MAX_RT_PRIO; | 855 | max_data->nice = tsk->static_prio - 20 - MAX_RT_PRIO; |
848 | max_data->policy = tsk->policy; | 856 | max_data->policy = tsk->policy; |
849 | max_data->rt_priority = tsk->rt_priority; | 857 | max_data->rt_priority = tsk->rt_priority; |
@@ -6216,10 +6224,15 @@ __init static int tracer_alloc_buffers(void) | |||
6216 | 6224 | ||
6217 | trace_init_cmdlines(); | 6225 | trace_init_cmdlines(); |
6218 | 6226 | ||
6219 | register_tracer(&nop_trace); | 6227 | /* |
6220 | 6228 | * register_tracer() might reference current_trace, so it | |
6229 | * needs to be set before we register anything. This is | ||
6230 | * just a bootstrap of current_trace anyway. | ||
6231 | */ | ||
6221 | global_trace.current_trace = &nop_trace; | 6232 | global_trace.current_trace = &nop_trace; |
6222 | 6233 | ||
6234 | register_tracer(&nop_trace); | ||
6235 | |||
6223 | /* All seems OK, enable tracing */ | 6236 | /* All seems OK, enable tracing */ |
6224 | tracing_disabled = 0; | 6237 | tracing_disabled = 0; |
6225 | 6238 | ||