diff options
-rw-r--r-- | kernel/lockdep.c | 12 |
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 | ||