diff options
Diffstat (limited to 'kernel/lockdep.c')
| -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)  	save_stack_trace(trace); +	/* +	 * Some daft arches put -1 at the end to indicate its a full trace. +	 * +	 * <rant> this is buggy anyway, since it takes a whole extra entry so a +	 * complete trace that maxes out the entries provided will be reported +	 * as incomplete, friggin useless </rant> +	 */ +	if (trace->entries[trace->nr_entries-1] == ULONG_MAX) +		trace->nr_entries--; +  	trace->max_entries = trace->nr_entries;  	nr_stack_trace_entries += trace->nr_entries; -	if (nr_stack_trace_entries == MAX_STACK_TRACE_ENTRIES) { +	if (nr_stack_trace_entries >= MAX_STACK_TRACE_ENTRIES-1) {  		if (!debug_locks_off_graph_unlock())  			return 0;  | 
