lockdep.c 101.4 KB
Newer Older
I
Ingo Molnar 已提交
1 2 3 4 5 6 7
/*
 * kernel/lockdep.c
 *
 * Runtime locking correctness validator
 *
 * Started by Ingo Molnar:
 *
P
Peter Zijlstra 已提交
8 9
 *  Copyright (C) 2006,2007 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
 *  Copyright (C) 2007 Red Hat, Inc., Peter Zijlstra <pzijlstr@redhat.com>
I
Ingo Molnar 已提交
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
 *
 * this code maps all the lock dependencies as they occur in a live kernel
 * and will warn about the following classes of locking bugs:
 *
 * - lock inversion scenarios
 * - circular lock dependencies
 * - hardirq/softirq safe/unsafe locking bugs
 *
 * Bugs are reported even if the current locking scenario does not cause
 * any deadlock at this point.
 *
 * I.e. if anytime in the past two locks were taken in a different order,
 * even if it happened for another task, even if those were different
 * locks (but of the same class as this lock), this code will detect it.
 *
 * Thanks to Arjan van de Ven for coming up with the initial idea of
 * mapping lock dependencies runtime.
 */
28
#define DISABLE_BRANCH_PROFILING
I
Ingo Molnar 已提交
29 30 31 32 33 34 35 36 37 38 39 40
#include <linux/mutex.h>
#include <linux/sched.h>
#include <linux/delay.h>
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/spinlock.h>
#include <linux/kallsyms.h>
#include <linux/interrupt.h>
#include <linux/stacktrace.h>
#include <linux/debug_locks.h>
#include <linux/irqflags.h>
41
#include <linux/utsname.h>
P
Peter Zijlstra 已提交
42
#include <linux/hash.h>
43
#include <linux/ftrace.h>
P
Peter Zijlstra 已提交
44
#include <linux/stringify.h>
45
#include <linux/bitops.h>
46
#include <linux/gfp.h>
P
Peter Zijlstra 已提交
47

I
Ingo Molnar 已提交
48 49 50 51
#include <asm/sections.h>

#include "lockdep_internals.h"

52
#define CREATE_TRACE_POINTS
53
#include <trace/events/lock.h>
54

P
Peter Zijlstra 已提交
55 56 57 58 59 60 61 62 63 64 65 66 67 68
#ifdef CONFIG_PROVE_LOCKING
int prove_locking = 1;
module_param(prove_locking, int, 0644);
#else
#define prove_locking 0
#endif

#ifdef CONFIG_LOCK_STAT
int lock_stat = 1;
module_param(lock_stat, int, 0644);
#else
#define lock_stat 0
#endif

I
Ingo Molnar 已提交
69
/*
70 71
 * lockdep_lock: protects the lockdep graph, the hashes and the
 *               class/list/hash allocators.
I
Ingo Molnar 已提交
72 73 74
 *
 * This is one of the rare exceptions where it's justified
 * to use a raw spinlock - we really dont want the spinlock
75
 * code to recurse back into the lockdep code...
I
Ingo Molnar 已提交
76
 */
77
static arch_spinlock_t lockdep_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
78 79 80

static int graph_lock(void)
{
81
	arch_spin_lock(&lockdep_lock);
82 83 84 85 86 87 88
	/*
	 * Make sure that if another CPU detected a bug while
	 * walking the graph we dont change it (while the other
	 * CPU is busy printing out stuff with the graph lock
	 * dropped already)
	 */
	if (!debug_locks) {
89
		arch_spin_unlock(&lockdep_lock);
90 91
		return 0;
	}
92 93
	/* prevent any recursions within lockdep from causing deadlocks */
	current->lockdep_recursion++;
94 95 96 97 98
	return 1;
}

static inline int graph_unlock(void)
{
P
Peter Zijlstra 已提交
99 100 101 102 103
	if (debug_locks && !arch_spin_is_locked(&lockdep_lock)) {
		/*
		 * The lockdep graph lock isn't locked while we expect it to
		 * be, we're confused now, bye!
		 */
104
		return DEBUG_LOCKS_WARN_ON(1);
P
Peter Zijlstra 已提交
105
	}
106

107
	current->lockdep_recursion--;
108
	arch_spin_unlock(&lockdep_lock);
109 110 111 112 113 114 115 116 117 118 119
	return 0;
}

/*
 * Turn lock debugging off and return with 0 if it was off already,
 * and also release the graph lock:
 */
static inline int debug_locks_off_graph_unlock(void)
{
	int ret = debug_locks_off();

120
	arch_spin_unlock(&lockdep_lock);
121 122 123

	return ret;
}
I
Ingo Molnar 已提交
124 125 126 127

static int lockdep_initialized;

unsigned long nr_list_entries;
P
Peter Zijlstra 已提交
128
static struct lock_list list_entries[MAX_LOCKDEP_ENTRIES];
I
Ingo Molnar 已提交
129 130 131 132 133 134 135 136 137 138

/*
 * All data structures here are protected by the global debug_lock.
 *
 * Mutex key structs only get allocated, once during bootup, and never
 * get freed - this significantly simplifies the debugging code.
 */
unsigned long nr_lock_classes;
static struct lock_class lock_classes[MAX_LOCKDEP_KEYS];

D
Dave Jones 已提交
139 140 141
static inline struct lock_class *hlock_class(struct held_lock *hlock)
{
	if (!hlock->class_idx) {
P
Peter Zijlstra 已提交
142 143 144
		/*
		 * Someone passed in garbage, we give up.
		 */
D
Dave Jones 已提交
145 146 147 148 149 150
		DEBUG_LOCKS_WARN_ON(1);
		return NULL;
	}
	return lock_classes + hlock->class_idx - 1;
}

P
Peter Zijlstra 已提交
151
#ifdef CONFIG_LOCK_STAT
152 153
static DEFINE_PER_CPU(struct lock_class_stats[MAX_LOCKDEP_KEYS],
		      cpu_lock_stats);
P
Peter Zijlstra 已提交
154

155 156
static inline u64 lockstat_clock(void)
{
157
	return local_clock();
158 159
}

P
Peter Zijlstra 已提交
160
static int lock_point(unsigned long points[], unsigned long ip)
P
Peter Zijlstra 已提交
161 162 163
{
	int i;

P
Peter Zijlstra 已提交
164 165 166
	for (i = 0; i < LOCKSTAT_POINTS; i++) {
		if (points[i] == 0) {
			points[i] = ip;
P
Peter Zijlstra 已提交
167 168
			break;
		}
P
Peter Zijlstra 已提交
169
		if (points[i] == ip)
P
Peter Zijlstra 已提交
170 171 172 173 174 175
			break;
	}

	return i;
}

176
static void lock_time_inc(struct lock_time *lt, u64 time)
P
Peter Zijlstra 已提交
177 178 179 180
{
	if (time > lt->max)
		lt->max = time;

181
	if (time < lt->min || !lt->nr)
P
Peter Zijlstra 已提交
182 183 184 185 186 187
		lt->min = time;

	lt->total += time;
	lt->nr++;
}

188 189
static inline void lock_time_add(struct lock_time *src, struct lock_time *dst)
{
190 191 192 193 194 195 196 197 198
	if (!src->nr)
		return;

	if (src->max > dst->max)
		dst->max = src->max;

	if (src->min < dst->min || !dst->nr)
		dst->min = src->min;

199 200 201 202 203 204 205 206 207 208 209 210
	dst->total += src->total;
	dst->nr += src->nr;
}

struct lock_class_stats lock_stats(struct lock_class *class)
{
	struct lock_class_stats stats;
	int cpu, i;

	memset(&stats, 0, sizeof(struct lock_class_stats));
	for_each_possible_cpu(cpu) {
		struct lock_class_stats *pcs =
211
			&per_cpu(cpu_lock_stats, cpu)[class - lock_classes];
212 213 214 215

		for (i = 0; i < ARRAY_SIZE(stats.contention_point); i++)
			stats.contention_point[i] += pcs->contention_point[i];

P
Peter Zijlstra 已提交
216 217 218
		for (i = 0; i < ARRAY_SIZE(stats.contending_point); i++)
			stats.contending_point[i] += pcs->contending_point[i];

219 220 221 222 223
		lock_time_add(&pcs->read_waittime, &stats.read_waittime);
		lock_time_add(&pcs->write_waittime, &stats.write_waittime);

		lock_time_add(&pcs->read_holdtime, &stats.read_holdtime);
		lock_time_add(&pcs->write_holdtime, &stats.write_holdtime);
P
Peter Zijlstra 已提交
224 225 226

		for (i = 0; i < ARRAY_SIZE(stats.bounces); i++)
			stats.bounces[i] += pcs->bounces[i];
227 228 229 230 231 232 233 234 235 236 237
	}

	return stats;
}

void clear_lock_stats(struct lock_class *class)
{
	int cpu;

	for_each_possible_cpu(cpu) {
		struct lock_class_stats *cpu_stats =
238
			&per_cpu(cpu_lock_stats, cpu)[class - lock_classes];
239 240 241 242

		memset(cpu_stats, 0, sizeof(struct lock_class_stats));
	}
	memset(class->contention_point, 0, sizeof(class->contention_point));
P
Peter Zijlstra 已提交
243
	memset(class->contending_point, 0, sizeof(class->contending_point));
244 245
}

P
Peter Zijlstra 已提交
246 247
static struct lock_class_stats *get_lock_stats(struct lock_class *class)
{
248
	return &get_cpu_var(cpu_lock_stats)[class - lock_classes];
P
Peter Zijlstra 已提交
249 250 251 252
}

static void put_lock_stats(struct lock_class_stats *stats)
{
253
	put_cpu_var(cpu_lock_stats);
P
Peter Zijlstra 已提交
254 255 256 257 258
}

static void lock_release_holdtime(struct held_lock *hlock)
{
	struct lock_class_stats *stats;
259
	u64 holdtime;
P
Peter Zijlstra 已提交
260 261 262 263

	if (!lock_stat)
		return;

264
	holdtime = lockstat_clock() - hlock->holdtime_stamp;
P
Peter Zijlstra 已提交
265

D
Dave Jones 已提交
266
	stats = get_lock_stats(hlock_class(hlock));
P
Peter Zijlstra 已提交
267 268 269 270 271 272 273 274 275 276 277 278
	if (hlock->read)
		lock_time_inc(&stats->read_holdtime, holdtime);
	else
		lock_time_inc(&stats->write_holdtime, holdtime);
	put_lock_stats(stats);
}
#else
static inline void lock_release_holdtime(struct held_lock *hlock)
{
}
#endif

I
Ingo Molnar 已提交
279 280 281 282 283 284 285 286 287 288 289 290
/*
 * We keep a global list of all lock classes. The list only grows,
 * never shrinks. The list is only accessed with the lockdep
 * spinlock lock held.
 */
LIST_HEAD(all_lock_classes);

/*
 * The lockdep classes are in a hash-table as well, for fast lookup:
 */
#define CLASSHASH_BITS		(MAX_LOCKDEP_KEYS_BITS - 1)
#define CLASSHASH_SIZE		(1UL << CLASSHASH_BITS)
P
Peter Zijlstra 已提交
291
#define __classhashfn(key)	hash_long((unsigned long)key, CLASSHASH_BITS)
I
Ingo Molnar 已提交
292 293 294 295 296 297 298 299 300 301
#define classhashentry(key)	(classhash_table + __classhashfn((key)))

static struct list_head classhash_table[CLASSHASH_SIZE];

/*
 * We put the lock dependency chains into a hash-table as well, to cache
 * their existence:
 */
#define CHAINHASH_BITS		(MAX_LOCKDEP_CHAINS_BITS-1)
#define CHAINHASH_SIZE		(1UL << CHAINHASH_BITS)
P
Peter Zijlstra 已提交
302
#define __chainhashfn(chain)	hash_long(chain, CHAINHASH_BITS)
I
Ingo Molnar 已提交
303 304 305 306 307 308 309 310 311 312 313
#define chainhashentry(chain)	(chainhash_table + __chainhashfn((chain)))

static struct list_head chainhash_table[CHAINHASH_SIZE];

/*
 * The hash key of the lock dependency chains is a hash itself too:
 * it's a hash of all locks taken up to that lock, including that lock.
 * It's a 64-bit hash, because it's important for the keys to be
 * unique.
 */
#define iterate_chain_key(key1, key2) \
314 315
	(((key1) << MAX_LOCKDEP_KEYS_BITS) ^ \
	((key1) >> (64-MAX_LOCKDEP_KEYS_BITS)) ^ \
I
Ingo Molnar 已提交
316 317
	(key2))

318
void lockdep_off(void)
I
Ingo Molnar 已提交
319 320 321 322 323
{
	current->lockdep_recursion++;
}
EXPORT_SYMBOL(lockdep_off);

324
void lockdep_on(void)
I
Ingo Molnar 已提交
325 326 327 328 329 330 331 332 333 334
{
	current->lockdep_recursion--;
}
EXPORT_SYMBOL(lockdep_on);

/*
 * Debugging switches:
 */

#define VERBOSE			0
335
#define VERY_VERBOSE		0
I
Ingo Molnar 已提交
336 337 338 339

#if VERBOSE
# define HARDIRQ_VERBOSE	1
# define SOFTIRQ_VERBOSE	1
340
# define RECLAIM_VERBOSE	1
I
Ingo Molnar 已提交
341 342 343
#else
# define HARDIRQ_VERBOSE	0
# define SOFTIRQ_VERBOSE	0
344
# define RECLAIM_VERBOSE	0
I
Ingo Molnar 已提交
345 346
#endif

347
#if VERBOSE || HARDIRQ_VERBOSE || SOFTIRQ_VERBOSE || RECLAIM_VERBOSE
I
Ingo Molnar 已提交
348 349 350 351 352
/*
 * Quick filtering for interesting events:
 */
static int class_filter(struct lock_class *class)
{
A
Andi Kleen 已提交
353 354
#if 0
	/* Example */
I
Ingo Molnar 已提交
355
	if (class->name_version == 1 &&
A
Andi Kleen 已提交
356
			!strcmp(class->name, "lockname"))
I
Ingo Molnar 已提交
357 358
		return 1;
	if (class->name_version == 1 &&
A
Andi Kleen 已提交
359
			!strcmp(class->name, "&struct->lockfield"))
I
Ingo Molnar 已提交
360
		return 1;
A
Andi Kleen 已提交
361
#endif
362 363
	/* Filter everything else. 1 would be to allow everything else */
	return 0;
I
Ingo Molnar 已提交
364 365 366 367 368 369 370 371 372 373 374 375 376
}
#endif

static int verbose(struct lock_class *class)
{
#if VERBOSE
	return class_filter(class);
#endif
	return 0;
}

/*
 * Stack-trace: tightly packed array of stack backtrace
377
 * addresses. Protected by the graph_lock.
I
Ingo Molnar 已提交
378 379 380 381 382 383 384 385 386 387
 */
unsigned long nr_stack_trace_entries;
static unsigned long stack_trace[MAX_STACK_TRACE_ENTRIES];

static int save_trace(struct stack_trace *trace)
{
	trace->nr_entries = 0;
	trace->max_entries = MAX_STACK_TRACE_ENTRIES - nr_stack_trace_entries;
	trace->entries = stack_trace + nr_stack_trace_entries;

388 389
	trace->skip = 3;

C
Christoph Hellwig 已提交
390
	save_stack_trace(trace);
I
Ingo Molnar 已提交
391

P
Peter Zijlstra 已提交
392 393 394 395 396 397 398
	/*
	 * 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>
	 */
399 400
	if (trace->nr_entries != 0 &&
	    trace->entries[trace->nr_entries-1] == ULONG_MAX)
P
Peter Zijlstra 已提交
401 402
		trace->nr_entries--;

I
Ingo Molnar 已提交
403 404 405 406
	trace->max_entries = trace->nr_entries;

	nr_stack_trace_entries += trace->nr_entries;

P
Peter Zijlstra 已提交
407
	if (nr_stack_trace_entries >= MAX_STACK_TRACE_ENTRIES-1) {
408 409 410 411 412 413 414
		if (!debug_locks_off_graph_unlock())
			return 0;

		printk("BUG: MAX_STACK_TRACE_ENTRIES too low!\n");
		printk("turning off the locking correctness validator.\n");
		dump_stack();

I
Ingo Molnar 已提交
415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432
		return 0;
	}

	return 1;
}

unsigned int nr_hardirq_chains;
unsigned int nr_softirq_chains;
unsigned int nr_process_chains;
unsigned int max_lockdep_depth;

#ifdef CONFIG_DEBUG_LOCKDEP
/*
 * We cannot printk in early bootup code. Not even early_printk()
 * might work. So we mark any initialization errors and printk
 * about it later on, in lockdep_info().
 */
static int lockdep_init_error;
433 434 435 436 437
static unsigned long lockdep_init_trace_data[20];
static struct stack_trace lockdep_init_trace = {
	.max_entries = ARRAY_SIZE(lockdep_init_trace_data),
	.entries = lockdep_init_trace_data,
};
I
Ingo Molnar 已提交
438 439 440 441

/*
 * Various lockdep statistics:
 */
442
DEFINE_PER_CPU(struct lockdep_stats, lockdep_stats);
I
Ingo Molnar 已提交
443 444 445 446 447 448
#endif

/*
 * Locking printouts:
 */

P
Peter Zijlstra 已提交
449
#define __USAGE(__STATE)						\
P
Peter Zijlstra 已提交
450 451 452 453
	[LOCK_USED_IN_##__STATE] = "IN-"__stringify(__STATE)"-W",	\
	[LOCK_ENABLED_##__STATE] = __stringify(__STATE)"-ON-W",		\
	[LOCK_USED_IN_##__STATE##_READ] = "IN-"__stringify(__STATE)"-R",\
	[LOCK_ENABLED_##__STATE##_READ] = __stringify(__STATE)"-ON-R",
P
Peter Zijlstra 已提交
454

I
Ingo Molnar 已提交
455 456
static const char *usage_str[] =
{
P
Peter Zijlstra 已提交
457 458 459 460
#define LOCKDEP_STATE(__STATE) __USAGE(__STATE)
#include "lockdep_states.h"
#undef LOCKDEP_STATE
	[LOCK_USED] = "INITIAL USE",
I
Ingo Molnar 已提交
461 462 463 464
};

const char * __get_key_name(struct lockdep_subclass_key *key, char *str)
{
A
Alexey Dobriyan 已提交
465
	return kallsyms_lookup((unsigned long)key, NULL, NULL, NULL, str);
I
Ingo Molnar 已提交
466 467
}

468
static inline unsigned long lock_flag(enum lock_usage_bit bit)
I
Ingo Molnar 已提交
469
{
470 471
	return 1UL << bit;
}
I
Ingo Molnar 已提交
472

473 474 475 476 477 478 479 480 481 482
static char get_usage_char(struct lock_class *class, enum lock_usage_bit bit)
{
	char c = '.';

	if (class->usage_mask & lock_flag(bit + 2))
		c = '+';
	if (class->usage_mask & lock_flag(bit)) {
		c = '-';
		if (class->usage_mask & lock_flag(bit + 2))
			c = '?';
I
Ingo Molnar 已提交
483 484
	}

485 486
	return c;
}
487

P
Peter Zijlstra 已提交
488
void get_usage_chars(struct lock_class *class, char usage[LOCK_USAGE_CHARS])
489
{
P
Peter Zijlstra 已提交
490
	int i = 0;
491

P
Peter Zijlstra 已提交
492 493 494 495 496 497 498
#define LOCKDEP_STATE(__STATE) 						\
	usage[i++] = get_usage_char(class, LOCK_USED_IN_##__STATE);	\
	usage[i++] = get_usage_char(class, LOCK_USED_IN_##__STATE##_READ);
#include "lockdep_states.h"
#undef LOCKDEP_STATE

	usage[i] = '\0';
I
Ingo Molnar 已提交
499 500
}

501 502 503 504 505 506 507 508 509 510 511 512
static int __print_lock_name(struct lock_class *class)
{
	char str[KSYM_NAME_LEN];
	const char *name;

	name = class->name;
	if (!name)
		name = __get_key_name(class->key, str);

	return printk("%s", name);
}

I
Ingo Molnar 已提交
513 514
static void print_lock_name(struct lock_class *class)
{
P
Peter Zijlstra 已提交
515
	char str[KSYM_NAME_LEN], usage[LOCK_USAGE_CHARS];
I
Ingo Molnar 已提交
516 517
	const char *name;

P
Peter Zijlstra 已提交
518
	get_usage_chars(class, usage);
I
Ingo Molnar 已提交
519 520 521 522 523 524 525 526 527 528 529 530

	name = class->name;
	if (!name) {
		name = __get_key_name(class->key, str);
		printk(" (%s", name);
	} else {
		printk(" (%s", name);
		if (class->name_version > 1)
			printk("#%d", class->name_version);
		if (class->subclass)
			printk("/%d", class->subclass);
	}
P
Peter Zijlstra 已提交
531
	printk("){%s}", usage);
I
Ingo Molnar 已提交
532 533 534 535 536
}

static void print_lockdep_cache(struct lockdep_map *lock)
{
	const char *name;
537
	char str[KSYM_NAME_LEN];
I
Ingo Molnar 已提交
538 539 540 541 542 543 544 545 546 547

	name = lock->name;
	if (!name)
		name = __get_key_name(lock->key->subkeys, str);

	printk("%s", name);
}

static void print_lock(struct held_lock *hlock)
{
D
Dave Jones 已提交
548
	print_lock_name(hlock_class(hlock));
I
Ingo Molnar 已提交
549 550 551 552 553 554 555 556 557
	printk(", at: ");
	print_ip_sym(hlock->acquire_ip);
}

static void lockdep_print_held_locks(struct task_struct *curr)
{
	int i, depth = curr->lockdep_depth;

	if (!depth) {
558
		printk("no locks held by %s/%d.\n", curr->comm, task_pid_nr(curr));
I
Ingo Molnar 已提交
559 560 561
		return;
	}
	printk("%d lock%s held by %s/%d:\n",
562
		depth, depth > 1 ? "s" : "", curr->comm, task_pid_nr(curr));
I
Ingo Molnar 已提交
563 564 565 566 567 568 569

	for (i = 0; i < depth; i++) {
		printk(" #%d: ", i);
		print_lock(curr->held_locks + i);
	}
}

P
Peter Zijlstra 已提交
570 571 572 573 574 575 576 577 578 579 580 581 582 583 584
static void print_kernel_version(void)
{
	printk("%s %.*s\n", init_utsname()->release,
		(int)strcspn(init_utsname()->version, " "),
		init_utsname()->version);
}

static int very_verbose(struct lock_class *class)
{
#if VERY_VERBOSE
	return class_filter(class);
#endif
	return 0;
}

I
Ingo Molnar 已提交
585
/*
P
Peter Zijlstra 已提交
586
 * Is this the address of a static object:
I
Ingo Molnar 已提交
587
 */
P
Peter Zijlstra 已提交
588
static int static_obj(void *obj)
I
Ingo Molnar 已提交
589
{
P
Peter Zijlstra 已提交
590 591 592 593
	unsigned long start = (unsigned long) &_stext,
		      end   = (unsigned long) &_end,
		      addr  = (unsigned long) obj;

I
Ingo Molnar 已提交
594
	/*
P
Peter Zijlstra 已提交
595
	 * static variable?
I
Ingo Molnar 已提交
596
	 */
P
Peter Zijlstra 已提交
597 598
	if ((addr >= start) && (addr < end))
		return 1;
I
Ingo Molnar 已提交
599

600 601 602
	if (arch_is_kernel_data(addr))
		return 1;

I
Ingo Molnar 已提交
603
	/*
604
	 * in-kernel percpu var?
I
Ingo Molnar 已提交
605
	 */
606 607
	if (is_kernel_percpu_address(addr))
		return 1;
I
Ingo Molnar 已提交
608

P
Peter Zijlstra 已提交
609
	/*
610
	 * module static or percpu var?
P
Peter Zijlstra 已提交
611
	 */
612
	return is_module_address(addr) || is_module_percpu_address(addr);
613 614
}

I
Ingo Molnar 已提交
615
/*
P
Peter Zijlstra 已提交
616 617
 * To make lock name printouts unique, we calculate a unique
 * class->name_version generation counter:
I
Ingo Molnar 已提交
618
 */
P
Peter Zijlstra 已提交
619
static int count_matching_names(struct lock_class *new_class)
I
Ingo Molnar 已提交
620
{
P
Peter Zijlstra 已提交
621 622
	struct lock_class *class;
	int count = 0;
I
Ingo Molnar 已提交
623

P
Peter Zijlstra 已提交
624
	if (!new_class->name)
I
Ingo Molnar 已提交
625 626
		return 0;

P
Peter Zijlstra 已提交
627 628 629 630 631 632
	list_for_each_entry(class, &all_lock_classes, lock_entry) {
		if (new_class->key - new_class->subclass == class->key)
			return class->name_version;
		if (class->name && !strcmp(class->name, new_class->name))
			count = max(count, class->name_version);
	}
I
Ingo Molnar 已提交
633

P
Peter Zijlstra 已提交
634
	return count + 1;
I
Ingo Molnar 已提交
635 636
}

P
Peter Zijlstra 已提交
637 638 639 640 641 642 643
/*
 * Register a lock's class in the hash-table, if the class is not present
 * yet. Otherwise we look it up. We cache the result in the lock object
 * itself, so actual lookup of the hash should be once per lock object.
 */
static inline struct lock_class *
look_up_lock_class(struct lockdep_map *lock, unsigned int subclass)
I
Ingo Molnar 已提交
644
{
P
Peter Zijlstra 已提交
645 646 647
	struct lockdep_subclass_key *key;
	struct list_head *hash_head;
	struct lock_class *class;
I
Ingo Molnar 已提交
648

P
Peter Zijlstra 已提交
649 650 651 652 653 654 655 656 657
#ifdef CONFIG_DEBUG_LOCKDEP
	/*
	 * If the architecture calls into lockdep before initializing
	 * the hashes then we'll warn about it later. (we cannot printk
	 * right now)
	 */
	if (unlikely(!lockdep_initialized)) {
		lockdep_init();
		lockdep_init_error = 1;
658
		save_stack_trace(&lockdep_init_trace);
P
Peter Zijlstra 已提交
659 660
	}
#endif
I
Ingo Molnar 已提交
661

662 663 664 665 666 667 668 669 670 671
	if (unlikely(subclass >= MAX_LOCKDEP_SUBCLASSES)) {
		debug_locks_off();
		printk(KERN_ERR
			"BUG: looking up invalid subclass: %u\n", subclass);
		printk(KERN_ERR
			"turning off the locking correctness validator.\n");
		dump_stack();
		return NULL;
	}

P
Peter Zijlstra 已提交
672 673 674 675 676 677
	/*
	 * Static locks do not have their class-keys yet - for them the key
	 * is the lock object itself:
	 */
	if (unlikely(!lock->key))
		lock->key = (void *)lock;
I
Ingo Molnar 已提交
678

P
Peter Zijlstra 已提交
679 680 681 682 683 684
	/*
	 * NOTE: the class-key must be unique. For dynamic locks, a static
	 * lock_class_key variable is passed in through the mutex_init()
	 * (or spin_lock_init()) call - which acts as the key. For static
	 * locks we use the lock object itself as the key.
	 */
P
Peter Zijlstra 已提交
685 686
	BUILD_BUG_ON(sizeof(struct lock_class_key) >
			sizeof(struct lockdep_map));
I
Ingo Molnar 已提交
687

P
Peter Zijlstra 已提交
688
	key = lock->key->subkeys + subclass;
689

P
Peter Zijlstra 已提交
690
	hash_head = classhashentry(key);
691

P
Peter Zijlstra 已提交
692 693 694 695
	/*
	 * We can walk the hash lockfree, because the hash only
	 * grows, and we are careful when adding entries to the end:
	 */
P
Peter Zijlstra 已提交
696 697
	list_for_each_entry(class, hash_head, hash_entry) {
		if (class->key == key) {
P
Peter Zijlstra 已提交
698 699 700 701
			/*
			 * Huh! same key, different name? Did someone trample
			 * on some memory? We're most confused.
			 */
P
Peter Zijlstra 已提交
702
			WARN_ON_ONCE(class->name != lock->name);
P
Peter Zijlstra 已提交
703
			return class;
P
Peter Zijlstra 已提交
704 705
		}
	}
I
Ingo Molnar 已提交
706

P
Peter Zijlstra 已提交
707
	return NULL;
I
Ingo Molnar 已提交
708 709 710
}

/*
P
Peter Zijlstra 已提交
711 712 713
 * Register a lock's class in the hash-table, if the class is not present
 * yet. Otherwise we look it up. We cache the result in the lock object
 * itself, so actual lookup of the hash should be once per lock object.
I
Ingo Molnar 已提交
714
 */
P
Peter Zijlstra 已提交
715 716
static inline struct lock_class *
register_lock_class(struct lockdep_map *lock, unsigned int subclass, int force)
I
Ingo Molnar 已提交
717
{
P
Peter Zijlstra 已提交
718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767
	struct lockdep_subclass_key *key;
	struct list_head *hash_head;
	struct lock_class *class;
	unsigned long flags;

	class = look_up_lock_class(lock, subclass);
	if (likely(class))
		return class;

	/*
	 * Debug-check: all keys must be persistent!
 	 */
	if (!static_obj(lock->key)) {
		debug_locks_off();
		printk("INFO: trying to register non-static key.\n");
		printk("the code is fine but needs lockdep annotation.\n");
		printk("turning off the locking correctness validator.\n");
		dump_stack();

		return NULL;
	}

	key = lock->key->subkeys + subclass;
	hash_head = classhashentry(key);

	raw_local_irq_save(flags);
	if (!graph_lock()) {
		raw_local_irq_restore(flags);
		return NULL;
	}
	/*
	 * We have to do the hash-walk again, to avoid races
	 * with another CPU:
	 */
	list_for_each_entry(class, hash_head, hash_entry)
		if (class->key == key)
			goto out_unlock_set;
	/*
	 * Allocate a new key from the static array, and add it to
	 * the hash:
	 */
	if (nr_lock_classes >= MAX_LOCKDEP_KEYS) {
		if (!debug_locks_off_graph_unlock()) {
			raw_local_irq_restore(flags);
			return NULL;
		}
		raw_local_irq_restore(flags);

		printk("BUG: MAX_LOCKDEP_KEYS too low!\n");
		printk("turning off the locking correctness validator.\n");
768
		dump_stack();
P
Peter Zijlstra 已提交
769 770 771
		return NULL;
	}
	class = lock_classes + nr_lock_classes++;
772
	debug_atomic_inc(nr_unused_locks);
P
Peter Zijlstra 已提交
773 774 775 776 777 778 779 780 781 782 783 784
	class->key = key;
	class->name = lock->name;
	class->subclass = subclass;
	INIT_LIST_HEAD(&class->lock_entry);
	INIT_LIST_HEAD(&class->locks_before);
	INIT_LIST_HEAD(&class->locks_after);
	class->name_version = count_matching_names(class);
	/*
	 * We use RCU's safe list-add method to make
	 * parallel walking of the hash-list safe:
	 */
	list_add_tail_rcu(&class->hash_entry, hash_head);
785 786 787 788
	/*
	 * Add it to the global list of classes:
	 */
	list_add_tail_rcu(&class->lock_entry, &all_lock_classes);
P
Peter Zijlstra 已提交
789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810

	if (verbose(class)) {
		graph_unlock();
		raw_local_irq_restore(flags);

		printk("\nnew class %p: %s", class->key, class->name);
		if (class->name_version > 1)
			printk("#%d", class->name_version);
		printk("\n");
		dump_stack();

		raw_local_irq_save(flags);
		if (!graph_lock()) {
			raw_local_irq_restore(flags);
			return NULL;
		}
	}
out_unlock_set:
	graph_unlock();
	raw_local_irq_restore(flags);

	if (!subclass || force)
811 812 813
		lock->class_cache[0] = class;
	else if (subclass < NR_LOCKDEP_CACHING_CLASSES)
		lock->class_cache[subclass] = class;
P
Peter Zijlstra 已提交
814

P
Peter Zijlstra 已提交
815 816 817 818
	/*
	 * Hash collision, did we smoke some? We found a class with a matching
	 * hash but the subclass -- which is hashed in -- didn't match.
	 */
P
Peter Zijlstra 已提交
819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837
	if (DEBUG_LOCKS_WARN_ON(class->subclass != subclass))
		return NULL;

	return class;
}

#ifdef CONFIG_PROVE_LOCKING
/*
 * Allocate a lockdep entry. (assumes the graph_lock held, returns
 * with NULL on failure)
 */
static struct lock_list *alloc_list_entry(void)
{
	if (nr_list_entries >= MAX_LOCKDEP_ENTRIES) {
		if (!debug_locks_off_graph_unlock())
			return NULL;

		printk("BUG: MAX_LOCKDEP_ENTRIES too low!\n");
		printk("turning off the locking correctness validator.\n");
838
		dump_stack();
P
Peter Zijlstra 已提交
839 840 841 842 843 844 845 846 847
		return NULL;
	}
	return list_entries + nr_list_entries++;
}

/*
 * Add a new dependency to the head of the list:
 */
static int add_lock_to_list(struct lock_class *class, struct lock_class *this,
Y
Yong Zhang 已提交
848 849
			    struct list_head *head, unsigned long ip,
			    int distance, struct stack_trace *trace)
P
Peter Zijlstra 已提交
850 851 852 853 854 855 856 857 858 859
{
	struct lock_list *entry;
	/*
	 * Lock not present yet - get a new dependency struct and
	 * add it to the list:
	 */
	entry = alloc_list_entry();
	if (!entry)
		return 0;

860 861
	entry->class = this;
	entry->distance = distance;
Y
Yong Zhang 已提交
862
	entry->trace = *trace;
P
Peter Zijlstra 已提交
863 864 865 866 867 868 869 870 871 872 873 874
	/*
	 * Since we never remove from the dependency list, the list can
	 * be walked lockless by other CPUs, it's only allocation
	 * that must be protected by the spinlock. But this also means
	 * we must make new entries visible only once writes to the
	 * entry become visible - hence the RCU op:
	 */
	list_add_tail_rcu(&entry->entry, head);

	return 1;
}

P
Peter Zijlstra 已提交
875 876 877
/*
 * For good efficiency of modular, we use power of 2
 */
P
Peter Zijlstra 已提交
878 879 880
#define MAX_CIRCULAR_QUEUE_SIZE		4096UL
#define CQ_MASK				(MAX_CIRCULAR_QUEUE_SIZE-1)

P
Peter Zijlstra 已提交
881 882
/*
 * The circular_queue and helpers is used to implement the
P
Peter Zijlstra 已提交
883 884 885
 * breadth-first search(BFS)algorithem, by which we can build
 * the shortest path from the next lock to be acquired to the
 * previous held lock if there is a circular between them.
P
Peter Zijlstra 已提交
886
 */
P
Peter Zijlstra 已提交
887 888 889 890 891 892 893
struct circular_queue {
	unsigned long element[MAX_CIRCULAR_QUEUE_SIZE];
	unsigned int  front, rear;
};

static struct circular_queue lock_cq;

894
unsigned int max_bfs_queue_depth;
P
Peter Zijlstra 已提交
895

896 897
static unsigned int lockdep_dependency_gen_id;

P
Peter Zijlstra 已提交
898 899 900
static inline void __cq_init(struct circular_queue *cq)
{
	cq->front = cq->rear = 0;
901
	lockdep_dependency_gen_id++;
P
Peter Zijlstra 已提交
902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942
}

static inline int __cq_empty(struct circular_queue *cq)
{
	return (cq->front == cq->rear);
}

static inline int __cq_full(struct circular_queue *cq)
{
	return ((cq->rear + 1) & CQ_MASK) == cq->front;
}

static inline int __cq_enqueue(struct circular_queue *cq, unsigned long elem)
{
	if (__cq_full(cq))
		return -1;

	cq->element[cq->rear] = elem;
	cq->rear = (cq->rear + 1) & CQ_MASK;
	return 0;
}

static inline int __cq_dequeue(struct circular_queue *cq, unsigned long *elem)
{
	if (__cq_empty(cq))
		return -1;

	*elem = cq->element[cq->front];
	cq->front = (cq->front + 1) & CQ_MASK;
	return 0;
}

static inline unsigned int  __cq_get_elem_count(struct circular_queue *cq)
{
	return (cq->rear - cq->front) & CQ_MASK;
}

static inline void mark_lock_accessed(struct lock_list *lock,
					struct lock_list *parent)
{
	unsigned long nr;
P
Peter Zijlstra 已提交
943

P
Peter Zijlstra 已提交
944
	nr = lock - list_entries;
P
Peter Zijlstra 已提交
945
	WARN_ON(nr >= nr_list_entries); /* Out-of-bounds, input fail */
P
Peter Zijlstra 已提交
946
	lock->parent = parent;
947
	lock->class->dep_gen_id = lockdep_dependency_gen_id;
P
Peter Zijlstra 已提交
948 949 950 951 952
}

static inline unsigned long lock_accessed(struct lock_list *lock)
{
	unsigned long nr;
P
Peter Zijlstra 已提交
953

P
Peter Zijlstra 已提交
954
	nr = lock - list_entries;
P
Peter Zijlstra 已提交
955
	WARN_ON(nr >= nr_list_entries); /* Out-of-bounds, input fail */
956
	return lock->class->dep_gen_id == lockdep_dependency_gen_id;
P
Peter Zijlstra 已提交
957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975
}

static inline struct lock_list *get_lock_parent(struct lock_list *child)
{
	return child->parent;
}

static inline int get_lock_depth(struct lock_list *child)
{
	int depth = 0;
	struct lock_list *parent;

	while ((parent = get_lock_parent(child))) {
		child = parent;
		depth++;
	}
	return depth;
}

976
static int __bfs(struct lock_list *source_entry,
P
Peter Zijlstra 已提交
977 978 979 980
		 void *data,
		 int (*match)(struct lock_list *entry, void *data),
		 struct lock_list **target_entry,
		 int forward)
981 982
{
	struct lock_list *entry;
983
	struct list_head *head;
984 985 986
	struct circular_queue *cq = &lock_cq;
	int ret = 1;

987
	if (match(source_entry, data)) {
988 989 990 991 992
		*target_entry = source_entry;
		ret = 0;
		goto exit;
	}

993 994 995 996 997 998 999 1000 1001
	if (forward)
		head = &source_entry->class->locks_after;
	else
		head = &source_entry->class->locks_before;

	if (list_empty(head))
		goto exit;

	__cq_init(cq);
1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020
	__cq_enqueue(cq, (unsigned long)source_entry);

	while (!__cq_empty(cq)) {
		struct lock_list *lock;

		__cq_dequeue(cq, (unsigned long *)&lock);

		if (!lock->class) {
			ret = -2;
			goto exit;
		}

		if (forward)
			head = &lock->class->locks_after;
		else
			head = &lock->class->locks_before;

		list_for_each_entry(entry, head, entry) {
			if (!lock_accessed(entry)) {
1021
				unsigned int cq_depth;
1022
				mark_lock_accessed(entry, lock);
1023
				if (match(entry, data)) {
1024 1025 1026 1027 1028 1029 1030 1031 1032
					*target_entry = entry;
					ret = 0;
					goto exit;
				}

				if (__cq_enqueue(cq, (unsigned long)entry)) {
					ret = -1;
					goto exit;
				}
1033 1034 1035
				cq_depth = __cq_get_elem_count(cq);
				if (max_bfs_queue_depth < cq_depth)
					max_bfs_queue_depth = cq_depth;
1036 1037 1038 1039 1040 1041 1042
			}
		}
	}
exit:
	return ret;
}

1043
static inline int __bfs_forwards(struct lock_list *src_entry,
1044 1045 1046
			void *data,
			int (*match)(struct lock_list *entry, void *data),
			struct lock_list **target_entry)
1047
{
1048
	return __bfs(src_entry, data, match, target_entry, 1);
1049 1050 1051

}

1052
static inline int __bfs_backwards(struct lock_list *src_entry,
1053 1054 1055
			void *data,
			int (*match)(struct lock_list *entry, void *data),
			struct lock_list **target_entry)
1056
{
1057
	return __bfs(src_entry, data, match, target_entry, 0);
1058 1059 1060

}

P
Peter Zijlstra 已提交
1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071
/*
 * Recursive, forwards-direction lock-dependency checking, used for
 * both noncyclic checking and for hardirq-unsafe/softirq-unsafe
 * checking.
 */

/*
 * Print a dependency chain entry (this is only done when a deadlock
 * has been detected):
 */
static noinline int
1072
print_circular_bug_entry(struct lock_list *target, int depth)
P
Peter Zijlstra 已提交
1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083
{
	if (debug_locks_silent)
		return 0;
	printk("\n-> #%u", depth);
	print_lock_name(target->class);
	printk(":\n");
	print_stack_trace(&target->trace, 6);

	return 0;
}

1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133
static void
print_circular_lock_scenario(struct held_lock *src,
			     struct held_lock *tgt,
			     struct lock_list *prt)
{
	struct lock_class *source = hlock_class(src);
	struct lock_class *target = hlock_class(tgt);
	struct lock_class *parent = prt->class;

	/*
	 * A direct locking problem where unsafe_class lock is taken
	 * directly by safe_class lock, then all we need to show
	 * is the deadlock scenario, as it is obvious that the
	 * unsafe lock is taken under the safe lock.
	 *
	 * But if there is a chain instead, where the safe lock takes
	 * an intermediate lock (middle_class) where this lock is
	 * not the same as the safe lock, then the lock chain is
	 * used to describe the problem. Otherwise we would need
	 * to show a different CPU case for each link in the chain
	 * from the safe_class lock to the unsafe_class lock.
	 */
	if (parent != source) {
		printk("Chain exists of:\n  ");
		__print_lock_name(source);
		printk(" --> ");
		__print_lock_name(parent);
		printk(" --> ");
		__print_lock_name(target);
		printk("\n\n");
	}

	printk(" Possible unsafe locking scenario:\n\n");
	printk("       CPU0                    CPU1\n");
	printk("       ----                    ----\n");
	printk("  lock(");
	__print_lock_name(target);
	printk(");\n");
	printk("                               lock(");
	__print_lock_name(parent);
	printk(");\n");
	printk("                               lock(");
	__print_lock_name(target);
	printk(");\n");
	printk("  lock(");
	__print_lock_name(source);
	printk(");\n");
	printk("\n *** DEADLOCK ***\n\n");
}

P
Peter Zijlstra 已提交
1134 1135 1136 1137 1138
/*
 * When a circular dependency is detected, print the
 * header first:
 */
static noinline int
1139 1140 1141
print_circular_bug_header(struct lock_list *entry, unsigned int depth,
			struct held_lock *check_src,
			struct held_lock *check_tgt)
P
Peter Zijlstra 已提交
1142 1143 1144
{
	struct task_struct *curr = current;

1145
	if (debug_locks_silent)
P
Peter Zijlstra 已提交
1146 1147
		return 0;

1148 1149 1150
	printk("\n");
	printk("======================================================\n");
	printk("[ INFO: possible circular locking dependency detected ]\n");
P
Peter Zijlstra 已提交
1151
	print_kernel_version();
1152
	printk("-------------------------------------------------------\n");
P
Peter Zijlstra 已提交
1153
	printk("%s/%d is trying to acquire lock:\n",
1154
		curr->comm, task_pid_nr(curr));
1155
	print_lock(check_src);
P
Peter Zijlstra 已提交
1156
	printk("\nbut task is already holding lock:\n");
1157
	print_lock(check_tgt);
P
Peter Zijlstra 已提交
1158 1159 1160 1161 1162 1163 1164 1165
	printk("\nwhich lock already depends on the new lock.\n\n");
	printk("\nthe existing dependency chain (in reverse order) is:\n");

	print_circular_bug_entry(entry, depth);

	return 0;
}

1166 1167 1168 1169 1170
static inline int class_equal(struct lock_list *entry, void *data)
{
	return entry->class == data;
}

1171 1172 1173 1174
static noinline int print_circular_bug(struct lock_list *this,
				struct lock_list *target,
				struct held_lock *check_src,
				struct held_lock *check_tgt)
P
Peter Zijlstra 已提交
1175 1176
{
	struct task_struct *curr = current;
1177
	struct lock_list *parent;
1178
	struct lock_list *first_parent;
1179
	int depth;
P
Peter Zijlstra 已提交
1180

1181
	if (!debug_locks_off_graph_unlock() || debug_locks_silent)
P
Peter Zijlstra 已提交
1182 1183
		return 0;

1184
	if (!save_trace(&this->trace))
P
Peter Zijlstra 已提交
1185 1186
		return 0;

1187 1188
	depth = get_lock_depth(target);

1189
	print_circular_bug_header(target, depth, check_src, check_tgt);
1190 1191

	parent = get_lock_parent(target);
1192
	first_parent = parent;
1193 1194 1195 1196 1197

	while (parent) {
		print_circular_bug_entry(parent, --depth);
		parent = get_lock_parent(parent);
	}
P
Peter Zijlstra 已提交
1198 1199

	printk("\nother info that might help us debug this:\n\n");
1200 1201 1202
	print_circular_lock_scenario(check_src, check_tgt,
				     first_parent);

P
Peter Zijlstra 已提交
1203 1204 1205 1206 1207 1208 1209 1210
	lockdep_print_held_locks(curr);

	printk("\nstack backtrace:\n");
	dump_stack();

	return 0;
}

1211 1212 1213 1214 1215
static noinline int print_bfs_bug(int ret)
{
	if (!debug_locks_off_graph_unlock())
		return 0;

P
Peter Zijlstra 已提交
1216 1217 1218
	/*
	 * Breadth-first-search failed, graph got corrupted?
	 */
1219 1220 1221 1222 1223
	WARN(1, "lockdep bfs error:%d\n", ret);

	return 0;
}

1224
static int noop_count(struct lock_list *entry, void *data)
1225
{
1226 1227 1228
	(*(unsigned long *)data)++;
	return 0;
}
1229

1230 1231 1232 1233
unsigned long __lockdep_count_forward_deps(struct lock_list *this)
{
	unsigned long  count = 0;
	struct lock_list *uninitialized_var(target_entry);
1234

1235
	__bfs_forwards(this, (void *)&count, noop_count, &target_entry);
1236

1237
	return count;
1238 1239 1240 1241
}
unsigned long lockdep_count_forward_deps(struct lock_class *class)
{
	unsigned long ret, flags;
1242 1243 1244 1245
	struct lock_list this;

	this.parent = NULL;
	this.class = class;
1246 1247

	local_irq_save(flags);
1248
	arch_spin_lock(&lockdep_lock);
1249
	ret = __lockdep_count_forward_deps(&this);
1250
	arch_spin_unlock(&lockdep_lock);
1251 1252 1253 1254 1255
	local_irq_restore(flags);

	return ret;
}

1256
unsigned long __lockdep_count_backward_deps(struct lock_list *this)
1257
{
1258 1259
	unsigned long  count = 0;
	struct lock_list *uninitialized_var(target_entry);
1260

1261
	__bfs_backwards(this, (void *)&count, noop_count, &target_entry);
1262

1263
	return count;
1264 1265 1266 1267 1268
}

unsigned long lockdep_count_backward_deps(struct lock_class *class)
{
	unsigned long ret, flags;
1269 1270 1271 1272
	struct lock_list this;

	this.parent = NULL;
	this.class = class;
1273 1274

	local_irq_save(flags);
1275
	arch_spin_lock(&lockdep_lock);
1276
	ret = __lockdep_count_backward_deps(&this);
1277
	arch_spin_unlock(&lockdep_lock);
1278 1279 1280 1281 1282
	local_irq_restore(flags);

	return ret;
}

P
Peter Zijlstra 已提交
1283 1284 1285 1286 1287
/*
 * Prove that the dependency graph starting at <entry> can not
 * lead to <target>. Print an error and return 0 if it does.
 */
static noinline int
1288 1289
check_noncircular(struct lock_list *root, struct lock_class *target,
		struct lock_list **target_entry)
P
Peter Zijlstra 已提交
1290
{
1291
	int result;
P
Peter Zijlstra 已提交
1292

1293
	debug_atomic_inc(nr_cyclic_checks);
1294

1295
	result = __bfs_forwards(root, target, class_equal, target_entry);
I
Ingo Molnar 已提交
1296

1297 1298
	return result;
}
1299

1300
#if defined(CONFIG_TRACE_IRQFLAGS) && defined(CONFIG_PROVE_LOCKING)
I
Ingo Molnar 已提交
1301 1302 1303 1304 1305 1306
/*
 * Forwards and backwards subgraph searching, for the purposes of
 * proving that two subgraphs can be connected by a new dependency
 * without creating any illegal irq-safe -> irq-unsafe lock dependency.
 */

1307 1308 1309 1310 1311 1312 1313
static inline int usage_match(struct lock_list *entry, void *bit)
{
	return entry->class->usage_mask & (1 << (enum lock_usage_bit)bit);
}



I
Ingo Molnar 已提交
1314 1315
/*
 * Find a node in the forwards-direction dependency sub-graph starting
1316
 * at @root->class that matches @bit.
I
Ingo Molnar 已提交
1317
 *
1318 1319
 * Return 0 if such a node exists in the subgraph, and put that node
 * into *@target_entry.
I
Ingo Molnar 已提交
1320
 *
1321 1322
 * Return 1 otherwise and keep *@target_entry unchanged.
 * Return <0 on error.
I
Ingo Molnar 已提交
1323
 */
1324 1325 1326
static int
find_usage_forwards(struct lock_list *root, enum lock_usage_bit bit,
			struct lock_list **target_entry)
I
Ingo Molnar 已提交
1327
{
1328
	int result;
I
Ingo Molnar 已提交
1329

1330
	debug_atomic_inc(nr_find_usage_forwards_checks);
I
Ingo Molnar 已提交
1331

1332 1333 1334
	result = __bfs_forwards(root, (void *)bit, usage_match, target_entry);

	return result;
I
Ingo Molnar 已提交
1335 1336 1337 1338
}

/*
 * Find a node in the backwards-direction dependency sub-graph starting
1339
 * at @root->class that matches @bit.
I
Ingo Molnar 已提交
1340
 *
1341 1342
 * Return 0 if such a node exists in the subgraph, and put that node
 * into *@target_entry.
I
Ingo Molnar 已提交
1343
 *
1344 1345
 * Return 1 otherwise and keep *@target_entry unchanged.
 * Return <0 on error.
I
Ingo Molnar 已提交
1346
 */
1347 1348 1349
static int
find_usage_backwards(struct lock_list *root, enum lock_usage_bit bit,
			struct lock_list **target_entry)
I
Ingo Molnar 已提交
1350
{
1351
	int result;
I
Ingo Molnar 已提交
1352

1353
	debug_atomic_inc(nr_find_usage_backwards_checks);
I
Ingo Molnar 已提交
1354

1355
	result = __bfs_backwards(root, (void *)bit, usage_match, target_entry);
D
Dave Jones 已提交
1356

1357
	return result;
I
Ingo Molnar 已提交
1358 1359
}

P
Peter Zijlstra 已提交
1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403
static void print_lock_class_header(struct lock_class *class, int depth)
{
	int bit;

	printk("%*s->", depth, "");
	print_lock_name(class);
	printk(" ops: %lu", class->ops);
	printk(" {\n");

	for (bit = 0; bit < LOCK_USAGE_STATES; bit++) {
		if (class->usage_mask & (1 << bit)) {
			int len = depth;

			len += printk("%*s   %s", depth, "", usage_str[bit]);
			len += printk(" at:\n");
			print_stack_trace(class->usage_traces + bit, len);
		}
	}
	printk("%*s }\n", depth, "");

	printk("%*s ... key      at: ",depth,"");
	print_ip_sym((unsigned long)class->key);
}

/*
 * printk the shortest lock dependencies from @start to @end in reverse order:
 */
static void __used
print_shortest_lock_dependencies(struct lock_list *leaf,
				struct lock_list *root)
{
	struct lock_list *entry = leaf;
	int depth;

	/*compute depth from generated tree by BFS*/
	depth = get_lock_depth(leaf);

	do {
		print_lock_class_header(entry->class, depth);
		printk("%*s ... acquired at:\n", depth, "");
		print_stack_trace(&entry->trace, 2);
		printk("\n");

		if (depth == 0 && (entry != root)) {
1404
			printk("lockdep:%s bad path found in chain graph\n", __func__);
P
Peter Zijlstra 已提交
1405 1406 1407 1408 1409 1410 1411 1412 1413
			break;
		}

		entry = get_lock_parent(entry);
		depth--;
	} while (entry && (depth >= 0));

	return;
}
1414

1415 1416 1417
static void
print_irq_lock_scenario(struct lock_list *safe_entry,
			struct lock_list *unsafe_entry,
1418 1419
			struct lock_class *prev_class,
			struct lock_class *next_class)
1420 1421 1422
{
	struct lock_class *safe_class = safe_entry->class;
	struct lock_class *unsafe_class = unsafe_entry->class;
1423
	struct lock_class *middle_class = prev_class;
1424 1425

	if (middle_class == safe_class)
1426
		middle_class = next_class;
1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470

	/*
	 * A direct locking problem where unsafe_class lock is taken
	 * directly by safe_class lock, then all we need to show
	 * is the deadlock scenario, as it is obvious that the
	 * unsafe lock is taken under the safe lock.
	 *
	 * But if there is a chain instead, where the safe lock takes
	 * an intermediate lock (middle_class) where this lock is
	 * not the same as the safe lock, then the lock chain is
	 * used to describe the problem. Otherwise we would need
	 * to show a different CPU case for each link in the chain
	 * from the safe_class lock to the unsafe_class lock.
	 */
	if (middle_class != unsafe_class) {
		printk("Chain exists of:\n  ");
		__print_lock_name(safe_class);
		printk(" --> ");
		__print_lock_name(middle_class);
		printk(" --> ");
		__print_lock_name(unsafe_class);
		printk("\n\n");
	}

	printk(" Possible interrupt unsafe locking scenario:\n\n");
	printk("       CPU0                    CPU1\n");
	printk("       ----                    ----\n");
	printk("  lock(");
	__print_lock_name(unsafe_class);
	printk(");\n");
	printk("                               local_irq_disable();\n");
	printk("                               lock(");
	__print_lock_name(safe_class);
	printk(");\n");
	printk("                               lock(");
	__print_lock_name(middle_class);
	printk(");\n");
	printk("  <Interrupt>\n");
	printk("    lock(");
	__print_lock_name(safe_class);
	printk(");\n");
	printk("\n *** DEADLOCK ***\n\n");
}

I
Ingo Molnar 已提交
1471 1472
static int
print_bad_irq_dependency(struct task_struct *curr,
1473 1474 1475 1476
			 struct lock_list *prev_root,
			 struct lock_list *next_root,
			 struct lock_list *backwards_entry,
			 struct lock_list *forwards_entry,
I
Ingo Molnar 已提交
1477 1478 1479 1480 1481 1482
			 struct held_lock *prev,
			 struct held_lock *next,
			 enum lock_usage_bit bit1,
			 enum lock_usage_bit bit2,
			 const char *irqclass)
{
1483
	if (!debug_locks_off_graph_unlock() || debug_locks_silent)
I
Ingo Molnar 已提交
1484 1485
		return 0;

1486 1487 1488
	printk("\n");
	printk("======================================================\n");
	printk("[ INFO: %s-safe -> %s-unsafe lock order detected ]\n",
I
Ingo Molnar 已提交
1489
		irqclass, irqclass);
1490
	print_kernel_version();
1491
	printk("------------------------------------------------------\n");
I
Ingo Molnar 已提交
1492
	printk("%s/%d [HC%u[%lu]:SC%u[%lu]:HE%u:SE%u] is trying to acquire:\n",
1493
		curr->comm, task_pid_nr(curr),
I
Ingo Molnar 已提交
1494 1495 1496 1497 1498 1499 1500 1501 1502
		curr->hardirq_context, hardirq_count() >> HARDIRQ_SHIFT,
		curr->softirq_context, softirq_count() >> SOFTIRQ_SHIFT,
		curr->hardirqs_enabled,
		curr->softirqs_enabled);
	print_lock(next);

	printk("\nand this task is already holding:\n");
	print_lock(prev);
	printk("which would create a new lock dependency:\n");
D
Dave Jones 已提交
1503
	print_lock_name(hlock_class(prev));
I
Ingo Molnar 已提交
1504
	printk(" ->");
D
Dave Jones 已提交
1505
	print_lock_name(hlock_class(next));
I
Ingo Molnar 已提交
1506 1507 1508 1509
	printk("\n");

	printk("\nbut this new dependency connects a %s-irq-safe lock:\n",
		irqclass);
1510
	print_lock_name(backwards_entry->class);
I
Ingo Molnar 已提交
1511 1512
	printk("\n... which became %s-irq-safe at:\n", irqclass);

1513
	print_stack_trace(backwards_entry->class->usage_traces + bit1, 1);
I
Ingo Molnar 已提交
1514 1515

	printk("\nto a %s-irq-unsafe lock:\n", irqclass);
1516
	print_lock_name(forwards_entry->class);
I
Ingo Molnar 已提交
1517 1518 1519
	printk("\n... which became %s-irq-unsafe at:\n", irqclass);
	printk("...");

1520
	print_stack_trace(forwards_entry->class->usage_traces + bit2, 1);
I
Ingo Molnar 已提交
1521 1522

	printk("\nother info that might help us debug this:\n\n");
1523 1524
	print_irq_lock_scenario(backwards_entry, forwards_entry,
				hlock_class(prev), hlock_class(next));
1525

I
Ingo Molnar 已提交
1526 1527
	lockdep_print_held_locks(curr);

1528 1529 1530 1531 1532
	printk("\nthe dependencies between %s-irq-safe lock", irqclass);
	printk(" and the holding lock:\n");
	if (!save_trace(&prev_root->trace))
		return 0;
	print_shortest_lock_dependencies(backwards_entry, prev_root);
I
Ingo Molnar 已提交
1533

1534 1535 1536 1537 1538
	printk("\nthe dependencies between the lock to be acquired");
	printk(" and %s-irq-unsafe lock:\n", irqclass);
	if (!save_trace(&next_root->trace))
		return 0;
	print_shortest_lock_dependencies(forwards_entry, next_root);
I
Ingo Molnar 已提交
1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551

	printk("\nstack backtrace:\n");
	dump_stack();

	return 0;
}

static int
check_usage(struct task_struct *curr, struct held_lock *prev,
	    struct held_lock *next, enum lock_usage_bit bit_backwards,
	    enum lock_usage_bit bit_forwards, const char *irqclass)
{
	int ret;
1552
	struct lock_list this, that;
1553
	struct lock_list *uninitialized_var(target_entry);
1554
	struct lock_list *uninitialized_var(target_entry1);
1555 1556 1557 1558 1559

	this.parent = NULL;

	this.class = hlock_class(prev);
	ret = find_usage_backwards(&this, bit_backwards, &target_entry);
P
Peter Zijlstra 已提交
1560 1561 1562 1563
	if (ret < 0)
		return print_bfs_bug(ret);
	if (ret == 1)
		return ret;
1564

1565 1566 1567
	that.parent = NULL;
	that.class = hlock_class(next);
	ret = find_usage_forwards(&that, bit_forwards, &target_entry1);
P
Peter Zijlstra 已提交
1568 1569 1570 1571
	if (ret < 0)
		return print_bfs_bug(ret);
	if (ret == 1)
		return ret;
I
Ingo Molnar 已提交
1572

1573 1574 1575
	return print_bad_irq_dependency(curr, &this, &that,
			target_entry, target_entry1,
			prev, next,
I
Ingo Molnar 已提交
1576 1577 1578
			bit_backwards, bit_forwards, irqclass);
}

1579 1580
static const char *state_names[] = {
#define LOCKDEP_STATE(__STATE) \
P
Peter Zijlstra 已提交
1581
	__stringify(__STATE),
1582 1583 1584 1585 1586 1587
#include "lockdep_states.h"
#undef LOCKDEP_STATE
};

static const char *state_rnames[] = {
#define LOCKDEP_STATE(__STATE) \
P
Peter Zijlstra 已提交
1588
	__stringify(__STATE)"-READ",
1589 1590 1591 1592 1593
#include "lockdep_states.h"
#undef LOCKDEP_STATE
};

static inline const char *state_name(enum lock_usage_bit bit)
P
Peter Zijlstra 已提交
1594
{
1595 1596
	return (bit & 1) ? state_rnames[bit >> 2] : state_names[bit >> 2];
}
P
Peter Zijlstra 已提交
1597

1598 1599
static int exclusive_bit(int new_bit)
{
P
Peter Zijlstra 已提交
1600
	/*
1601 1602 1603 1604 1605 1606 1607 1608
	 * USED_IN
	 * USED_IN_READ
	 * ENABLED
	 * ENABLED_READ
	 *
	 * bit 0 - write/read
	 * bit 1 - used_in/enabled
	 * bit 2+  state
P
Peter Zijlstra 已提交
1609
	 */
1610 1611 1612

	int state = new_bit & ~3;
	int dir = new_bit & 2;
P
Peter Zijlstra 已提交
1613 1614

	/*
1615
	 * keep state, bit flip the direction and strip read.
P
Peter Zijlstra 已提交
1616
	 */
1617 1618 1619 1620 1621 1622
	return state | (dir ^ 2);
}

static int check_irq_usage(struct task_struct *curr, struct held_lock *prev,
			   struct held_lock *next, enum lock_usage_bit bit)
{
P
Peter Zijlstra 已提交
1623
	/*
1624 1625
	 * Prove that the new dependency does not connect a hardirq-safe
	 * lock with a hardirq-unsafe lock - to achieve this we search
P
Peter Zijlstra 已提交
1626 1627 1628
	 * the backwards-subgraph starting at <prev>, and the
	 * forwards-subgraph starting at <next>:
	 */
1629 1630
	if (!check_usage(curr, prev, next, bit,
			   exclusive_bit(bit), state_name(bit)))
P
Peter Zijlstra 已提交
1631 1632
		return 0;

1633 1634
	bit++; /* _READ */

1635
	/*
1636 1637
	 * Prove that the new dependency does not connect a hardirq-safe-read
	 * lock with a hardirq-unsafe lock - to achieve this we search
1638 1639 1640
	 * the backwards-subgraph starting at <prev>, and the
	 * forwards-subgraph starting at <next>:
	 */
1641 1642
	if (!check_usage(curr, prev, next, bit,
			   exclusive_bit(bit), state_name(bit)))
1643 1644
		return 0;

1645 1646 1647 1648 1649 1650 1651 1652 1653
	return 1;
}

static int
check_prev_add_irq(struct task_struct *curr, struct held_lock *prev,
		struct held_lock *next)
{
#define LOCKDEP_STATE(__STATE)						\
	if (!check_irq_usage(curr, prev, next, LOCK_USED_IN_##__STATE))	\
1654
		return 0;
1655 1656
#include "lockdep_states.h"
#undef LOCKDEP_STATE
1657

P
Peter Zijlstra 已提交
1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686
	return 1;
}

static void inc_chains(void)
{
	if (current->hardirq_context)
		nr_hardirq_chains++;
	else {
		if (current->softirq_context)
			nr_softirq_chains++;
		else
			nr_process_chains++;
	}
}

#else

static inline int
check_prev_add_irq(struct task_struct *curr, struct held_lock *prev,
		struct held_lock *next)
{
	return 1;
}

static inline void inc_chains(void)
{
	nr_process_chains++;
}

I
Ingo Molnar 已提交
1687 1688
#endif

1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708
static void
print_deadlock_scenario(struct held_lock *nxt,
			     struct held_lock *prv)
{
	struct lock_class *next = hlock_class(nxt);
	struct lock_class *prev = hlock_class(prv);

	printk(" Possible unsafe locking scenario:\n\n");
	printk("       CPU0\n");
	printk("       ----\n");
	printk("  lock(");
	__print_lock_name(prev);
	printk(");\n");
	printk("  lock(");
	__print_lock_name(next);
	printk(");\n");
	printk("\n *** DEADLOCK ***\n\n");
	printk(" May be due to missing lock nesting notation\n\n");
}

I
Ingo Molnar 已提交
1709 1710 1711 1712
static int
print_deadlock_bug(struct task_struct *curr, struct held_lock *prev,
		   struct held_lock *next)
{
1713
	if (!debug_locks_off_graph_unlock() || debug_locks_silent)
I
Ingo Molnar 已提交
1714 1715
		return 0;

1716 1717 1718
	printk("\n");
	printk("=============================================\n");
	printk("[ INFO: possible recursive locking detected ]\n");
1719
	print_kernel_version();
1720
	printk("---------------------------------------------\n");
I
Ingo Molnar 已提交
1721
	printk("%s/%d is trying to acquire lock:\n",
1722
		curr->comm, task_pid_nr(curr));
I
Ingo Molnar 已提交
1723 1724 1725 1726 1727
	print_lock(next);
	printk("\nbut task is already holding lock:\n");
	print_lock(prev);

	printk("\nother info that might help us debug this:\n");
1728
	print_deadlock_scenario(next, prev);
I
Ingo Molnar 已提交
1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749
	lockdep_print_held_locks(curr);

	printk("\nstack backtrace:\n");
	dump_stack();

	return 0;
}

/*
 * Check whether we are holding such a class already.
 *
 * (Note that this has to be done separately, because the graph cannot
 * detect such classes of deadlocks.)
 *
 * Returns: 0 on deadlock detected, 1 on OK, 2 on recursive read
 */
static int
check_deadlock(struct task_struct *curr, struct held_lock *next,
	       struct lockdep_map *next_instance, int read)
{
	struct held_lock *prev;
P
Peter Zijlstra 已提交
1750
	struct held_lock *nest = NULL;
I
Ingo Molnar 已提交
1751 1752 1753 1754
	int i;

	for (i = 0; i < curr->lockdep_depth; i++) {
		prev = curr->held_locks + i;
P
Peter Zijlstra 已提交
1755 1756 1757 1758

		if (prev->instance == next->nest_lock)
			nest = prev;

D
Dave Jones 已提交
1759
		if (hlock_class(prev) != hlock_class(next))
I
Ingo Molnar 已提交
1760
			continue;
P
Peter Zijlstra 已提交
1761

I
Ingo Molnar 已提交
1762 1763
		/*
		 * Allow read-after-read recursion of the same
1764
		 * lock class (i.e. read_lock(lock)+read_lock(lock)):
I
Ingo Molnar 已提交
1765
		 */
1766
		if ((read == 2) && prev->read)
I
Ingo Molnar 已提交
1767
			return 2;
P
Peter Zijlstra 已提交
1768 1769 1770 1771 1772 1773 1774 1775

		/*
		 * We're holding the nest_lock, which serializes this lock's
		 * nesting behaviour.
		 */
		if (nest)
			return 2;

I
Ingo Molnar 已提交
1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804
		return print_deadlock_bug(curr, prev, next);
	}
	return 1;
}

/*
 * There was a chain-cache miss, and we are about to add a new dependency
 * to a previous lock. We recursively validate the following rules:
 *
 *  - would the adding of the <prev> -> <next> dependency create a
 *    circular dependency in the graph? [== circular deadlock]
 *
 *  - does the new prev->next dependency connect any hardirq-safe lock
 *    (in the full backwards-subgraph starting at <prev>) with any
 *    hardirq-unsafe lock (in the full forwards-subgraph starting at
 *    <next>)? [== illegal lock inversion with hardirq contexts]
 *
 *  - does the new prev->next dependency connect any softirq-safe lock
 *    (in the full backwards-subgraph starting at <prev>) with any
 *    softirq-unsafe lock (in the full forwards-subgraph starting at
 *    <next>)? [== illegal lock inversion with softirq contexts]
 *
 * any of these scenarios could lead to a deadlock.
 *
 * Then if all the validations pass, we add the forwards and backwards
 * dependency.
 */
static int
check_prev_add(struct task_struct *curr, struct held_lock *prev,
Y
Yong Zhang 已提交
1805
	       struct held_lock *next, int distance, int trylock_loop)
I
Ingo Molnar 已提交
1806 1807 1808
{
	struct lock_list *entry;
	int ret;
1809 1810
	struct lock_list this;
	struct lock_list *uninitialized_var(target_entry);
Y
Yong Zhang 已提交
1811 1812 1813 1814 1815 1816 1817 1818
	/*
	 * Static variable, serialized by the graph_lock().
	 *
	 * We use this static variable to save the stack trace in case
	 * we call into this function multiple times due to encountering
	 * trylocks in the held lock stack.
	 */
	static struct stack_trace trace;
I
Ingo Molnar 已提交
1819 1820 1821 1822 1823 1824 1825 1826 1827 1828

	/*
	 * Prove that the new <prev> -> <next> dependency would not
	 * create a circular dependency in the graph. (We do this by
	 * forward-recursing into the graph starting at <next>, and
	 * checking whether we can reach <prev>.)
	 *
	 * We are using global variables to control the recursion, to
	 * keep the stackframe size of the recursive functions low:
	 */
1829 1830 1831 1832 1833 1834 1835
	this.class = hlock_class(next);
	this.parent = NULL;
	ret = check_noncircular(&this, hlock_class(prev), &target_entry);
	if (unlikely(!ret))
		return print_circular_bug(&this, target_entry, next, prev);
	else if (unlikely(ret < 0))
		return print_bfs_bug(ret);
1836

P
Peter Zijlstra 已提交
1837
	if (!check_prev_add_irq(curr, prev, next))
I
Ingo Molnar 已提交
1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857
		return 0;

	/*
	 * For recursive read-locks we do all the dependency checks,
	 * but we dont store read-triggered dependencies (only
	 * write-triggered dependencies). This ensures that only the
	 * write-side dependencies matter, and that if for example a
	 * write-lock never takes any other locks, then the reads are
	 * equivalent to a NOP.
	 */
	if (next->read == 2 || prev->read == 2)
		return 1;
	/*
	 * Is the <prev> -> <next> dependency already present?
	 *
	 * (this may occur even though this is a new chain: consider
	 *  e.g. the L1 -> L2 -> L3 -> L4 and the L5 -> L1 -> L2 -> L3
	 *  chains - the second one will be new, but L1 already has
	 *  L2 added to its dependency list, due to the first chain.)
	 */
D
Dave Jones 已提交
1858 1859
	list_for_each_entry(entry, &hlock_class(prev)->locks_after, entry) {
		if (entry->class == hlock_class(next)) {
1860 1861
			if (distance == 1)
				entry->distance = 1;
I
Ingo Molnar 已提交
1862
			return 2;
1863
		}
I
Ingo Molnar 已提交
1864 1865
	}

Y
Yong Zhang 已提交
1866 1867 1868
	if (!trylock_loop && !save_trace(&trace))
		return 0;

I
Ingo Molnar 已提交
1869 1870 1871 1872
	/*
	 * Ok, all validations passed, add the new lock
	 * to the previous lock's dependency list:
	 */
D
Dave Jones 已提交
1873 1874
	ret = add_lock_to_list(hlock_class(prev), hlock_class(next),
			       &hlock_class(prev)->locks_after,
Y
Yong Zhang 已提交
1875
			       next->acquire_ip, distance, &trace);
1876

I
Ingo Molnar 已提交
1877 1878
	if (!ret)
		return 0;
1879

D
Dave Jones 已提交
1880 1881
	ret = add_lock_to_list(hlock_class(next), hlock_class(prev),
			       &hlock_class(next)->locks_before,
Y
Yong Zhang 已提交
1882
			       next->acquire_ip, distance, &trace);
1883 1884
	if (!ret)
		return 0;
I
Ingo Molnar 已提交
1885 1886

	/*
P
Peter Zijlstra 已提交
1887 1888
	 * Debugging printouts:
	 */
D
Dave Jones 已提交
1889
	if (verbose(hlock_class(prev)) || verbose(hlock_class(next))) {
P
Peter Zijlstra 已提交
1890 1891
		graph_unlock();
		printk("\n new dependency: ");
D
Dave Jones 已提交
1892
		print_lock_name(hlock_class(prev));
P
Peter Zijlstra 已提交
1893
		printk(" => ");
D
Dave Jones 已提交
1894
		print_lock_name(hlock_class(next));
P
Peter Zijlstra 已提交
1895
		printk("\n");
I
Ingo Molnar 已提交
1896
		dump_stack();
P
Peter Zijlstra 已提交
1897
		return graph_lock();
I
Ingo Molnar 已提交
1898
	}
P
Peter Zijlstra 已提交
1899 1900
	return 1;
}
I
Ingo Molnar 已提交
1901

P
Peter Zijlstra 已提交
1902 1903 1904 1905 1906 1907 1908 1909 1910 1911
/*
 * Add the dependency to all directly-previous locks that are 'relevant'.
 * The ones that are relevant are (in increasing distance from curr):
 * all consecutive trylock entries and the final non-trylock entry - or
 * the end of this context's lock-chain - whichever comes first.
 */
static int
check_prevs_add(struct task_struct *curr, struct held_lock *next)
{
	int depth = curr->lockdep_depth;
Y
Yong Zhang 已提交
1912
	int trylock_loop = 0;
P
Peter Zijlstra 已提交
1913
	struct held_lock *hlock;
1914

I
Ingo Molnar 已提交
1915
	/*
P
Peter Zijlstra 已提交
1916 1917 1918
	 * Debugging checks.
	 *
	 * Depth must not be zero for a non-head lock:
I
Ingo Molnar 已提交
1919
	 */
P
Peter Zijlstra 已提交
1920 1921
	if (!depth)
		goto out_bug;
I
Ingo Molnar 已提交
1922
	/*
P
Peter Zijlstra 已提交
1923 1924
	 * At least two relevant locks must exist for this
	 * to be a head:
I
Ingo Molnar 已提交
1925
	 */
P
Peter Zijlstra 已提交
1926 1927 1928
	if (curr->held_locks[depth].irq_context !=
			curr->held_locks[depth-1].irq_context)
		goto out_bug;
1929

P
Peter Zijlstra 已提交
1930 1931 1932 1933 1934 1935 1936 1937
	for (;;) {
		int distance = curr->lockdep_depth - depth + 1;
		hlock = curr->held_locks + depth-1;
		/*
		 * Only non-recursive-read entries get new dependencies
		 * added:
		 */
		if (hlock->read != 2) {
Y
Yong Zhang 已提交
1938 1939
			if (!check_prev_add(curr, hlock, next,
						distance, trylock_loop))
P
Peter Zijlstra 已提交
1940 1941 1942 1943 1944 1945 1946 1947 1948
				return 0;
			/*
			 * Stop after the first non-trylock entry,
			 * as non-trylock entries have added their
			 * own direct dependencies already, so this
			 * lock is connected to them indirectly:
			 */
			if (!hlock->trylock)
				break;
1949
		}
P
Peter Zijlstra 已提交
1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961
		depth--;
		/*
		 * End of lock-stack?
		 */
		if (!depth)
			break;
		/*
		 * Stop the search if we cross into another context:
		 */
		if (curr->held_locks[depth].irq_context !=
				curr->held_locks[depth-1].irq_context)
			break;
Y
Yong Zhang 已提交
1962
		trylock_loop = 1;
I
Ingo Molnar 已提交
1963
	}
P
Peter Zijlstra 已提交
1964 1965 1966 1967
	return 1;
out_bug:
	if (!debug_locks_off_graph_unlock())
		return 0;
I
Ingo Molnar 已提交
1968

P
Peter Zijlstra 已提交
1969 1970 1971 1972 1973
	/*
	 * Clearly we all shouldn't be here, but since we made it we
	 * can reliable say we messed up our state. See the above two
	 * gotos for reasons why we could possibly end up here.
	 */
P
Peter Zijlstra 已提交
1974
	WARN_ON(1);
I
Ingo Molnar 已提交
1975

P
Peter Zijlstra 已提交
1976
	return 0;
I
Ingo Molnar 已提交
1977 1978
}

P
Peter Zijlstra 已提交
1979
unsigned long nr_lock_chains;
1980
struct lock_chain lock_chains[MAX_LOCKDEP_CHAINS];
1981
int nr_chain_hlocks;
1982 1983 1984 1985 1986 1987
static u16 chain_hlocks[MAX_LOCKDEP_CHAIN_HLOCKS];

struct lock_class *lock_chain_get_class(struct lock_chain *chain, int i)
{
	return lock_classes + chain_hlocks[chain->base + i];
}
P
Peter Zijlstra 已提交
1988

I
Ingo Molnar 已提交
1989 1990
/*
 * Look up a dependency chain. If the key is not present yet then
1991 1992 1993
 * add it and return 1 - in this case the new dependency chain is
 * validated. If the key is already hashed, return 0.
 * (On return with 1 graph_lock is held.)
I
Ingo Molnar 已提交
1994
 */
1995 1996 1997
static inline int lookup_chain_cache(struct task_struct *curr,
				     struct held_lock *hlock,
				     u64 chain_key)
I
Ingo Molnar 已提交
1998
{
D
Dave Jones 已提交
1999
	struct lock_class *class = hlock_class(hlock);
I
Ingo Molnar 已提交
2000 2001
	struct list_head *hash_head = chainhashentry(chain_key);
	struct lock_chain *chain;
2002
	struct held_lock *hlock_curr, *hlock_next;
2003
	int i, j;
I
Ingo Molnar 已提交
2004

P
Peter Zijlstra 已提交
2005 2006 2007 2008 2009
	/*
	 * We might need to take the graph lock, ensure we've got IRQs
	 * disabled to make this an IRQ-safe lock.. for recursion reasons
	 * lockdep won't complain about its own locking errors.
	 */
2010 2011
	if (DEBUG_LOCKS_WARN_ON(!irqs_disabled()))
		return 0;
I
Ingo Molnar 已提交
2012 2013 2014 2015 2016 2017 2018
	/*
	 * We can walk it lock-free, because entries only get added
	 * to the hash:
	 */
	list_for_each_entry(chain, hash_head, entry) {
		if (chain->chain_key == chain_key) {
cache_hit:
2019
			debug_atomic_inc(chain_lookup_hits);
2020
			if (very_verbose(class))
2021 2022 2023 2024
				printk("\nhash chain already cached, key: "
					"%016Lx tail class: [%p] %s\n",
					(unsigned long long)chain_key,
					class->key, class->name);
I
Ingo Molnar 已提交
2025 2026 2027
			return 0;
		}
	}
2028
	if (very_verbose(class))
2029 2030
		printk("\nnew hash chain, key: %016Lx tail class: [%p] %s\n",
			(unsigned long long)chain_key, class->key, class->name);
I
Ingo Molnar 已提交
2031 2032 2033 2034
	/*
	 * Allocate a new chain entry from the static array, and add
	 * it to the hash:
	 */
2035 2036
	if (!graph_lock())
		return 0;
I
Ingo Molnar 已提交
2037 2038 2039 2040 2041
	/*
	 * We have to walk the chain again locked - to avoid duplicates:
	 */
	list_for_each_entry(chain, hash_head, entry) {
		if (chain->chain_key == chain_key) {
2042
			graph_unlock();
I
Ingo Molnar 已提交
2043 2044 2045 2046
			goto cache_hit;
		}
	}
	if (unlikely(nr_lock_chains >= MAX_LOCKDEP_CHAINS)) {
2047 2048 2049
		if (!debug_locks_off_graph_unlock())
			return 0;

I
Ingo Molnar 已提交
2050 2051
		printk("BUG: MAX_LOCKDEP_CHAINS too low!\n");
		printk("turning off the locking correctness validator.\n");
2052
		dump_stack();
I
Ingo Molnar 已提交
2053 2054 2055 2056
		return 0;
	}
	chain = lock_chains + nr_lock_chains++;
	chain->chain_key = chain_key;
2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067
	chain->irq_context = hlock->irq_context;
	/* Find the first held_lock of current chain */
	hlock_next = hlock;
	for (i = curr->lockdep_depth - 1; i >= 0; i--) {
		hlock_curr = curr->held_locks + i;
		if (hlock_curr->irq_context != hlock_next->irq_context)
			break;
		hlock_next = hlock;
	}
	i++;
	chain->depth = curr->lockdep_depth + 1 - i;
2068 2069 2070
	if (likely(nr_chain_hlocks + chain->depth <= MAX_LOCKDEP_CHAIN_HLOCKS)) {
		chain->base = nr_chain_hlocks;
		nr_chain_hlocks += chain->depth;
2071
		for (j = 0; j < chain->depth - 1; j++, i++) {
D
Dave Jones 已提交
2072
			int lock_id = curr->held_locks[i].class_idx - 1;
2073 2074 2075 2076
			chain_hlocks[chain->base + j] = lock_id;
		}
		chain_hlocks[chain->base + j] = class - lock_classes;
	}
I
Ingo Molnar 已提交
2077
	list_add_tail_rcu(&chain->entry, hash_head);
2078
	debug_atomic_inc(chain_lookup_misses);
P
Peter Zijlstra 已提交
2079 2080 2081 2082 2083 2084
	inc_chains();

	return 1;
}

static int validate_chain(struct task_struct *curr, struct lockdep_map *lock,
2085
		struct held_lock *hlock, int chain_head, u64 chain_key)
P
Peter Zijlstra 已提交
2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097
{
	/*
	 * Trylock needs to maintain the stack of held locks, but it
	 * does not add new dependencies, because trylock can be done
	 * in any order.
	 *
	 * We look up the chain_key and do the O(N^2) check and update of
	 * the dependencies only if this is a new dependency chain.
	 * (If lookup_chain_cache() returns with 1 it acquires
	 * graph_lock for us)
	 */
	if (!hlock->trylock && (hlock->check == 2) &&
2098
	    lookup_chain_cache(curr, hlock, chain_key)) {
P
Peter Zijlstra 已提交
2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133
		/*
		 * Check whether last held lock:
		 *
		 * - is irq-safe, if this lock is irq-unsafe
		 * - is softirq-safe, if this lock is hardirq-unsafe
		 *
		 * And check whether the new lock's dependency graph
		 * could lead back to the previous lock.
		 *
		 * any of these scenarios could lead to a deadlock. If
		 * All validations
		 */
		int ret = check_deadlock(curr, hlock, lock, hlock->read);

		if (!ret)
			return 0;
		/*
		 * Mark recursive read, as we jump over it when
		 * building dependencies (just like we jump over
		 * trylock entries):
		 */
		if (ret == 2)
			hlock->read = 2;
		/*
		 * Add dependency only if this lock is not the head
		 * of the chain, and if it's not a secondary read-lock:
		 */
		if (!chain_head && ret != 2)
			if (!check_prevs_add(curr, hlock))
				return 0;
		graph_unlock();
	} else
		/* after lookup_chain_cache(): */
		if (unlikely(!debug_locks))
			return 0;
I
Ingo Molnar 已提交
2134 2135 2136

	return 1;
}
P
Peter Zijlstra 已提交
2137 2138 2139
#else
static inline int validate_chain(struct task_struct *curr,
	       	struct lockdep_map *lock, struct held_lock *hlock,
2140
		int chain_head, u64 chain_key)
P
Peter Zijlstra 已提交
2141 2142 2143
{
	return 1;
}
2144
#endif
I
Ingo Molnar 已提交
2145 2146 2147 2148 2149

/*
 * We are building curr_chain_key incrementally, so double-check
 * it from scratch, to make sure that it's done correctly:
 */
2150
static void check_chain_key(struct task_struct *curr)
I
Ingo Molnar 已提交
2151 2152 2153 2154 2155 2156 2157 2158 2159 2160
{
#ifdef CONFIG_DEBUG_LOCKDEP
	struct held_lock *hlock, *prev_hlock = NULL;
	unsigned int i, id;
	u64 chain_key = 0;

	for (i = 0; i < curr->lockdep_depth; i++) {
		hlock = curr->held_locks + i;
		if (chain_key != hlock->prev_chain_key) {
			debug_locks_off();
P
Peter Zijlstra 已提交
2161 2162 2163 2164
			/*
			 * We got mighty confused, our chain keys don't match
			 * with what we expect, someone trample on our task state?
			 */
2165
			WARN(1, "hm#1, depth: %u [%u], %016Lx != %016Lx\n",
I
Ingo Molnar 已提交
2166 2167 2168 2169 2170
				curr->lockdep_depth, i,
				(unsigned long long)chain_key,
				(unsigned long long)hlock->prev_chain_key);
			return;
		}
D
Dave Jones 已提交
2171
		id = hlock->class_idx - 1;
P
Peter Zijlstra 已提交
2172 2173 2174
		/*
		 * Whoops ran out of static storage again?
		 */
2175 2176 2177
		if (DEBUG_LOCKS_WARN_ON(id >= MAX_LOCKDEP_KEYS))
			return;

I
Ingo Molnar 已提交
2178 2179 2180 2181 2182 2183 2184 2185
		if (prev_hlock && (prev_hlock->irq_context !=
							hlock->irq_context))
			chain_key = 0;
		chain_key = iterate_chain_key(chain_key, id);
		prev_hlock = hlock;
	}
	if (chain_key != curr->curr_chain_key) {
		debug_locks_off();
P
Peter Zijlstra 已提交
2186 2187 2188 2189
		/*
		 * More smoking hash instead of calculating it, damn see these
		 * numbers float.. I bet that a pink elephant stepped on my memory.
		 */
2190
		WARN(1, "hm#2, depth: %u [%u], %016Lx != %016Lx\n",
I
Ingo Molnar 已提交
2191 2192 2193 2194 2195 2196 2197
			curr->lockdep_depth, i,
			(unsigned long long)chain_key,
			(unsigned long long)curr->curr_chain_key);
	}
#endif
}

2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215
static void
print_usage_bug_scenario(struct held_lock *lock)
{
	struct lock_class *class = hlock_class(lock);

	printk(" Possible unsafe locking scenario:\n\n");
	printk("       CPU0\n");
	printk("       ----\n");
	printk("  lock(");
	__print_lock_name(class);
	printk(");\n");
	printk("  <Interrupt>\n");
	printk("    lock(");
	__print_lock_name(class);
	printk(");\n");
	printk("\n *** DEADLOCK ***\n\n");
}

P
Peter Zijlstra 已提交
2216 2217 2218 2219 2220 2221 2222
static int
print_usage_bug(struct task_struct *curr, struct held_lock *this,
		enum lock_usage_bit prev_bit, enum lock_usage_bit new_bit)
{
	if (!debug_locks_off_graph_unlock() || debug_locks_silent)
		return 0;

2223 2224 2225
	printk("\n");
	printk("=================================\n");
	printk("[ INFO: inconsistent lock state ]\n");
P
Peter Zijlstra 已提交
2226
	print_kernel_version();
2227
	printk("---------------------------------\n");
P
Peter Zijlstra 已提交
2228 2229 2230 2231 2232

	printk("inconsistent {%s} -> {%s} usage.\n",
		usage_str[prev_bit], usage_str[new_bit]);

	printk("%s/%d [HC%u[%lu]:SC%u[%lu]:HE%u:SE%u] takes:\n",
2233
		curr->comm, task_pid_nr(curr),
P
Peter Zijlstra 已提交
2234 2235 2236 2237 2238 2239 2240
		trace_hardirq_context(curr), hardirq_count() >> HARDIRQ_SHIFT,
		trace_softirq_context(curr), softirq_count() >> SOFTIRQ_SHIFT,
		trace_hardirqs_enabled(curr),
		trace_softirqs_enabled(curr));
	print_lock(this);

	printk("{%s} state was registered at:\n", usage_str[prev_bit]);
D
Dave Jones 已提交
2241
	print_stack_trace(hlock_class(this)->usage_traces + prev_bit, 1);
P
Peter Zijlstra 已提交
2242 2243 2244

	print_irqtrace_events(curr);
	printk("\nother info that might help us debug this:\n");
2245 2246
	print_usage_bug_scenario(this);

P
Peter Zijlstra 已提交
2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261
	lockdep_print_held_locks(curr);

	printk("\nstack backtrace:\n");
	dump_stack();

	return 0;
}

/*
 * Print out an error if an invalid bit is set:
 */
static inline int
valid_state(struct task_struct *curr, struct held_lock *this,
	    enum lock_usage_bit new_bit, enum lock_usage_bit bad_bit)
{
D
Dave Jones 已提交
2262
	if (unlikely(hlock_class(this)->usage_mask & (1 << bad_bit)))
P
Peter Zijlstra 已提交
2263 2264 2265 2266 2267 2268 2269
		return print_usage_bug(curr, this, bad_bit, new_bit);
	return 1;
}

static int mark_lock(struct task_struct *curr, struct held_lock *this,
		     enum lock_usage_bit new_bit);

2270
#if defined(CONFIG_TRACE_IRQFLAGS) && defined(CONFIG_PROVE_LOCKING)
I
Ingo Molnar 已提交
2271 2272 2273 2274 2275

/*
 * print irq inversion bug:
 */
static int
2276 2277
print_irq_inversion_bug(struct task_struct *curr,
			struct lock_list *root, struct lock_list *other,
I
Ingo Molnar 已提交
2278 2279 2280
			struct held_lock *this, int forwards,
			const char *irqclass)
{
2281 2282 2283 2284
	struct lock_list *entry = other;
	struct lock_list *middle = NULL;
	int depth;

2285
	if (!debug_locks_off_graph_unlock() || debug_locks_silent)
I
Ingo Molnar 已提交
2286 2287
		return 0;

2288 2289 2290
	printk("\n");
	printk("=========================================================\n");
	printk("[ INFO: possible irq lock inversion dependency detected ]\n");
2291
	print_kernel_version();
2292
	printk("---------------------------------------------------------\n");
I
Ingo Molnar 已提交
2293
	printk("%s/%d just changed the state of lock:\n",
2294
		curr->comm, task_pid_nr(curr));
I
Ingo Molnar 已提交
2295 2296
	print_lock(this);
	if (forwards)
2297
		printk("but this lock took another, %s-unsafe lock in the past:\n", irqclass);
I
Ingo Molnar 已提交
2298
	else
2299
		printk("but this lock was taken by another, %s-safe lock in the past:\n", irqclass);
2300
	print_lock_name(other->class);
I
Ingo Molnar 已提交
2301 2302 2303
	printk("\n\nand interrupts could create inverse lock ordering between them.\n\n");

	printk("\nother info that might help us debug this:\n");
2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322

	/* Find a middle lock (if one exists) */
	depth = get_lock_depth(other);
	do {
		if (depth == 0 && (entry != root)) {
			printk("lockdep:%s bad path found in chain graph\n", __func__);
			break;
		}
		middle = entry;
		entry = get_lock_parent(entry);
		depth--;
	} while (entry && entry != root && (depth >= 0));
	if (forwards)
		print_irq_lock_scenario(root, other,
			middle ? middle->class : root->class, other->class);
	else
		print_irq_lock_scenario(other, root,
			middle ? middle->class : other->class, root->class);

I
Ingo Molnar 已提交
2323 2324
	lockdep_print_held_locks(curr);

2325 2326 2327 2328
	printk("\nthe shortest dependencies between 2nd lock and 1st lock:\n");
	if (!save_trace(&root->trace))
		return 0;
	print_shortest_lock_dependencies(other, root);
I
Ingo Molnar 已提交
2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344

	printk("\nstack backtrace:\n");
	dump_stack();

	return 0;
}

/*
 * Prove that in the forwards-direction subgraph starting at <this>
 * there is no lock matching <mask>:
 */
static int
check_usage_forwards(struct task_struct *curr, struct held_lock *this,
		     enum lock_usage_bit bit, const char *irqclass)
{
	int ret;
2345 2346
	struct lock_list root;
	struct lock_list *uninitialized_var(target_entry);
I
Ingo Molnar 已提交
2347

2348 2349 2350
	root.parent = NULL;
	root.class = hlock_class(this);
	ret = find_usage_forwards(&root, bit, &target_entry);
P
Peter Zijlstra 已提交
2351 2352 2353 2354
	if (ret < 0)
		return print_bfs_bug(ret);
	if (ret == 1)
		return ret;
I
Ingo Molnar 已提交
2355

2356
	return print_irq_inversion_bug(curr, &root, target_entry,
2357
					this, 1, irqclass);
I
Ingo Molnar 已提交
2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368
}

/*
 * Prove that in the backwards-direction subgraph starting at <this>
 * there is no lock matching <mask>:
 */
static int
check_usage_backwards(struct task_struct *curr, struct held_lock *this,
		      enum lock_usage_bit bit, const char *irqclass)
{
	int ret;
2369 2370
	struct lock_list root;
	struct lock_list *uninitialized_var(target_entry);
I
Ingo Molnar 已提交
2371

2372 2373 2374
	root.parent = NULL;
	root.class = hlock_class(this);
	ret = find_usage_backwards(&root, bit, &target_entry);
P
Peter Zijlstra 已提交
2375 2376 2377 2378
	if (ret < 0)
		return print_bfs_bug(ret);
	if (ret == 1)
		return ret;
I
Ingo Molnar 已提交
2379

2380
	return print_irq_inversion_bug(curr, &root, target_entry,
2381
					this, 0, irqclass);
I
Ingo Molnar 已提交
2382 2383
}

2384
void print_irqtrace_events(struct task_struct *curr)
I
Ingo Molnar 已提交
2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396
{
	printk("irq event stamp: %u\n", curr->irq_events);
	printk("hardirqs last  enabled at (%u): ", curr->hardirq_enable_event);
	print_ip_sym(curr->hardirq_enable_ip);
	printk("hardirqs last disabled at (%u): ", curr->hardirq_disable_event);
	print_ip_sym(curr->hardirq_disable_ip);
	printk("softirqs last  enabled at (%u): ", curr->softirq_enable_event);
	print_ip_sym(curr->softirq_enable_ip);
	printk("softirqs last disabled at (%u): ", curr->softirq_disable_event);
	print_ip_sym(curr->softirq_disable_ip);
}

2397
static int HARDIRQ_verbose(struct lock_class *class)
I
Ingo Molnar 已提交
2398
{
P
Peter Zijlstra 已提交
2399 2400 2401
#if HARDIRQ_VERBOSE
	return class_filter(class);
#endif
I
Ingo Molnar 已提交
2402 2403 2404
	return 0;
}

2405
static int SOFTIRQ_verbose(struct lock_class *class)
I
Ingo Molnar 已提交
2406
{
P
Peter Zijlstra 已提交
2407 2408 2409 2410
#if SOFTIRQ_VERBOSE
	return class_filter(class);
#endif
	return 0;
I
Ingo Molnar 已提交
2411 2412
}

2413
static int RECLAIM_FS_verbose(struct lock_class *class)
2414 2415 2416 2417 2418 2419 2420
{
#if RECLAIM_VERBOSE
	return class_filter(class);
#endif
	return 0;
}

I
Ingo Molnar 已提交
2421 2422
#define STRICT_READ_CHECKS	1

2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435
static int (*state_verbose_f[])(struct lock_class *class) = {
#define LOCKDEP_STATE(__STATE) \
	__STATE##_verbose,
#include "lockdep_states.h"
#undef LOCKDEP_STATE
};

static inline int state_verbose(enum lock_usage_bit bit,
				struct lock_class *class)
{
	return state_verbose_f[bit >> 2](class);
}

2436 2437 2438
typedef int (*check_usage_f)(struct task_struct *, struct held_lock *,
			     enum lock_usage_bit bit, const char *name);

2439
static int
2440 2441
mark_lock_irq(struct task_struct *curr, struct held_lock *this,
		enum lock_usage_bit new_bit)
2442
{
2443
	int excl_bit = exclusive_bit(new_bit);
2444
	int read = new_bit & 1;
2445 2446
	int dir = new_bit & 2;

2447 2448 2449 2450 2451 2452 2453
	/*
	 * mark USED_IN has to look forwards -- to ensure no dependency
	 * has ENABLED state, which would allow recursion deadlocks.
	 *
	 * mark ENABLED has to look backwards -- to ensure no dependee
	 * has USED_IN state, which, again, would allow  recursion deadlocks.
	 */
2454 2455
	check_usage_f usage = dir ?
		check_usage_backwards : check_usage_forwards;
2456

2457 2458 2459 2460
	/*
	 * Validate that this particular lock does not have conflicting
	 * usage states.
	 */
2461 2462
	if (!valid_state(curr, this, new_bit, excl_bit))
		return 0;
2463

2464 2465 2466 2467 2468
	/*
	 * Validate that the lock dependencies don't have conflicting usage
	 * states.
	 */
	if ((!read || !dir || STRICT_READ_CHECKS) &&
2469
			!usage(curr, this, excl_bit, state_name(new_bit & ~1)))
2470
		return 0;
2471

2472 2473 2474 2475 2476 2477 2478 2479
	/*
	 * Check for read in write conflicts
	 */
	if (!read) {
		if (!valid_state(curr, this, new_bit, excl_bit + 1))
			return 0;

		if (STRICT_READ_CHECKS &&
2480 2481
			!usage(curr, this, excl_bit + 1,
				state_name(new_bit + 1)))
2482 2483
			return 0;
	}
2484

2485
	if (state_verbose(new_bit, hlock_class(this)))
2486 2487 2488 2489 2490
		return 2;

	return 1;
}

2491
enum mark_type {
2492 2493 2494
#define LOCKDEP_STATE(__STATE)	__STATE,
#include "lockdep_states.h"
#undef LOCKDEP_STATE
2495 2496
};

I
Ingo Molnar 已提交
2497 2498 2499
/*
 * Mark all held locks with a usage bit:
 */
2500
static int
2501
mark_held_locks(struct task_struct *curr, enum mark_type mark)
I
Ingo Molnar 已提交
2502 2503 2504 2505 2506 2507 2508 2509
{
	enum lock_usage_bit usage_bit;
	struct held_lock *hlock;
	int i;

	for (i = 0; i < curr->lockdep_depth; i++) {
		hlock = curr->held_locks + i;

2510 2511 2512 2513 2514
		usage_bit = 2 + (mark << 2); /* ENABLED */
		if (hlock->read)
			usage_bit += 1; /* READ */

		BUG_ON(usage_bit >= LOCK_USAGE_STATES);
2515

P
Peter Zijlstra 已提交
2516
		if (hlock_class(hlock)->key == __lockdep_no_validate__.subkeys)
2517 2518
			continue;

2519
		if (!mark_lock(curr, hlock, usage_bit))
I
Ingo Molnar 已提交
2520 2521 2522 2523 2524 2525 2526 2527 2528
			return 0;
	}

	return 1;
}

/*
 * Hardirqs will be enabled:
 */
2529
static void __trace_hardirqs_on_caller(unsigned long ip)
I
Ingo Molnar 已提交
2530 2531 2532 2533 2534 2535 2536 2537 2538 2539
{
	struct task_struct *curr = current;

	/* we'll do an OFF -> ON transition: */
	curr->hardirqs_enabled = 1;

	/*
	 * We are going to turn hardirqs on, so set the
	 * usage bit for all held locks:
	 */
2540
	if (!mark_held_locks(curr, HARDIRQ))
I
Ingo Molnar 已提交
2541 2542 2543 2544 2545 2546 2547
		return;
	/*
	 * If we have softirqs enabled, then set the usage
	 * bit for all held locks. (disabled hardirqs prevented
	 * this bit from being set before)
	 */
	if (curr->softirqs_enabled)
2548
		if (!mark_held_locks(curr, SOFTIRQ))
I
Ingo Molnar 已提交
2549 2550
			return;

P
Peter Zijlstra 已提交
2551 2552
	curr->hardirq_enable_ip = ip;
	curr->hardirq_enable_event = ++curr->irq_events;
2553
	debug_atomic_inc(hardirqs_on_events);
P
Peter Zijlstra 已提交
2554
}
2555 2556 2557 2558 2559 2560 2561 2562

void trace_hardirqs_on_caller(unsigned long ip)
{
	time_hardirqs_on(CALLER_ADDR0, ip);

	if (unlikely(!debug_locks || current->lockdep_recursion))
		return;

2563 2564 2565 2566 2567 2568 2569 2570 2571 2572
	if (unlikely(current->hardirqs_enabled)) {
		/*
		 * Neither irq nor preemption are disabled here
		 * so this is racy by nature but losing one hit
		 * in a stat is not a big deal.
		 */
		__debug_atomic_inc(redundant_hardirqs_on);
		return;
	}

P
Peter Zijlstra 已提交
2573 2574 2575 2576 2577
	/*
	 * We're enabling irqs and according to our state above irqs weren't
	 * already enabled, yet we find the hardware thinks they are in fact
	 * enabled.. someone messed up their IRQ state tracing.
	 */
2578 2579 2580
	if (DEBUG_LOCKS_WARN_ON(!irqs_disabled()))
		return;

P
Peter Zijlstra 已提交
2581 2582 2583
	/*
	 * See the fine text that goes along with this variable definition.
	 */
2584 2585 2586
	if (DEBUG_LOCKS_WARN_ON(unlikely(early_boot_irqs_disabled)))
		return;

P
Peter Zijlstra 已提交
2587 2588 2589 2590
	/*
	 * Can't allow enabling interrupts while in an interrupt handler,
	 * that's general bad form and such. Recursion, limited stack etc..
	 */
2591 2592 2593
	if (DEBUG_LOCKS_WARN_ON(current->hardirq_context))
		return;

2594 2595 2596 2597
	current->lockdep_recursion = 1;
	__trace_hardirqs_on_caller(ip);
	current->lockdep_recursion = 0;
}
2598
EXPORT_SYMBOL(trace_hardirqs_on_caller);
P
Peter Zijlstra 已提交
2599

2600
void trace_hardirqs_on(void)
2601 2602 2603
{
	trace_hardirqs_on_caller(CALLER_ADDR0);
}
P
Peter Zijlstra 已提交
2604 2605 2606 2607 2608
EXPORT_SYMBOL(trace_hardirqs_on);

/*
 * Hardirqs were disabled:
 */
2609
void trace_hardirqs_off_caller(unsigned long ip)
P
Peter Zijlstra 已提交
2610 2611 2612
{
	struct task_struct *curr = current;

2613
	time_hardirqs_off(CALLER_ADDR0, ip);
2614

P
Peter Zijlstra 已提交
2615 2616 2617
	if (unlikely(!debug_locks || current->lockdep_recursion))
		return;

P
Peter Zijlstra 已提交
2618 2619 2620 2621
	/*
	 * So we're supposed to get called after you mask local IRQs, but for
	 * some reason the hardware doesn't quite think you did a proper job.
	 */
P
Peter Zijlstra 已提交
2622 2623 2624 2625 2626 2627 2628 2629
	if (DEBUG_LOCKS_WARN_ON(!irqs_disabled()))
		return;

	if (curr->hardirqs_enabled) {
		/*
		 * We have done an ON -> OFF transition:
		 */
		curr->hardirqs_enabled = 0;
2630
		curr->hardirq_disable_ip = ip;
P
Peter Zijlstra 已提交
2631
		curr->hardirq_disable_event = ++curr->irq_events;
2632
		debug_atomic_inc(hardirqs_off_events);
P
Peter Zijlstra 已提交
2633
	} else
2634
		debug_atomic_inc(redundant_hardirqs_off);
P
Peter Zijlstra 已提交
2635
}
2636
EXPORT_SYMBOL(trace_hardirqs_off_caller);
P
Peter Zijlstra 已提交
2637

2638
void trace_hardirqs_off(void)
2639 2640 2641
{
	trace_hardirqs_off_caller(CALLER_ADDR0);
}
P
Peter Zijlstra 已提交
2642 2643 2644 2645 2646 2647 2648 2649 2650
EXPORT_SYMBOL(trace_hardirqs_off);

/*
 * Softirqs will be enabled:
 */
void trace_softirqs_on(unsigned long ip)
{
	struct task_struct *curr = current;

2651
	if (unlikely(!debug_locks || current->lockdep_recursion))
P
Peter Zijlstra 已提交
2652 2653
		return;

P
Peter Zijlstra 已提交
2654 2655 2656 2657
	/*
	 * We fancy IRQs being disabled here, see softirq.c, avoids
	 * funny state and nesting things.
	 */
P
Peter Zijlstra 已提交
2658 2659 2660 2661
	if (DEBUG_LOCKS_WARN_ON(!irqs_disabled()))
		return;

	if (curr->softirqs_enabled) {
2662
		debug_atomic_inc(redundant_softirqs_on);
P
Peter Zijlstra 已提交
2663 2664 2665
		return;
	}

2666
	current->lockdep_recursion = 1;
P
Peter Zijlstra 已提交
2667 2668 2669 2670 2671 2672
	/*
	 * We'll do an OFF -> ON transition:
	 */
	curr->softirqs_enabled = 1;
	curr->softirq_enable_ip = ip;
	curr->softirq_enable_event = ++curr->irq_events;
2673
	debug_atomic_inc(softirqs_on_events);
P
Peter Zijlstra 已提交
2674 2675 2676 2677 2678 2679
	/*
	 * We are going to turn softirqs on, so set the
	 * usage bit for all held locks, if hardirqs are
	 * enabled too:
	 */
	if (curr->hardirqs_enabled)
2680
		mark_held_locks(curr, SOFTIRQ);
2681
	current->lockdep_recursion = 0;
P
Peter Zijlstra 已提交
2682 2683 2684 2685 2686 2687 2688 2689 2690
}

/*
 * Softirqs were disabled:
 */
void trace_softirqs_off(unsigned long ip)
{
	struct task_struct *curr = current;

2691
	if (unlikely(!debug_locks || current->lockdep_recursion))
P
Peter Zijlstra 已提交
2692 2693
		return;

P
Peter Zijlstra 已提交
2694 2695 2696
	/*
	 * We fancy IRQs being disabled here, see softirq.c
	 */
P
Peter Zijlstra 已提交
2697 2698 2699 2700 2701 2702 2703 2704 2705 2706
	if (DEBUG_LOCKS_WARN_ON(!irqs_disabled()))
		return;

	if (curr->softirqs_enabled) {
		/*
		 * We have done an ON -> OFF transition:
		 */
		curr->softirqs_enabled = 0;
		curr->softirq_disable_ip = ip;
		curr->softirq_disable_event = ++curr->irq_events;
2707
		debug_atomic_inc(softirqs_off_events);
P
Peter Zijlstra 已提交
2708 2709 2710
		/*
		 * Whoops, we wanted softirqs off, so why aren't they?
		 */
P
Peter Zijlstra 已提交
2711 2712
		DEBUG_LOCKS_WARN_ON(!softirq_count());
	} else
2713
		debug_atomic_inc(redundant_softirqs_off);
P
Peter Zijlstra 已提交
2714 2715
}

2716
static void __lockdep_trace_alloc(gfp_t gfp_mask, unsigned long flags)
2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734
{
	struct task_struct *curr = current;

	if (unlikely(!debug_locks))
		return;

	/* no reclaim without waiting on it */
	if (!(gfp_mask & __GFP_WAIT))
		return;

	/* this guy won't enter reclaim */
	if ((curr->flags & PF_MEMALLOC) && !(gfp_mask & __GFP_NOMEMALLOC))
		return;

	/* We're only interested __GFP_FS allocations for now */
	if (!(gfp_mask & __GFP_FS))
		return;

P
Peter Zijlstra 已提交
2735 2736 2737
	/*
	 * Oi! Can't be having __GFP_FS allocations with IRQs disabled.
	 */
2738
	if (DEBUG_LOCKS_WARN_ON(irqs_disabled_flags(flags)))
2739 2740 2741 2742 2743
		return;

	mark_held_locks(curr, RECLAIM_FS);
}

2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760
static void check_flags(unsigned long flags);

void lockdep_trace_alloc(gfp_t gfp_mask)
{
	unsigned long flags;

	if (unlikely(current->lockdep_recursion))
		return;

	raw_local_irq_save(flags);
	check_flags(flags);
	current->lockdep_recursion = 1;
	__lockdep_trace_alloc(gfp_mask, flags);
	current->lockdep_recursion = 0;
	raw_local_irq_restore(flags);
}

P
Peter Zijlstra 已提交
2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788
static int mark_irqflags(struct task_struct *curr, struct held_lock *hlock)
{
	/*
	 * If non-trylock use in a hardirq or softirq context, then
	 * mark the lock as used in these contexts:
	 */
	if (!hlock->trylock) {
		if (hlock->read) {
			if (curr->hardirq_context)
				if (!mark_lock(curr, hlock,
						LOCK_USED_IN_HARDIRQ_READ))
					return 0;
			if (curr->softirq_context)
				if (!mark_lock(curr, hlock,
						LOCK_USED_IN_SOFTIRQ_READ))
					return 0;
		} else {
			if (curr->hardirq_context)
				if (!mark_lock(curr, hlock, LOCK_USED_IN_HARDIRQ))
					return 0;
			if (curr->softirq_context)
				if (!mark_lock(curr, hlock, LOCK_USED_IN_SOFTIRQ))
					return 0;
		}
	}
	if (!hlock->hardirqs_off) {
		if (hlock->read) {
			if (!mark_lock(curr, hlock,
P
Peter Zijlstra 已提交
2789
					LOCK_ENABLED_HARDIRQ_READ))
P
Peter Zijlstra 已提交
2790 2791 2792
				return 0;
			if (curr->softirqs_enabled)
				if (!mark_lock(curr, hlock,
P
Peter Zijlstra 已提交
2793
						LOCK_ENABLED_SOFTIRQ_READ))
P
Peter Zijlstra 已提交
2794 2795 2796
					return 0;
		} else {
			if (!mark_lock(curr, hlock,
P
Peter Zijlstra 已提交
2797
					LOCK_ENABLED_HARDIRQ))
P
Peter Zijlstra 已提交
2798 2799 2800
				return 0;
			if (curr->softirqs_enabled)
				if (!mark_lock(curr, hlock,
P
Peter Zijlstra 已提交
2801
						LOCK_ENABLED_SOFTIRQ))
P
Peter Zijlstra 已提交
2802 2803 2804 2805
					return 0;
		}
	}

2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821
	/*
	 * We reuse the irq context infrastructure more broadly as a general
	 * context checking code. This tests GFP_FS recursion (a lock taken
	 * during reclaim for a GFP_FS allocation is held over a GFP_FS
	 * allocation).
	 */
	if (!hlock->trylock && (curr->lockdep_reclaim_gfp & __GFP_FS)) {
		if (hlock->read) {
			if (!mark_lock(curr, hlock, LOCK_USED_IN_RECLAIM_FS_READ))
					return 0;
		} else {
			if (!mark_lock(curr, hlock, LOCK_USED_IN_RECLAIM_FS))
					return 0;
		}
	}

P
Peter Zijlstra 已提交
2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847
	return 1;
}

static int separate_irq_context(struct task_struct *curr,
		struct held_lock *hlock)
{
	unsigned int depth = curr->lockdep_depth;

	/*
	 * Keep track of points where we cross into an interrupt context:
	 */
	hlock->irq_context = 2*(curr->hardirq_context ? 1 : 0) +
				curr->softirq_context;
	if (depth) {
		struct held_lock *prev_hlock;

		prev_hlock = curr->held_locks + depth-1;
		/*
		 * If we cross into another context, reset the
		 * hash key (this also prevents the checking and the
		 * adding of the dependency to 'prev'):
		 */
		if (prev_hlock->irq_context != hlock->irq_context)
			return 1;
	}
	return 0;
I
Ingo Molnar 已提交
2848 2849
}

P
Peter Zijlstra 已提交
2850
#else /* defined(CONFIG_TRACE_IRQFLAGS) && defined(CONFIG_PROVE_LOCKING) */
I
Ingo Molnar 已提交
2851

P
Peter Zijlstra 已提交
2852 2853 2854
static inline
int mark_lock_irq(struct task_struct *curr, struct held_lock *this,
		enum lock_usage_bit new_bit)
I
Ingo Molnar 已提交
2855
{
P
Peter Zijlstra 已提交
2856
	WARN_ON(1); /* Impossible innit? when we don't have TRACE_IRQFLAG */
P
Peter Zijlstra 已提交
2857 2858
	return 1;
}
I
Ingo Molnar 已提交
2859

P
Peter Zijlstra 已提交
2860 2861 2862 2863 2864
static inline int mark_irqflags(struct task_struct *curr,
		struct held_lock *hlock)
{
	return 1;
}
I
Ingo Molnar 已提交
2865

P
Peter Zijlstra 已提交
2866 2867 2868 2869
static inline int separate_irq_context(struct task_struct *curr,
		struct held_lock *hlock)
{
	return 0;
I
Ingo Molnar 已提交
2870 2871
}

2872 2873 2874 2875
void lockdep_trace_alloc(gfp_t gfp_mask)
{
}

P
Peter Zijlstra 已提交
2876
#endif /* defined(CONFIG_TRACE_IRQFLAGS) && defined(CONFIG_PROVE_LOCKING) */
I
Ingo Molnar 已提交
2877 2878

/*
P
Peter Zijlstra 已提交
2879
 * Mark a lock with a usage bit, and validate the state transition:
I
Ingo Molnar 已提交
2880
 */
2881
static int mark_lock(struct task_struct *curr, struct held_lock *this,
2882
			     enum lock_usage_bit new_bit)
I
Ingo Molnar 已提交
2883
{
P
Peter Zijlstra 已提交
2884
	unsigned int new_mask = 1 << new_bit, ret = 1;
I
Ingo Molnar 已提交
2885 2886

	/*
P
Peter Zijlstra 已提交
2887 2888
	 * If already set then do not dirty the cacheline,
	 * nor do any checks:
I
Ingo Molnar 已提交
2889
	 */
D
Dave Jones 已提交
2890
	if (likely(hlock_class(this)->usage_mask & new_mask))
P
Peter Zijlstra 已提交
2891 2892 2893 2894
		return 1;

	if (!graph_lock())
		return 0;
I
Ingo Molnar 已提交
2895
	/*
L
Lucas De Marchi 已提交
2896
	 * Make sure we didn't race:
I
Ingo Molnar 已提交
2897
	 */
D
Dave Jones 已提交
2898
	if (unlikely(hlock_class(this)->usage_mask & new_mask)) {
P
Peter Zijlstra 已提交
2899 2900 2901
		graph_unlock();
		return 1;
	}
I
Ingo Molnar 已提交
2902

D
Dave Jones 已提交
2903
	hlock_class(this)->usage_mask |= new_mask;
I
Ingo Molnar 已提交
2904

D
Dave Jones 已提交
2905
	if (!save_trace(hlock_class(this)->usage_traces + new_bit))
P
Peter Zijlstra 已提交
2906
		return 0;
I
Ingo Molnar 已提交
2907

P
Peter Zijlstra 已提交
2908
	switch (new_bit) {
P
Peter Zijlstra 已提交
2909 2910 2911 2912 2913 2914 2915
#define LOCKDEP_STATE(__STATE)			\
	case LOCK_USED_IN_##__STATE:		\
	case LOCK_USED_IN_##__STATE##_READ:	\
	case LOCK_ENABLED_##__STATE:		\
	case LOCK_ENABLED_##__STATE##_READ:
#include "lockdep_states.h"
#undef LOCKDEP_STATE
P
Peter Zijlstra 已提交
2916 2917 2918 2919 2920
		ret = mark_lock_irq(curr, this, new_bit);
		if (!ret)
			return 0;
		break;
	case LOCK_USED:
2921
		debug_atomic_dec(nr_unused_locks);
P
Peter Zijlstra 已提交
2922 2923 2924 2925 2926 2927 2928
		break;
	default:
		if (!debug_locks_off_graph_unlock())
			return 0;
		WARN_ON(1);
		return 0;
	}
I
Ingo Molnar 已提交
2929

P
Peter Zijlstra 已提交
2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943
	graph_unlock();

	/*
	 * We must printk outside of the graph_lock:
	 */
	if (ret == 2) {
		printk("\nmarked lock as {%s}:\n", usage_str[new_bit]);
		print_lock(this);
		print_irqtrace_events(curr);
		dump_stack();
	}

	return ret;
}
I
Ingo Molnar 已提交
2944 2945 2946 2947 2948

/*
 * Initialize a lock instance's lock-class mapping info:
 */
void lockdep_init_map(struct lockdep_map *lock, const char *name,
2949
		      struct lock_class_key *key, int subclass)
I
Ingo Molnar 已提交
2950
{
2951
	memset(lock, 0, sizeof(*lock));
2952

2953 2954 2955 2956
#ifdef CONFIG_LOCK_STAT
	lock->cpu = raw_smp_processor_id();
#endif

P
Peter Zijlstra 已提交
2957 2958 2959
	/*
	 * Can't be having no nameless bastards around this place!
	 */
2960 2961
	if (DEBUG_LOCKS_WARN_ON(!name)) {
		lock->name = "NULL";
I
Ingo Molnar 已提交
2962
		return;
2963 2964 2965
	}

	lock->name = name;
I
Ingo Molnar 已提交
2966

P
Peter Zijlstra 已提交
2967 2968 2969
	/*
	 * No key, no joy, we need to hash something.
	 */
I
Ingo Molnar 已提交
2970 2971 2972 2973 2974 2975 2976
	if (DEBUG_LOCKS_WARN_ON(!key))
		return;
	/*
	 * Sanity check, the lock-class key must be persistent:
	 */
	if (!static_obj(key)) {
		printk("BUG: key %p not in .data!\n", key);
P
Peter Zijlstra 已提交
2977 2978 2979
		/*
		 * What it says above ^^^^^, I suggest you read it.
		 */
I
Ingo Molnar 已提交
2980 2981 2982 2983
		DEBUG_LOCKS_WARN_ON(1);
		return;
	}
	lock->key = key;
2984 2985 2986 2987

	if (unlikely(!debug_locks))
		return;

2988 2989
	if (subclass)
		register_lock_class(lock, subclass, 1);
I
Ingo Molnar 已提交
2990 2991 2992
}
EXPORT_SYMBOL_GPL(lockdep_init_map);

2993 2994
struct lock_class_key __lockdep_no_validate__;

I
Ingo Molnar 已提交
2995 2996 2997 2998 2999 3000
/*
 * This gets called for every mutex_lock*()/spin_lock*() operation.
 * We maintain the dependency maps and validate the locking attempt:
 */
static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass,
			  int trylock, int read, int check, int hardirqs_off,
3001 3002
			  struct lockdep_map *nest_lock, unsigned long ip,
			  int references)
I
Ingo Molnar 已提交
3003 3004
{
	struct task_struct *curr = current;
3005
	struct lock_class *class = NULL;
I
Ingo Molnar 已提交
3006 3007 3008
	struct held_lock *hlock;
	unsigned int depth, id;
	int chain_head = 0;
3009
	int class_idx;
I
Ingo Molnar 已提交
3010 3011
	u64 chain_key;

P
Peter Zijlstra 已提交
3012 3013 3014
	if (!prove_locking)
		check = 1;

I
Ingo Molnar 已提交
3015 3016 3017
	if (unlikely(!debug_locks))
		return 0;

P
Peter Zijlstra 已提交
3018 3019 3020 3021 3022
	/*
	 * Lockdep should run with IRQs disabled, otherwise we could
	 * get an interrupt which would want to take locks, which would
	 * end up in lockdep and have you got a head-ache already?
	 */
I
Ingo Molnar 已提交
3023 3024 3025
	if (DEBUG_LOCKS_WARN_ON(!irqs_disabled()))
		return 0;

3026 3027 3028
	if (lock->key == &__lockdep_no_validate__)
		check = 1;

3029 3030
	if (subclass < NR_LOCKDEP_CACHING_CLASSES)
		class = lock->class_cache[subclass];
3031
	/*
3032
	 * Not cached?
3033
	 */
I
Ingo Molnar 已提交
3034
	if (unlikely(!class)) {
3035
		class = register_lock_class(lock, subclass, 0);
I
Ingo Molnar 已提交
3036 3037 3038
		if (!class)
			return 0;
	}
3039
	atomic_inc((atomic_t *)&class->ops);
I
Ingo Molnar 已提交
3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053
	if (very_verbose(class)) {
		printk("\nacquire class [%p] %s", class->key, class->name);
		if (class->name_version > 1)
			printk("#%d", class->name_version);
		printk("\n");
		dump_stack();
	}

	/*
	 * Add the lock to the list of currently held locks.
	 * (we dont increase the depth just yet, up until the
	 * dependency checks are done)
	 */
	depth = curr->lockdep_depth;
P
Peter Zijlstra 已提交
3054 3055 3056
	/*
	 * Ran out of static storage for our per-task lock stack again have we?
	 */
I
Ingo Molnar 已提交
3057 3058 3059
	if (DEBUG_LOCKS_WARN_ON(depth >= MAX_LOCK_DEPTH))
		return 0;

3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073
	class_idx = class - lock_classes + 1;

	if (depth) {
		hlock = curr->held_locks + depth - 1;
		if (hlock->class_idx == class_idx && nest_lock) {
			if (hlock->references)
				hlock->references++;
			else
				hlock->references = 2;

			return 1;
		}
	}

I
Ingo Molnar 已提交
3074
	hlock = curr->held_locks + depth;
P
Peter Zijlstra 已提交
3075 3076 3077 3078
	/*
	 * Plain impossible, we just registered it and checked it weren't no
	 * NULL like.. I bet this mushroom I ate was good!
	 */
D
Dave Jones 已提交
3079 3080
	if (DEBUG_LOCKS_WARN_ON(!class))
		return 0;
3081
	hlock->class_idx = class_idx;
I
Ingo Molnar 已提交
3082 3083
	hlock->acquire_ip = ip;
	hlock->instance = lock;
P
Peter Zijlstra 已提交
3084
	hlock->nest_lock = nest_lock;
I
Ingo Molnar 已提交
3085 3086 3087
	hlock->trylock = trylock;
	hlock->read = read;
	hlock->check = check;
3088
	hlock->hardirqs_off = !!hardirqs_off;
3089
	hlock->references = references;
P
Peter Zijlstra 已提交
3090 3091
#ifdef CONFIG_LOCK_STAT
	hlock->waittime_stamp = 0;
3092
	hlock->holdtime_stamp = lockstat_clock();
P
Peter Zijlstra 已提交
3093
#endif
I
Ingo Molnar 已提交
3094

P
Peter Zijlstra 已提交
3095 3096 3097
	if (check == 2 && !mark_irqflags(curr, hlock))
		return 0;

I
Ingo Molnar 已提交
3098
	/* mark it as used: */
3099
	if (!mark_lock(curr, hlock, LOCK_USED))
I
Ingo Molnar 已提交
3100
		return 0;
P
Peter Zijlstra 已提交
3101

I
Ingo Molnar 已提交
3102
	/*
3103
	 * Calculate the chain hash: it's the combined hash of all the
I
Ingo Molnar 已提交
3104 3105 3106 3107 3108 3109 3110 3111 3112
	 * lock keys along the dependency chain. We save the hash value
	 * at every step so that we can get the current hash easily
	 * after unlock. The chain hash is then used to cache dependency
	 * results.
	 *
	 * The 'key ID' is what is the most compact key value to drive
	 * the hash, not class->key.
	 */
	id = class - lock_classes;
P
Peter Zijlstra 已提交
3113 3114 3115
	/*
	 * Whoops, we did it again.. ran straight out of our static allocation.
	 */
I
Ingo Molnar 已提交
3116 3117 3118 3119 3120
	if (DEBUG_LOCKS_WARN_ON(id >= MAX_LOCKDEP_KEYS))
		return 0;

	chain_key = curr->curr_chain_key;
	if (!depth) {
P
Peter Zijlstra 已提交
3121 3122 3123
		/*
		 * How can we have a chain hash when we ain't got no keys?!
		 */
I
Ingo Molnar 已提交
3124 3125 3126 3127 3128 3129
		if (DEBUG_LOCKS_WARN_ON(chain_key != 0))
			return 0;
		chain_head = 1;
	}

	hlock->prev_chain_key = chain_key;
P
Peter Zijlstra 已提交
3130 3131 3132
	if (separate_irq_context(curr, hlock)) {
		chain_key = 0;
		chain_head = 1;
I
Ingo Molnar 已提交
3133 3134 3135
	}
	chain_key = iterate_chain_key(chain_key, id);

3136
	if (!validate_chain(curr, lock, hlock, chain_head, chain_key))
P
Peter Zijlstra 已提交
3137
		return 0;
3138

3139
	curr->curr_chain_key = chain_key;
I
Ingo Molnar 已提交
3140 3141
	curr->lockdep_depth++;
	check_chain_key(curr);
3142 3143 3144 3145
#ifdef CONFIG_DEBUG_LOCKDEP
	if (unlikely(!debug_locks))
		return 0;
#endif
I
Ingo Molnar 已提交
3146 3147 3148 3149
	if (unlikely(curr->lockdep_depth >= MAX_LOCK_DEPTH)) {
		debug_locks_off();
		printk("BUG: MAX_LOCK_DEPTH too low!\n");
		printk("turning off the locking correctness validator.\n");
3150
		dump_stack();
I
Ingo Molnar 已提交
3151 3152
		return 0;
	}
3153

I
Ingo Molnar 已提交
3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168
	if (unlikely(curr->lockdep_depth > max_lockdep_depth))
		max_lockdep_depth = curr->lockdep_depth;

	return 1;
}

static int
print_unlock_inbalance_bug(struct task_struct *curr, struct lockdep_map *lock,
			   unsigned long ip)
{
	if (!debug_locks_off())
		return 0;
	if (debug_locks_silent)
		return 0;

3169 3170 3171 3172
	printk("\n");
	printk("=====================================\n");
	printk("[ BUG: bad unlock balance detected! ]\n");
	printk("-------------------------------------\n");
I
Ingo Molnar 已提交
3173
	printk("%s/%d is trying to release lock (",
3174
		curr->comm, task_pid_nr(curr));
I
Ingo Molnar 已提交
3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195
	print_lockdep_cache(lock);
	printk(") at:\n");
	print_ip_sym(ip);
	printk("but there are no more locks to release!\n");
	printk("\nother info that might help us debug this:\n");
	lockdep_print_held_locks(curr);

	printk("\nstack backtrace:\n");
	dump_stack();

	return 0;
}

/*
 * Common debugging checks for both nested and non-nested unlock:
 */
static int check_unlock(struct task_struct *curr, struct lockdep_map *lock,
			unsigned long ip)
{
	if (unlikely(!debug_locks))
		return 0;
P
Peter Zijlstra 已提交
3196 3197 3198
	/*
	 * Lockdep should run with IRQs disabled, recursion, head-ache, etc..
	 */
I
Ingo Molnar 已提交
3199 3200 3201 3202 3203 3204 3205 3206 3207
	if (DEBUG_LOCKS_WARN_ON(!irqs_disabled()))
		return 0;

	if (curr->lockdep_depth <= 0)
		return print_unlock_inbalance_bug(curr, lock, ip);

	return 1;
}

3208 3209 3210 3211 3212 3213
static int match_held_lock(struct held_lock *hlock, struct lockdep_map *lock)
{
	if (hlock->instance == lock)
		return 1;

	if (hlock->references) {
3214
		struct lock_class *class = lock->class_cache[0];
3215 3216 3217 3218

		if (!class)
			class = look_up_lock_class(lock, 0);

3219 3220 3221 3222 3223 3224 3225
		/*
		 * If look_up_lock_class() failed to find a class, we're trying
		 * to test if we hold a lock that has never yet been acquired.
		 * Clearly if the lock hasn't been acquired _ever_, we're not
		 * holding it either, so report failure.
		 */
		if (!class)
3226 3227
			return 0;

P
Peter Zijlstra 已提交
3228 3229 3230 3231 3232
		/*
		 * References, but not a lock we're actually ref-counting?
		 * State got messed up, follow the sites that change ->references
		 * and try to make sense of it.
		 */
3233 3234 3235 3236 3237 3238 3239 3240 3241 3242
		if (DEBUG_LOCKS_WARN_ON(!hlock->nest_lock))
			return 0;

		if (hlock->class_idx == class - lock_classes + 1)
			return 1;
	}

	return 0;
}

3243
static int
3244 3245 3246
__lock_set_class(struct lockdep_map *lock, const char *name,
		 struct lock_class_key *key, unsigned int subclass,
		 unsigned long ip)
3247 3248 3249 3250 3251 3252 3253 3254
{
	struct task_struct *curr = current;
	struct held_lock *hlock, *prev_hlock;
	struct lock_class *class;
	unsigned int depth;
	int i;

	depth = curr->lockdep_depth;
P
Peter Zijlstra 已提交
3255 3256 3257 3258
	/*
	 * This function is about (re)setting the class of a held lock,
	 * yet we're not actually holding any locks. Naughty user!
	 */
3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269
	if (DEBUG_LOCKS_WARN_ON(!depth))
		return 0;

	prev_hlock = NULL;
	for (i = depth-1; i >= 0; i--) {
		hlock = curr->held_locks + i;
		/*
		 * We must not cross into another context:
		 */
		if (prev_hlock && prev_hlock->irq_context != hlock->irq_context)
			break;
3270
		if (match_held_lock(hlock, lock))
3271 3272 3273 3274 3275 3276
			goto found_it;
		prev_hlock = hlock;
	}
	return print_unlock_inbalance_bug(curr, lock, ip);

found_it:
3277
	lockdep_init_map(lock, name, key, 0);
3278
	class = register_lock_class(lock, subclass, 0);
D
Dave Jones 已提交
3279
	hlock->class_idx = class - lock_classes + 1;
3280 3281 3282 3283 3284 3285 3286

	curr->lockdep_depth = i;
	curr->curr_chain_key = hlock->prev_chain_key;

	for (; i < depth; i++) {
		hlock = curr->held_locks + i;
		if (!__lock_acquire(hlock->instance,
D
Dave Jones 已提交
3287
			hlock_class(hlock)->subclass, hlock->trylock,
3288
				hlock->read, hlock->check, hlock->hardirqs_off,
3289 3290
				hlock->nest_lock, hlock->acquire_ip,
				hlock->references))
3291 3292 3293
			return 0;
	}

P
Peter Zijlstra 已提交
3294 3295 3296 3297
	/*
	 * I took it apart and put it back together again, except now I have
	 * these 'spare' parts.. where shall I put them.
	 */
3298 3299 3300 3301 3302
	if (DEBUG_LOCKS_WARN_ON(curr->lockdep_depth != depth))
		return 0;
	return 1;
}

I
Ingo Molnar 已提交
3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321
/*
 * Remove the lock to the list of currently held locks in a
 * potentially non-nested (out of order) manner. This is a
 * relatively rare operation, as all the unlock APIs default
 * to nested mode (which uses lock_release()):
 */
static int
lock_release_non_nested(struct task_struct *curr,
			struct lockdep_map *lock, unsigned long ip)
{
	struct held_lock *hlock, *prev_hlock;
	unsigned int depth;
	int i;

	/*
	 * Check whether the lock exists in the current stack
	 * of held locks:
	 */
	depth = curr->lockdep_depth;
P
Peter Zijlstra 已提交
3322 3323 3324 3325
	/*
	 * So we're all set to release this lock.. wait what lock? We don't
	 * own any locks, you've been drinking again?
	 */
I
Ingo Molnar 已提交
3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336
	if (DEBUG_LOCKS_WARN_ON(!depth))
		return 0;

	prev_hlock = NULL;
	for (i = depth-1; i >= 0; i--) {
		hlock = curr->held_locks + i;
		/*
		 * We must not cross into another context:
		 */
		if (prev_hlock && prev_hlock->irq_context != hlock->irq_context)
			break;
3337
		if (match_held_lock(hlock, lock))
I
Ingo Molnar 已提交
3338 3339 3340 3341 3342 3343
			goto found_it;
		prev_hlock = hlock;
	}
	return print_unlock_inbalance_bug(curr, lock, ip);

found_it:
3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357
	if (hlock->instance == lock)
		lock_release_holdtime(hlock);

	if (hlock->references) {
		hlock->references--;
		if (hlock->references) {
			/*
			 * We had, and after removing one, still have
			 * references, the current lock stack is still
			 * valid. We're done!
			 */
			return 1;
		}
	}
P
Peter Zijlstra 已提交
3358

I
Ingo Molnar 已提交
3359 3360 3361 3362 3363
	/*
	 * We have the right lock to unlock, 'hlock' points to it.
	 * Now we remove it from the stack, and add back the other
	 * entries (if any), recalculating the hash along the way:
	 */
3364

I
Ingo Molnar 已提交
3365 3366 3367 3368 3369 3370
	curr->lockdep_depth = i;
	curr->curr_chain_key = hlock->prev_chain_key;

	for (i++; i < depth; i++) {
		hlock = curr->held_locks + i;
		if (!__lock_acquire(hlock->instance,
D
Dave Jones 已提交
3371
			hlock_class(hlock)->subclass, hlock->trylock,
I
Ingo Molnar 已提交
3372
				hlock->read, hlock->check, hlock->hardirqs_off,
3373 3374
				hlock->nest_lock, hlock->acquire_ip,
				hlock->references))
I
Ingo Molnar 已提交
3375 3376 3377
			return 0;
	}

P
Peter Zijlstra 已提交
3378 3379 3380 3381
	/*
	 * We had N bottles of beer on the wall, we drank one, but now
	 * there's not N-1 bottles of beer left on the wall...
	 */
I
Ingo Molnar 已提交
3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407
	if (DEBUG_LOCKS_WARN_ON(curr->lockdep_depth != depth - 1))
		return 0;
	return 1;
}

/*
 * Remove the lock to the list of currently held locks - this gets
 * called on mutex_unlock()/spin_unlock*() (or on a failed
 * mutex_lock_interruptible()). This is done for unlocks that nest
 * perfectly. (i.e. the current top of the lock-stack is unlocked)
 */
static int lock_release_nested(struct task_struct *curr,
			       struct lockdep_map *lock, unsigned long ip)
{
	struct held_lock *hlock;
	unsigned int depth;

	/*
	 * Pop off the top of the lock stack:
	 */
	depth = curr->lockdep_depth - 1;
	hlock = curr->held_locks + depth;

	/*
	 * Is the unlock non-nested:
	 */
3408
	if (hlock->instance != lock || hlock->references)
I
Ingo Molnar 已提交
3409 3410 3411
		return lock_release_non_nested(curr, lock, ip);
	curr->lockdep_depth--;

P
Peter Zijlstra 已提交
3412 3413 3414
	/*
	 * No more locks, but somehow we've got hash left over, who left it?
	 */
I
Ingo Molnar 已提交
3415 3416 3417 3418 3419
	if (DEBUG_LOCKS_WARN_ON(!depth && (hlock->prev_chain_key != 0)))
		return 0;

	curr->curr_chain_key = hlock->prev_chain_key;

P
Peter Zijlstra 已提交
3420 3421
	lock_release_holdtime(hlock);

I
Ingo Molnar 已提交
3422 3423
#ifdef CONFIG_DEBUG_LOCKDEP
	hlock->prev_chain_key = 0;
D
Dave Jones 已提交
3424
	hlock->class_idx = 0;
I
Ingo Molnar 已提交
3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455
	hlock->acquire_ip = 0;
	hlock->irq_context = 0;
#endif
	return 1;
}

/*
 * Remove the lock to the list of currently held locks - this gets
 * called on mutex_unlock()/spin_unlock*() (or on a failed
 * mutex_lock_interruptible()). This is done for unlocks that nest
 * perfectly. (i.e. the current top of the lock-stack is unlocked)
 */
static void
__lock_release(struct lockdep_map *lock, int nested, unsigned long ip)
{
	struct task_struct *curr = current;

	if (!check_unlock(curr, lock, ip))
		return;

	if (nested) {
		if (!lock_release_nested(curr, lock, ip))
			return;
	} else {
		if (!lock_release_non_nested(curr, lock, ip))
			return;
	}

	check_chain_key(curr);
}

3456 3457 3458 3459 3460 3461
static int __lock_is_held(struct lockdep_map *lock)
{
	struct task_struct *curr = current;
	int i;

	for (i = 0; i < curr->lockdep_depth; i++) {
3462 3463 3464
		struct held_lock *hlock = curr->held_locks + i;

		if (match_held_lock(hlock, lock))
3465 3466 3467 3468 3469 3470
			return 1;
	}

	return 0;
}

I
Ingo Molnar 已提交
3471 3472 3473
/*
 * Check whether we follow the irq-flags state precisely:
 */
3474
static void check_flags(unsigned long flags)
I
Ingo Molnar 已提交
3475
{
3476 3477
#if defined(CONFIG_PROVE_LOCKING) && defined(CONFIG_DEBUG_LOCKDEP) && \
    defined(CONFIG_TRACE_IRQFLAGS)
I
Ingo Molnar 已提交
3478 3479 3480
	if (!debug_locks)
		return;

3481 3482 3483 3484 3485 3486 3487 3488 3489
	if (irqs_disabled_flags(flags)) {
		if (DEBUG_LOCKS_WARN_ON(current->hardirqs_enabled)) {
			printk("possible reason: unannotated irqs-off.\n");
		}
	} else {
		if (DEBUG_LOCKS_WARN_ON(!current->hardirqs_enabled)) {
			printk("possible reason: unannotated irqs-on.\n");
		}
	}
I
Ingo Molnar 已提交
3490 3491 3492 3493 3494 3495 3496

	/*
	 * We dont accurately track softirq state in e.g.
	 * hardirq contexts (such as on 4KSTACKS), so only
	 * check if not in hardirq contexts:
	 */
	if (!hardirq_count()) {
P
Peter Zijlstra 已提交
3497 3498
		if (softirq_count()) {
			/* like the above, but with softirqs */
I
Ingo Molnar 已提交
3499
			DEBUG_LOCKS_WARN_ON(current->softirqs_enabled);
P
Peter Zijlstra 已提交
3500 3501
		} else {
			/* lick the above, does it taste good? */
I
Ingo Molnar 已提交
3502
			DEBUG_LOCKS_WARN_ON(!current->softirqs_enabled);
P
Peter Zijlstra 已提交
3503
		}
I
Ingo Molnar 已提交
3504 3505 3506 3507 3508 3509 3510
	}

	if (!debug_locks)
		print_irqtrace_events(current);
#endif
}

3511 3512 3513
void lock_set_class(struct lockdep_map *lock, const char *name,
		    struct lock_class_key *key, unsigned int subclass,
		    unsigned long ip)
3514 3515 3516 3517 3518 3519 3520 3521 3522
{
	unsigned long flags;

	if (unlikely(current->lockdep_recursion))
		return;

	raw_local_irq_save(flags);
	current->lockdep_recursion = 1;
	check_flags(flags);
3523
	if (__lock_set_class(lock, name, key, subclass, ip))
3524 3525 3526 3527
		check_chain_key(current);
	current->lockdep_recursion = 0;
	raw_local_irq_restore(flags);
}
3528
EXPORT_SYMBOL_GPL(lock_set_class);
3529

I
Ingo Molnar 已提交
3530 3531 3532 3533
/*
 * We are not always called with irqs disabled - do that here,
 * and also avoid lockdep recursion:
 */
3534
void lock_acquire(struct lockdep_map *lock, unsigned int subclass,
P
Peter Zijlstra 已提交
3535 3536
			  int trylock, int read, int check,
			  struct lockdep_map *nest_lock, unsigned long ip)
I
Ingo Molnar 已提交
3537 3538 3539 3540 3541 3542 3543 3544 3545 3546
{
	unsigned long flags;

	if (unlikely(current->lockdep_recursion))
		return;

	raw_local_irq_save(flags);
	check_flags(flags);

	current->lockdep_recursion = 1;
3547
	trace_lock_acquire(lock, subclass, trylock, read, check, nest_lock, ip);
I
Ingo Molnar 已提交
3548
	__lock_acquire(lock, subclass, trylock, read, check,
3549
		       irqs_disabled_flags(flags), nest_lock, ip, 0);
I
Ingo Molnar 已提交
3550 3551 3552 3553 3554
	current->lockdep_recursion = 0;
	raw_local_irq_restore(flags);
}
EXPORT_SYMBOL_GPL(lock_acquire);

3555
void lock_release(struct lockdep_map *lock, int nested,
3556
			  unsigned long ip)
I
Ingo Molnar 已提交
3557 3558 3559 3560 3561 3562 3563 3564 3565
{
	unsigned long flags;

	if (unlikely(current->lockdep_recursion))
		return;

	raw_local_irq_save(flags);
	check_flags(flags);
	current->lockdep_recursion = 1;
3566
	trace_lock_release(lock, ip);
I
Ingo Molnar 已提交
3567 3568 3569 3570 3571 3572
	__lock_release(lock, nested, ip);
	current->lockdep_recursion = 0;
	raw_local_irq_restore(flags);
}
EXPORT_SYMBOL_GPL(lock_release);

3573 3574 3575 3576 3577 3578
int lock_is_held(struct lockdep_map *lock)
{
	unsigned long flags;
	int ret = 0;

	if (unlikely(current->lockdep_recursion))
3579
		return 1; /* avoid false negative lockdep_assert_held() */
3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592

	raw_local_irq_save(flags);
	check_flags(flags);

	current->lockdep_recursion = 1;
	ret = __lock_is_held(lock);
	current->lockdep_recursion = 0;
	raw_local_irq_restore(flags);

	return ret;
}
EXPORT_SYMBOL_GPL(lock_is_held);

3593 3594 3595 3596 3597 3598 3599 3600 3601 3602
void lockdep_set_current_reclaim_state(gfp_t gfp_mask)
{
	current->lockdep_reclaim_gfp = gfp_mask;
}

void lockdep_clear_current_reclaim_state(void)
{
	current->lockdep_reclaim_gfp = 0;
}

P
Peter Zijlstra 已提交
3603 3604 3605 3606 3607 3608 3609 3610 3611 3612
#ifdef CONFIG_LOCK_STAT
static int
print_lock_contention_bug(struct task_struct *curr, struct lockdep_map *lock,
			   unsigned long ip)
{
	if (!debug_locks_off())
		return 0;
	if (debug_locks_silent)
		return 0;

3613 3614 3615 3616
	printk("\n");
	printk("=================================\n");
	printk("[ BUG: bad contention detected! ]\n");
	printk("---------------------------------\n");
P
Peter Zijlstra 已提交
3617
	printk("%s/%d is trying to contend lock (",
3618
		curr->comm, task_pid_nr(curr));
P
Peter Zijlstra 已提交
3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638
	print_lockdep_cache(lock);
	printk(") at:\n");
	print_ip_sym(ip);
	printk("but there are no locks held!\n");
	printk("\nother info that might help us debug this:\n");
	lockdep_print_held_locks(curr);

	printk("\nstack backtrace:\n");
	dump_stack();

	return 0;
}

static void
__lock_contended(struct lockdep_map *lock, unsigned long ip)
{
	struct task_struct *curr = current;
	struct held_lock *hlock, *prev_hlock;
	struct lock_class_stats *stats;
	unsigned int depth;
P
Peter Zijlstra 已提交
3639
	int i, contention_point, contending_point;
P
Peter Zijlstra 已提交
3640 3641

	depth = curr->lockdep_depth;
P
Peter Zijlstra 已提交
3642 3643 3644 3645
	/*
	 * Whee, we contended on this lock, except it seems we're not
	 * actually trying to acquire anything much at all..
	 */
P
Peter Zijlstra 已提交
3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656
	if (DEBUG_LOCKS_WARN_ON(!depth))
		return;

	prev_hlock = NULL;
	for (i = depth-1; i >= 0; i--) {
		hlock = curr->held_locks + i;
		/*
		 * We must not cross into another context:
		 */
		if (prev_hlock && prev_hlock->irq_context != hlock->irq_context)
			break;
3657
		if (match_held_lock(hlock, lock))
P
Peter Zijlstra 已提交
3658 3659 3660 3661 3662 3663 3664
			goto found_it;
		prev_hlock = hlock;
	}
	print_lock_contention_bug(curr, lock, ip);
	return;

found_it:
3665 3666 3667
	if (hlock->instance != lock)
		return;

3668
	hlock->waittime_stamp = lockstat_clock();
P
Peter Zijlstra 已提交
3669

P
Peter Zijlstra 已提交
3670 3671 3672
	contention_point = lock_point(hlock_class(hlock)->contention_point, ip);
	contending_point = lock_point(hlock_class(hlock)->contending_point,
				      lock->ip);
P
Peter Zijlstra 已提交
3673

D
Dave Jones 已提交
3674
	stats = get_lock_stats(hlock_class(hlock));
P
Peter Zijlstra 已提交
3675 3676 3677 3678
	if (contention_point < LOCKSTAT_POINTS)
		stats->contention_point[contention_point]++;
	if (contending_point < LOCKSTAT_POINTS)
		stats->contending_point[contending_point]++;
P
Peter Zijlstra 已提交
3679 3680
	if (lock->cpu != smp_processor_id())
		stats->bounces[bounce_contended + !!hlock->read]++;
P
Peter Zijlstra 已提交
3681 3682 3683 3684
	put_lock_stats(stats);
}

static void
P
Peter Zijlstra 已提交
3685
__lock_acquired(struct lockdep_map *lock, unsigned long ip)
P
Peter Zijlstra 已提交
3686 3687 3688 3689 3690
{
	struct task_struct *curr = current;
	struct held_lock *hlock, *prev_hlock;
	struct lock_class_stats *stats;
	unsigned int depth;
3691
	u64 now, waittime = 0;
P
Peter Zijlstra 已提交
3692
	int i, cpu;
P
Peter Zijlstra 已提交
3693 3694

	depth = curr->lockdep_depth;
P
Peter Zijlstra 已提交
3695 3696 3697 3698
	/*
	 * Yay, we acquired ownership of this lock we didn't try to
	 * acquire, how the heck did that happen?
	 */
P
Peter Zijlstra 已提交
3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709
	if (DEBUG_LOCKS_WARN_ON(!depth))
		return;

	prev_hlock = NULL;
	for (i = depth-1; i >= 0; i--) {
		hlock = curr->held_locks + i;
		/*
		 * We must not cross into another context:
		 */
		if (prev_hlock && prev_hlock->irq_context != hlock->irq_context)
			break;
3710
		if (match_held_lock(hlock, lock))
P
Peter Zijlstra 已提交
3711 3712 3713 3714 3715 3716 3717
			goto found_it;
		prev_hlock = hlock;
	}
	print_lock_contention_bug(curr, lock, _RET_IP_);
	return;

found_it:
3718 3719 3720
	if (hlock->instance != lock)
		return;

P
Peter Zijlstra 已提交
3721 3722
	cpu = smp_processor_id();
	if (hlock->waittime_stamp) {
3723
		now = lockstat_clock();
P
Peter Zijlstra 已提交
3724 3725 3726
		waittime = now - hlock->waittime_stamp;
		hlock->holdtime_stamp = now;
	}
P
Peter Zijlstra 已提交
3727

3728
	trace_lock_acquired(lock, ip);
3729

D
Dave Jones 已提交
3730
	stats = get_lock_stats(hlock_class(hlock));
P
Peter Zijlstra 已提交
3731 3732 3733 3734 3735 3736 3737 3738
	if (waittime) {
		if (hlock->read)
			lock_time_inc(&stats->read_waittime, waittime);
		else
			lock_time_inc(&stats->write_waittime, waittime);
	}
	if (lock->cpu != cpu)
		stats->bounces[bounce_acquired + !!hlock->read]++;
P
Peter Zijlstra 已提交
3739
	put_lock_stats(stats);
P
Peter Zijlstra 已提交
3740 3741

	lock->cpu = cpu;
P
Peter Zijlstra 已提交
3742
	lock->ip = ip;
P
Peter Zijlstra 已提交
3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757
}

void lock_contended(struct lockdep_map *lock, unsigned long ip)
{
	unsigned long flags;

	if (unlikely(!lock_stat))
		return;

	if (unlikely(current->lockdep_recursion))
		return;

	raw_local_irq_save(flags);
	check_flags(flags);
	current->lockdep_recursion = 1;
3758
	trace_lock_contended(lock, ip);
P
Peter Zijlstra 已提交
3759 3760 3761 3762 3763 3764
	__lock_contended(lock, ip);
	current->lockdep_recursion = 0;
	raw_local_irq_restore(flags);
}
EXPORT_SYMBOL_GPL(lock_contended);

P
Peter Zijlstra 已提交
3765
void lock_acquired(struct lockdep_map *lock, unsigned long ip)
P
Peter Zijlstra 已提交
3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777
{
	unsigned long flags;

	if (unlikely(!lock_stat))
		return;

	if (unlikely(current->lockdep_recursion))
		return;

	raw_local_irq_save(flags);
	check_flags(flags);
	current->lockdep_recursion = 1;
P
Peter Zijlstra 已提交
3778
	__lock_acquired(lock, ip);
P
Peter Zijlstra 已提交
3779 3780 3781 3782 3783 3784
	current->lockdep_recursion = 0;
	raw_local_irq_restore(flags);
}
EXPORT_SYMBOL_GPL(lock_acquired);
#endif

I
Ingo Molnar 已提交
3785 3786 3787 3788 3789 3790 3791 3792
/*
 * Used by the testsuite, sanitize the validator state
 * after a simulated failure:
 */

void lockdep_reset(void)
{
	unsigned long flags;
3793
	int i;
I
Ingo Molnar 已提交
3794 3795 3796 3797 3798 3799 3800 3801 3802 3803

	raw_local_irq_save(flags);
	current->curr_chain_key = 0;
	current->lockdep_depth = 0;
	current->lockdep_recursion = 0;
	memset(current->held_locks, 0, MAX_LOCK_DEPTH*sizeof(struct held_lock));
	nr_hardirq_chains = 0;
	nr_softirq_chains = 0;
	nr_process_chains = 0;
	debug_locks = 1;
3804 3805
	for (i = 0; i < CHAINHASH_SIZE; i++)
		INIT_LIST_HEAD(chainhash_table + i);
I
Ingo Molnar 已提交
3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826
	raw_local_irq_restore(flags);
}

static void zap_class(struct lock_class *class)
{
	int i;

	/*
	 * Remove all dependencies this lock is
	 * involved in:
	 */
	for (i = 0; i < nr_list_entries; i++) {
		if (list_entries[i].class == class)
			list_del_rcu(&list_entries[i].entry);
	}
	/*
	 * Unhash the class and remove it from the all_lock_classes list:
	 */
	list_del_rcu(&class->hash_entry);
	list_del_rcu(&class->lock_entry);

3827
	class->key = NULL;
I
Ingo Molnar 已提交
3828 3829
}

3830
static inline int within(const void *addr, void *start, unsigned long size)
I
Ingo Molnar 已提交
3831 3832 3833 3834 3835 3836 3837 3838 3839 3840
{
	return addr >= start && addr < start + size;
}

void lockdep_free_key_range(void *start, unsigned long size)
{
	struct lock_class *class, *next;
	struct list_head *head;
	unsigned long flags;
	int i;
3841
	int locked;
I
Ingo Molnar 已提交
3842 3843

	raw_local_irq_save(flags);
3844
	locked = graph_lock();
I
Ingo Molnar 已提交
3845 3846 3847 3848 3849 3850 3851 3852

	/*
	 * Unhash all classes that were created by this module:
	 */
	for (i = 0; i < CLASSHASH_SIZE; i++) {
		head = classhash_table + i;
		if (list_empty(head))
			continue;
3853
		list_for_each_entry_safe(class, next, head, hash_entry) {
I
Ingo Molnar 已提交
3854 3855
			if (within(class->key, start, size))
				zap_class(class);
3856 3857 3858
			else if (within(class->name, start, size))
				zap_class(class);
		}
I
Ingo Molnar 已提交
3859 3860
	}

3861 3862
	if (locked)
		graph_unlock();
I
Ingo Molnar 已提交
3863 3864 3865 3866 3867
	raw_local_irq_restore(flags);
}

void lockdep_reset_lock(struct lockdep_map *lock)
{
3868
	struct lock_class *class, *next;
I
Ingo Molnar 已提交
3869 3870 3871
	struct list_head *head;
	unsigned long flags;
	int i, j;
3872
	int locked;
I
Ingo Molnar 已提交
3873 3874 3875 3876

	raw_local_irq_save(flags);

	/*
3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889
	 * Remove all classes this lock might have:
	 */
	for (j = 0; j < MAX_LOCKDEP_SUBCLASSES; j++) {
		/*
		 * If the class exists we look it up and zap it:
		 */
		class = look_up_lock_class(lock, j);
		if (class)
			zap_class(class);
	}
	/*
	 * Debug check: in the end all mapped classes should
	 * be gone.
I
Ingo Molnar 已提交
3890
	 */
3891
	locked = graph_lock();
I
Ingo Molnar 已提交
3892 3893 3894 3895 3896
	for (i = 0; i < CLASSHASH_SIZE; i++) {
		head = classhash_table + i;
		if (list_empty(head))
			continue;
		list_for_each_entry_safe(class, next, head, hash_entry) {
3897 3898 3899 3900 3901 3902
			int match = 0;

			for (j = 0; j < NR_LOCKDEP_CACHING_CLASSES; j++)
				match |= class == lock->class_cache[j];

			if (unlikely(match)) {
P
Peter Zijlstra 已提交
3903 3904 3905 3906
				if (debug_locks_off_graph_unlock()) {
					/*
					 * We all just reset everything, how did it match?
					 */
3907
					WARN_ON(1);
P
Peter Zijlstra 已提交
3908
				}
3909
				goto out_restore;
I
Ingo Molnar 已提交
3910 3911 3912
			}
		}
	}
3913 3914
	if (locked)
		graph_unlock();
3915 3916

out_restore:
I
Ingo Molnar 已提交
3917 3918 3919
	raw_local_irq_restore(flags);
}

3920
void lockdep_init(void)
I
Ingo Molnar 已提交
3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945
{
	int i;

	/*
	 * Some architectures have their own start_kernel()
	 * code which calls lockdep_init(), while we also
	 * call lockdep_init() from the start_kernel() itself,
	 * and we want to initialize the hashes only once:
	 */
	if (lockdep_initialized)
		return;

	for (i = 0; i < CLASSHASH_SIZE; i++)
		INIT_LIST_HEAD(classhash_table + i);

	for (i = 0; i < CHAINHASH_SIZE; i++)
		INIT_LIST_HEAD(chainhash_table + i);

	lockdep_initialized = 1;
}

void __init lockdep_info(void)
{
	printk("Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar\n");

3946
	printk("... MAX_LOCKDEP_SUBCLASSES:  %lu\n", MAX_LOCKDEP_SUBCLASSES);
I
Ingo Molnar 已提交
3947 3948
	printk("... MAX_LOCK_DEPTH:          %lu\n", MAX_LOCK_DEPTH);
	printk("... MAX_LOCKDEP_KEYS:        %lu\n", MAX_LOCKDEP_KEYS);
3949
	printk("... CLASSHASH_SIZE:          %lu\n", CLASSHASH_SIZE);
I
Ingo Molnar 已提交
3950 3951 3952 3953 3954 3955 3956 3957 3958
	printk("... MAX_LOCKDEP_ENTRIES:     %lu\n", MAX_LOCKDEP_ENTRIES);
	printk("... MAX_LOCKDEP_CHAINS:      %lu\n", MAX_LOCKDEP_CHAINS);
	printk("... CHAINHASH_SIZE:          %lu\n", CHAINHASH_SIZE);

	printk(" memory used by lock dependency info: %lu kB\n",
		(sizeof(struct lock_class) * MAX_LOCKDEP_KEYS +
		sizeof(struct list_head) * CLASSHASH_SIZE +
		sizeof(struct lock_list) * MAX_LOCKDEP_ENTRIES +
		sizeof(struct lock_chain) * MAX_LOCKDEP_CHAINS +
M
Ming Lei 已提交
3959
		sizeof(struct list_head) * CHAINHASH_SIZE
3960
#ifdef CONFIG_PROVE_LOCKING
3961
		+ sizeof(struct circular_queue)
3962
#endif
M
Ming Lei 已提交
3963
		) / 1024
3964
		);
I
Ingo Molnar 已提交
3965 3966 3967 3968 3969

	printk(" per task-struct memory footprint: %lu bytes\n",
		sizeof(struct held_lock) * MAX_LOCK_DEPTH);

#ifdef CONFIG_DEBUG_LOCKDEP
3970 3971 3972 3973 3974
	if (lockdep_init_error) {
		printk("WARNING: lockdep init error! Arch code didn't call lockdep_init() early enough?\n");
		printk("Call stack leading to lockdep invocation was:\n");
		print_stack_trace(&lockdep_init_trace, 0);
	}
I
Ingo Molnar 已提交
3975 3976 3977 3978 3979
#endif
}

static void
print_freed_lock_bug(struct task_struct *curr, const void *mem_from,
3980
		     const void *mem_to, struct held_lock *hlock)
I
Ingo Molnar 已提交
3981 3982 3983 3984 3985 3986
{
	if (!debug_locks_off())
		return;
	if (debug_locks_silent)
		return;

3987 3988 3989 3990
	printk("\n");
	printk("=========================\n");
	printk("[ BUG: held lock freed! ]\n");
	printk("-------------------------\n");
I
Ingo Molnar 已提交
3991
	printk("%s/%d is freeing memory %p-%p, with a lock still held there!\n",
3992
		curr->comm, task_pid_nr(curr), mem_from, mem_to-1);
3993
	print_lock(hlock);
I
Ingo Molnar 已提交
3994 3995 3996 3997 3998 3999
	lockdep_print_held_locks(curr);

	printk("\nstack backtrace:\n");
	dump_stack();
}

O
Oleg Nesterov 已提交
4000 4001 4002 4003 4004 4005 4006
static inline int not_in_range(const void* mem_from, unsigned long mem_len,
				const void* lock_from, unsigned long lock_len)
{
	return lock_from + lock_len <= mem_from ||
		mem_from + mem_len <= lock_from;
}

I
Ingo Molnar 已提交
4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025
/*
 * Called when kernel memory is freed (or unmapped), or if a lock
 * is destroyed or reinitialized - this code checks whether there is
 * any held lock in the memory range of <from> to <to>:
 */
void debug_check_no_locks_freed(const void *mem_from, unsigned long mem_len)
{
	struct task_struct *curr = current;
	struct held_lock *hlock;
	unsigned long flags;
	int i;

	if (unlikely(!debug_locks))
		return;

	local_irq_save(flags);
	for (i = 0; i < curr->lockdep_depth; i++) {
		hlock = curr->held_locks + i;

O
Oleg Nesterov 已提交
4026 4027
		if (not_in_range(mem_from, mem_len, hlock->instance,
					sizeof(*hlock->instance)))
I
Ingo Molnar 已提交
4028 4029
			continue;

O
Oleg Nesterov 已提交
4030
		print_freed_lock_bug(curr, mem_from, mem_from + mem_len, hlock);
I
Ingo Molnar 已提交
4031 4032 4033 4034
		break;
	}
	local_irq_restore(flags);
}
4035
EXPORT_SYMBOL_GPL(debug_check_no_locks_freed);
I
Ingo Molnar 已提交
4036 4037 4038 4039 4040 4041 4042 4043

static void print_held_locks_bug(struct task_struct *curr)
{
	if (!debug_locks_off())
		return;
	if (debug_locks_silent)
		return;

4044 4045 4046 4047
	printk("\n");
	printk("=====================================\n");
	printk("[ BUG: lock held at task exit time! ]\n");
	printk("-------------------------------------\n");
I
Ingo Molnar 已提交
4048
	printk("%s/%d is exiting with locks still held!\n",
4049
		curr->comm, task_pid_nr(curr));
I
Ingo Molnar 已提交
4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067
	lockdep_print_held_locks(curr);

	printk("\nstack backtrace:\n");
	dump_stack();
}

void debug_check_no_locks_held(struct task_struct *task)
{
	if (unlikely(task->lockdep_depth > 0))
		print_held_locks_bug(task);
}

void debug_show_all_locks(void)
{
	struct task_struct *g, *p;
	int count = 10;
	int unlock = 1;

4068 4069 4070 4071
	if (unlikely(!debug_locks)) {
		printk("INFO: lockdep is turned off.\n");
		return;
	}
I
Ingo Molnar 已提交
4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091
	printk("\nShowing all locks held in the system:\n");

	/*
	 * Here we try to get the tasklist_lock as hard as possible,
	 * if not successful after 2 seconds we ignore it (but keep
	 * trying). This is to enable a debug printout even if a
	 * tasklist_lock-holding task deadlocks or crashes.
	 */
retry:
	if (!read_trylock(&tasklist_lock)) {
		if (count == 10)
			printk("hm, tasklist_lock locked, retrying... ");
		if (count) {
			count--;
			printk(" #%d", 10-count);
			mdelay(200);
			goto retry;
		}
		printk(" ignoring it.\n");
		unlock = 0;
4092 4093 4094
	} else {
		if (count != 10)
			printk(KERN_CONT " locked it.\n");
I
Ingo Molnar 已提交
4095 4096 4097
	}

	do_each_thread(g, p) {
I
Ingo Molnar 已提交
4098 4099 4100 4101 4102 4103 4104
		/*
		 * It's not reliable to print a task's held locks
		 * if it's not sleeping (or if it's not the current
		 * task):
		 */
		if (p->state == TASK_RUNNING && p != current)
			continue;
I
Ingo Molnar 已提交
4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119
		if (p->lockdep_depth)
			lockdep_print_held_locks(p);
		if (!unlock)
			if (read_trylock(&tasklist_lock))
				unlock = 1;
	} while_each_thread(g, p);

	printk("\n");
	printk("=============================================\n\n");

	if (unlock)
		read_unlock(&tasklist_lock);
}
EXPORT_SYMBOL_GPL(debug_show_all_locks);

4120 4121 4122 4123
/*
 * Careful: only use this function if you are sure that
 * the task cannot run in parallel!
 */
4124
void debug_show_held_locks(struct task_struct *task)
I
Ingo Molnar 已提交
4125
{
4126 4127 4128 4129
	if (unlikely(!debug_locks)) {
		printk("INFO: lockdep is turned off.\n");
		return;
	}
I
Ingo Molnar 已提交
4130 4131 4132
	lockdep_print_held_locks(task);
}
EXPORT_SYMBOL_GPL(debug_show_held_locks);
P
Peter Zijlstra 已提交
4133 4134 4135 4136 4137 4138 4139 4140

void lockdep_sys_exit(void)
{
	struct task_struct *curr = current;

	if (unlikely(curr->lockdep_depth)) {
		if (!debug_locks_off())
			return;
4141 4142 4143 4144
		printk("\n");
		printk("================================================\n");
		printk("[ BUG: lock held when returning to user space! ]\n");
		printk("------------------------------------------------\n");
P
Peter Zijlstra 已提交
4145 4146 4147 4148 4149
		printk("%s/%d is leaving the kernel with locks still held!\n",
				curr->comm, curr->pid);
		lockdep_print_held_locks(curr);
	}
}
4150

4151
void lockdep_rcu_suspicious(const char *file, const int line, const char *s)
4152 4153 4154
{
	struct task_struct *curr = current;

4155
#ifndef CONFIG_PROVE_RCU_REPEATEDLY
4156 4157
	if (!debug_locks_off())
		return;
4158 4159
#endif /* #ifdef CONFIG_PROVE_RCU_REPEATEDLY */
	/* Note: the following can be executed concurrently, so be careful. */
4160 4161 4162 4163 4164
	printk("\n");
	printk("===============================\n");
	printk("[ INFO: suspicious RCU usage. ]\n");
	printk("-------------------------------\n");
	printk("%s:%d %s!\n", file, line, s);
4165
	printk("\nother info that might help us debug this:\n\n");
4166
	printk("\nrcu_scheduler_active = %d, debug_locks = %d\n", rcu_scheduler_active, debug_locks);
4167 4168 4169 4170
	lockdep_print_held_locks(curr);
	printk("\nstack backtrace:\n");
	dump_stack();
}
4171
EXPORT_SYMBOL_GPL(lockdep_rcu_suspicious);