aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/lockdep.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/kernel/lockdep.c b/kernel/lockdep.c
index 1cedb00e3e7a..2f0970297e30 100644
--- a/kernel/lockdep.c
+++ b/kernel/lockdep.c
@@ -367,11 +367,21 @@ static int save_trace(struct stack_trace *trace)
367 367
368 save_stack_trace(trace); 368 save_stack_trace(trace);
369 369
370 /*
371 * Some daft arches put -1 at the end to indicate its a full trace.
372 *
373 * <rant> this is buggy anyway, since it takes a whole extra entry so a
374 * complete trace that maxes out the entries provided will be reported
375 * as incomplete, friggin useless </rant>
376 */
377 if (trace->entries[trace->nr_entries-1] == ULONG_MAX)
378 trace->nr_entries--;
379
370 trace->max_entries = trace->nr_entries; 380 trace->max_entries = trace->nr_entries;
371 381
372 nr_stack_trace_entries += trace->nr_entries; 382 nr_stack_trace_entries += trace->nr_entries;
373 383
374 if (nr_stack_trace_entries == MAX_STACK_TRACE_ENTRIES) { 384 if (nr_stack_trace_entries >= MAX_STACK_TRACE_ENTRIES-1) {
375 if (!debug_locks_off_graph_unlock()) 385 if (!debug_locks_off_graph_unlock())
376 return 0; 386 return 0;
377 387