diff options
Diffstat (limited to 'kernel/trace')
| -rw-r--r-- | kernel/trace/ring_buffer.c | 2 | ||||
| -rw-r--r-- | kernel/trace/trace_mmiotrace.c | 16 | ||||
| -rw-r--r-- | kernel/trace/trace_stack.c | 24 |
3 files changed, 23 insertions, 19 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index f780e9552f91..668bbb5ef2bd 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c | |||
| @@ -1215,7 +1215,7 @@ ring_buffer_lock_reserve(struct ring_buffer *buffer, | |||
| 1215 | 1215 | ||
| 1216 | out: | 1216 | out: |
| 1217 | if (resched) | 1217 | if (resched) |
| 1218 | preempt_enable_notrace(); | 1218 | preempt_enable_no_resched_notrace(); |
| 1219 | else | 1219 | else |
| 1220 | preempt_enable_notrace(); | 1220 | preempt_enable_notrace(); |
| 1221 | return NULL; | 1221 | return NULL; |
diff --git a/kernel/trace/trace_mmiotrace.c b/kernel/trace/trace_mmiotrace.c index f28484618ff0..e62cbf78eab6 100644 --- a/kernel/trace/trace_mmiotrace.c +++ b/kernel/trace/trace_mmiotrace.c | |||
| @@ -18,12 +18,14 @@ struct header_iter { | |||
| 18 | 18 | ||
| 19 | static struct trace_array *mmio_trace_array; | 19 | static struct trace_array *mmio_trace_array; |
| 20 | static bool overrun_detected; | 20 | static bool overrun_detected; |
| 21 | static unsigned long prev_overruns; | ||
| 21 | 22 | ||
| 22 | static void mmio_reset_data(struct trace_array *tr) | 23 | static void mmio_reset_data(struct trace_array *tr) |
| 23 | { | 24 | { |
| 24 | int cpu; | 25 | int cpu; |
| 25 | 26 | ||
| 26 | overrun_detected = false; | 27 | overrun_detected = false; |
| 28 | prev_overruns = 0; | ||
| 27 | tr->time_start = ftrace_now(tr->cpu); | 29 | tr->time_start = ftrace_now(tr->cpu); |
| 28 | 30 | ||
| 29 | for_each_online_cpu(cpu) | 31 | for_each_online_cpu(cpu) |
| @@ -128,16 +130,12 @@ static void mmio_close(struct trace_iterator *iter) | |||
| 128 | 130 | ||
| 129 | static unsigned long count_overruns(struct trace_iterator *iter) | 131 | static unsigned long count_overruns(struct trace_iterator *iter) |
| 130 | { | 132 | { |
| 131 | int cpu; | ||
| 132 | unsigned long cnt = 0; | 133 | unsigned long cnt = 0; |
| 133 | /* FIXME: */ | 134 | unsigned long over = ring_buffer_overruns(iter->tr->buffer); |
| 134 | #if 0 | 135 | |
| 135 | for_each_online_cpu(cpu) { | 136 | if (over > prev_overruns) |
| 136 | cnt += iter->overrun[cpu]; | 137 | cnt = over - prev_overruns; |
| 137 | iter->overrun[cpu] = 0; | 138 | prev_overruns = over; |
| 138 | } | ||
| 139 | #endif | ||
| 140 | (void)cpu; | ||
| 141 | return cnt; | 139 | return cnt; |
| 142 | } | 140 | } |
| 143 | 141 | ||
diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c index be682b62fe58..3bdb44bde4b7 100644 --- a/kernel/trace/trace_stack.c +++ b/kernel/trace/trace_stack.c | |||
| @@ -184,11 +184,16 @@ static struct file_operations stack_max_size_fops = { | |||
| 184 | static void * | 184 | static void * |
| 185 | t_next(struct seq_file *m, void *v, loff_t *pos) | 185 | t_next(struct seq_file *m, void *v, loff_t *pos) |
| 186 | { | 186 | { |
| 187 | long i = (long)m->private; | 187 | long i; |
| 188 | 188 | ||
| 189 | (*pos)++; | 189 | (*pos)++; |
| 190 | 190 | ||
| 191 | i++; | 191 | if (v == SEQ_START_TOKEN) |
| 192 | i = 0; | ||
| 193 | else { | ||
| 194 | i = *(long *)v; | ||
| 195 | i++; | ||
| 196 | } | ||
| 192 | 197 | ||
| 193 | if (i >= max_stack_trace.nr_entries || | 198 | if (i >= max_stack_trace.nr_entries || |
| 194 | stack_dump_trace[i] == ULONG_MAX) | 199 | stack_dump_trace[i] == ULONG_MAX) |
| @@ -201,12 +206,15 @@ t_next(struct seq_file *m, void *v, loff_t *pos) | |||
| 201 | 206 | ||
| 202 | static void *t_start(struct seq_file *m, loff_t *pos) | 207 | static void *t_start(struct seq_file *m, loff_t *pos) |
| 203 | { | 208 | { |
| 204 | void *t = &m->private; | 209 | void *t = SEQ_START_TOKEN; |
| 205 | loff_t l = 0; | 210 | loff_t l = 0; |
| 206 | 211 | ||
| 207 | local_irq_disable(); | 212 | local_irq_disable(); |
| 208 | __raw_spin_lock(&max_stack_lock); | 213 | __raw_spin_lock(&max_stack_lock); |
| 209 | 214 | ||
| 215 | if (*pos == 0) | ||
| 216 | return SEQ_START_TOKEN; | ||
| 217 | |||
| 210 | for (; t && l < *pos; t = t_next(m, t, &l)) | 218 | for (; t && l < *pos; t = t_next(m, t, &l)) |
| 211 | ; | 219 | ; |
| 212 | 220 | ||
| @@ -235,10 +243,10 @@ static int trace_lookup_stack(struct seq_file *m, long i) | |||
| 235 | 243 | ||
| 236 | static int t_show(struct seq_file *m, void *v) | 244 | static int t_show(struct seq_file *m, void *v) |
| 237 | { | 245 | { |
| 238 | long i = *(long *)v; | 246 | long i; |
| 239 | int size; | 247 | int size; |
| 240 | 248 | ||
| 241 | if (i < 0) { | 249 | if (v == SEQ_START_TOKEN) { |
| 242 | seq_printf(m, " Depth Size Location" | 250 | seq_printf(m, " Depth Size Location" |
| 243 | " (%d entries)\n" | 251 | " (%d entries)\n" |
| 244 | " ----- ---- --------\n", | 252 | " ----- ---- --------\n", |
| @@ -246,6 +254,8 @@ static int t_show(struct seq_file *m, void *v) | |||
| 246 | return 0; | 254 | return 0; |
| 247 | } | 255 | } |
| 248 | 256 | ||
| 257 | i = *(long *)v; | ||
| 258 | |||
| 249 | if (i >= max_stack_trace.nr_entries || | 259 | if (i >= max_stack_trace.nr_entries || |
| 250 | stack_dump_trace[i] == ULONG_MAX) | 260 | stack_dump_trace[i] == ULONG_MAX) |
| 251 | return 0; | 261 | return 0; |
| @@ -275,10 +285,6 @@ static int stack_trace_open(struct inode *inode, struct file *file) | |||
| 275 | int ret; | 285 | int ret; |
| 276 | 286 | ||
| 277 | ret = seq_open(file, &stack_trace_seq_ops); | 287 | ret = seq_open(file, &stack_trace_seq_ops); |
| 278 | if (!ret) { | ||
| 279 | struct seq_file *m = file->private_data; | ||
| 280 | m->private = (void *)-1; | ||
| 281 | } | ||
| 282 | 288 | ||
| 283 | return ret; | 289 | return ret; |
| 284 | } | 290 | } |
