xref: /linux/lib/locking-selftest.c (revision ff5599816711d2e67da2d7561fd36ac48debd433)
1 /*
2  * lib/locking-selftest.c
3  *
4  * Testsuite for various locking APIs: spinlocks, rwlocks,
5  * mutexes and rw-semaphores.
6  *
7  * It is checking both false positives and false negatives.
8  *
9  * Started by Ingo Molnar:
10  *
11  *  Copyright (C) 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
12  */
13 #include <linux/rwsem.h>
14 #include <linux/mutex.h>
15 #include <linux/sched.h>
16 #include <linux/delay.h>
17 #include <linux/lockdep.h>
18 #include <linux/spinlock.h>
19 #include <linux/kallsyms.h>
20 #include <linux/interrupt.h>
21 #include <linux/debug_locks.h>
22 #include <linux/irqflags.h>
23 
24 /*
25  * Change this to 1 if you want to see the failure printouts:
26  */
27 static unsigned int debug_locks_verbose;
28 
29 static DEFINE_WW_CLASS(ww_lockdep);
30 
31 static int __init setup_debug_locks_verbose(char *str)
32 {
33 	get_option(&str, &debug_locks_verbose);
34 
35 	return 1;
36 }
37 
38 __setup("debug_locks_verbose=", setup_debug_locks_verbose);
39 
40 #define FAILURE		0
41 #define SUCCESS		1
42 
43 #define LOCKTYPE_SPIN	0x1
44 #define LOCKTYPE_RWLOCK	0x2
45 #define LOCKTYPE_MUTEX	0x4
46 #define LOCKTYPE_RWSEM	0x8
47 #define LOCKTYPE_WW	0x10
48 
49 static struct ww_acquire_ctx t, t2;
50 static struct ww_mutex o, o2, o3;
51 
52 /*
53  * Normal standalone locks, for the circular and irq-context
54  * dependency tests:
55  */
56 static DEFINE_RAW_SPINLOCK(lock_A);
57 static DEFINE_RAW_SPINLOCK(lock_B);
58 static DEFINE_RAW_SPINLOCK(lock_C);
59 static DEFINE_RAW_SPINLOCK(lock_D);
60 
61 static DEFINE_RWLOCK(rwlock_A);
62 static DEFINE_RWLOCK(rwlock_B);
63 static DEFINE_RWLOCK(rwlock_C);
64 static DEFINE_RWLOCK(rwlock_D);
65 
66 static DEFINE_MUTEX(mutex_A);
67 static DEFINE_MUTEX(mutex_B);
68 static DEFINE_MUTEX(mutex_C);
69 static DEFINE_MUTEX(mutex_D);
70 
71 static DECLARE_RWSEM(rwsem_A);
72 static DECLARE_RWSEM(rwsem_B);
73 static DECLARE_RWSEM(rwsem_C);
74 static DECLARE_RWSEM(rwsem_D);
75 
76 /*
77  * Locks that we initialize dynamically as well so that
78  * e.g. X1 and X2 becomes two instances of the same class,
79  * but X* and Y* are different classes. We do this so that
80  * we do not trigger a real lockup:
81  */
82 static DEFINE_RAW_SPINLOCK(lock_X1);
83 static DEFINE_RAW_SPINLOCK(lock_X2);
84 static DEFINE_RAW_SPINLOCK(lock_Y1);
85 static DEFINE_RAW_SPINLOCK(lock_Y2);
86 static DEFINE_RAW_SPINLOCK(lock_Z1);
87 static DEFINE_RAW_SPINLOCK(lock_Z2);
88 
89 static DEFINE_RWLOCK(rwlock_X1);
90 static DEFINE_RWLOCK(rwlock_X2);
91 static DEFINE_RWLOCK(rwlock_Y1);
92 static DEFINE_RWLOCK(rwlock_Y2);
93 static DEFINE_RWLOCK(rwlock_Z1);
94 static DEFINE_RWLOCK(rwlock_Z2);
95 
96 static DEFINE_MUTEX(mutex_X1);
97 static DEFINE_MUTEX(mutex_X2);
98 static DEFINE_MUTEX(mutex_Y1);
99 static DEFINE_MUTEX(mutex_Y2);
100 static DEFINE_MUTEX(mutex_Z1);
101 static DEFINE_MUTEX(mutex_Z2);
102 
103 static DECLARE_RWSEM(rwsem_X1);
104 static DECLARE_RWSEM(rwsem_X2);
105 static DECLARE_RWSEM(rwsem_Y1);
106 static DECLARE_RWSEM(rwsem_Y2);
107 static DECLARE_RWSEM(rwsem_Z1);
108 static DECLARE_RWSEM(rwsem_Z2);
109 
110 /*
111  * non-inlined runtime initializers, to let separate locks share
112  * the same lock-class:
113  */
114 #define INIT_CLASS_FUNC(class) 				\
115 static noinline void					\
116 init_class_##class(raw_spinlock_t *lock, rwlock_t *rwlock, \
117 	struct mutex *mutex, struct rw_semaphore *rwsem)\
118 {							\
119 	raw_spin_lock_init(lock);			\
120 	rwlock_init(rwlock);				\
121 	mutex_init(mutex);				\
122 	init_rwsem(rwsem);				\
123 }
124 
125 INIT_CLASS_FUNC(X)
126 INIT_CLASS_FUNC(Y)
127 INIT_CLASS_FUNC(Z)
128 
129 static void init_shared_classes(void)
130 {
131 	init_class_X(&lock_X1, &rwlock_X1, &mutex_X1, &rwsem_X1);
132 	init_class_X(&lock_X2, &rwlock_X2, &mutex_X2, &rwsem_X2);
133 
134 	init_class_Y(&lock_Y1, &rwlock_Y1, &mutex_Y1, &rwsem_Y1);
135 	init_class_Y(&lock_Y2, &rwlock_Y2, &mutex_Y2, &rwsem_Y2);
136 
137 	init_class_Z(&lock_Z1, &rwlock_Z1, &mutex_Z1, &rwsem_Z1);
138 	init_class_Z(&lock_Z2, &rwlock_Z2, &mutex_Z2, &rwsem_Z2);
139 }
140 
141 /*
142  * For spinlocks and rwlocks we also do hardirq-safe / softirq-safe tests.
143  * The following functions use a lock from a simulated hardirq/softirq
144  * context, causing the locks to be marked as hardirq-safe/softirq-safe:
145  */
146 
147 #define HARDIRQ_DISABLE		local_irq_disable
148 #define HARDIRQ_ENABLE		local_irq_enable
149 
150 #define HARDIRQ_ENTER()				\
151 	local_irq_disable();			\
152 	__irq_enter();				\
153 	WARN_ON(!in_irq());
154 
155 #define HARDIRQ_EXIT()				\
156 	__irq_exit();				\
157 	local_irq_enable();
158 
159 #define SOFTIRQ_DISABLE		local_bh_disable
160 #define SOFTIRQ_ENABLE		local_bh_enable
161 
162 #define SOFTIRQ_ENTER()				\
163 		local_bh_disable();		\
164 		local_irq_disable();		\
165 		lockdep_softirq_enter();	\
166 		WARN_ON(!in_softirq());
167 
168 #define SOFTIRQ_EXIT()				\
169 		lockdep_softirq_exit();		\
170 		local_irq_enable();		\
171 		local_bh_enable();
172 
173 /*
174  * Shortcuts for lock/unlock API variants, to keep
175  * the testcases compact:
176  */
177 #define L(x)			raw_spin_lock(&lock_##x)
178 #define U(x)			raw_spin_unlock(&lock_##x)
179 #define LU(x)			L(x); U(x)
180 #define SI(x)			raw_spin_lock_init(&lock_##x)
181 
182 #define WL(x)			write_lock(&rwlock_##x)
183 #define WU(x)			write_unlock(&rwlock_##x)
184 #define WLU(x)			WL(x); WU(x)
185 
186 #define RL(x)			read_lock(&rwlock_##x)
187 #define RU(x)			read_unlock(&rwlock_##x)
188 #define RLU(x)			RL(x); RU(x)
189 #define RWI(x)			rwlock_init(&rwlock_##x)
190 
191 #define ML(x)			mutex_lock(&mutex_##x)
192 #define MU(x)			mutex_unlock(&mutex_##x)
193 #define MI(x)			mutex_init(&mutex_##x)
194 
195 #define WSL(x)			down_write(&rwsem_##x)
196 #define WSU(x)			up_write(&rwsem_##x)
197 
198 #define RSL(x)			down_read(&rwsem_##x)
199 #define RSU(x)			up_read(&rwsem_##x)
200 #define RWSI(x)			init_rwsem(&rwsem_##x)
201 
202 #ifndef CONFIG_DEBUG_WW_MUTEX_SLOWPATH
203 #define WWAI(x)			ww_acquire_init(x, &ww_lockdep)
204 #else
205 #define WWAI(x)			do { ww_acquire_init(x, &ww_lockdep); (x)->deadlock_inject_countdown = ~0U; } while (0)
206 #endif
207 #define WWAD(x)			ww_acquire_done(x)
208 #define WWAF(x)			ww_acquire_fini(x)
209 
210 #define WWL(x, c)		ww_mutex_lock(x, c)
211 #define WWT(x)			ww_mutex_trylock(x)
212 #define WWL1(x)			ww_mutex_lock(x, NULL)
213 #define WWU(x)			ww_mutex_unlock(x)
214 
215 
216 #define LOCK_UNLOCK_2(x,y)	LOCK(x); LOCK(y); UNLOCK(y); UNLOCK(x)
217 
218 /*
219  * Generate different permutations of the same testcase, using
220  * the same basic lock-dependency/state events:
221  */
222 
223 #define GENERATE_TESTCASE(name)			\
224 						\
225 static void name(void) { E(); }
226 
227 #define GENERATE_PERMUTATIONS_2_EVENTS(name)	\
228 						\
229 static void name##_12(void) { E1(); E2(); }	\
230 static void name##_21(void) { E2(); E1(); }
231 
232 #define GENERATE_PERMUTATIONS_3_EVENTS(name)		\
233 							\
234 static void name##_123(void) { E1(); E2(); E3(); }	\
235 static void name##_132(void) { E1(); E3(); E2(); }	\
236 static void name##_213(void) { E2(); E1(); E3(); }	\
237 static void name##_231(void) { E2(); E3(); E1(); }	\
238 static void name##_312(void) { E3(); E1(); E2(); }	\
239 static void name##_321(void) { E3(); E2(); E1(); }
240 
241 /*
242  * AA deadlock:
243  */
244 
245 #define E()					\
246 						\
247 	LOCK(X1);				\
248 	LOCK(X2); /* this one should fail */
249 
250 /*
251  * 6 testcases:
252  */
253 #include "locking-selftest-spin.h"
254 GENERATE_TESTCASE(AA_spin)
255 #include "locking-selftest-wlock.h"
256 GENERATE_TESTCASE(AA_wlock)
257 #include "locking-selftest-rlock.h"
258 GENERATE_TESTCASE(AA_rlock)
259 #include "locking-selftest-mutex.h"
260 GENERATE_TESTCASE(AA_mutex)
261 #include "locking-selftest-wsem.h"
262 GENERATE_TESTCASE(AA_wsem)
263 #include "locking-selftest-rsem.h"
264 GENERATE_TESTCASE(AA_rsem)
265 
266 #undef E
267 
268 /*
269  * Special-case for read-locking, they are
270  * allowed to recurse on the same lock class:
271  */
272 static void rlock_AA1(void)
273 {
274 	RL(X1);
275 	RL(X1); // this one should NOT fail
276 }
277 
278 static void rlock_AA1B(void)
279 {
280 	RL(X1);
281 	RL(X2); // this one should NOT fail
282 }
283 
284 static void rsem_AA1(void)
285 {
286 	RSL(X1);
287 	RSL(X1); // this one should fail
288 }
289 
290 static void rsem_AA1B(void)
291 {
292 	RSL(X1);
293 	RSL(X2); // this one should fail
294 }
295 /*
296  * The mixing of read and write locks is not allowed:
297  */
298 static void rlock_AA2(void)
299 {
300 	RL(X1);
301 	WL(X2); // this one should fail
302 }
303 
304 static void rsem_AA2(void)
305 {
306 	RSL(X1);
307 	WSL(X2); // this one should fail
308 }
309 
310 static void rlock_AA3(void)
311 {
312 	WL(X1);
313 	RL(X2); // this one should fail
314 }
315 
316 static void rsem_AA3(void)
317 {
318 	WSL(X1);
319 	RSL(X2); // this one should fail
320 }
321 
322 /*
323  * ABBA deadlock:
324  */
325 
326 #define E()					\
327 						\
328 	LOCK_UNLOCK_2(A, B);			\
329 	LOCK_UNLOCK_2(B, A); /* fail */
330 
331 /*
332  * 6 testcases:
333  */
334 #include "locking-selftest-spin.h"
335 GENERATE_TESTCASE(ABBA_spin)
336 #include "locking-selftest-wlock.h"
337 GENERATE_TESTCASE(ABBA_wlock)
338 #include "locking-selftest-rlock.h"
339 GENERATE_TESTCASE(ABBA_rlock)
340 #include "locking-selftest-mutex.h"
341 GENERATE_TESTCASE(ABBA_mutex)
342 #include "locking-selftest-wsem.h"
343 GENERATE_TESTCASE(ABBA_wsem)
344 #include "locking-selftest-rsem.h"
345 GENERATE_TESTCASE(ABBA_rsem)
346 
347 #undef E
348 
349 /*
350  * AB BC CA deadlock:
351  */
352 
353 #define E()					\
354 						\
355 	LOCK_UNLOCK_2(A, B);			\
356 	LOCK_UNLOCK_2(B, C);			\
357 	LOCK_UNLOCK_2(C, A); /* fail */
358 
359 /*
360  * 6 testcases:
361  */
362 #include "locking-selftest-spin.h"
363 GENERATE_TESTCASE(ABBCCA_spin)
364 #include "locking-selftest-wlock.h"
365 GENERATE_TESTCASE(ABBCCA_wlock)
366 #include "locking-selftest-rlock.h"
367 GENERATE_TESTCASE(ABBCCA_rlock)
368 #include "locking-selftest-mutex.h"
369 GENERATE_TESTCASE(ABBCCA_mutex)
370 #include "locking-selftest-wsem.h"
371 GENERATE_TESTCASE(ABBCCA_wsem)
372 #include "locking-selftest-rsem.h"
373 GENERATE_TESTCASE(ABBCCA_rsem)
374 
375 #undef E
376 
377 /*
378  * AB CA BC deadlock:
379  */
380 
381 #define E()					\
382 						\
383 	LOCK_UNLOCK_2(A, B);			\
384 	LOCK_UNLOCK_2(C, A);			\
385 	LOCK_UNLOCK_2(B, C); /* fail */
386 
387 /*
388  * 6 testcases:
389  */
390 #include "locking-selftest-spin.h"
391 GENERATE_TESTCASE(ABCABC_spin)
392 #include "locking-selftest-wlock.h"
393 GENERATE_TESTCASE(ABCABC_wlock)
394 #include "locking-selftest-rlock.h"
395 GENERATE_TESTCASE(ABCABC_rlock)
396 #include "locking-selftest-mutex.h"
397 GENERATE_TESTCASE(ABCABC_mutex)
398 #include "locking-selftest-wsem.h"
399 GENERATE_TESTCASE(ABCABC_wsem)
400 #include "locking-selftest-rsem.h"
401 GENERATE_TESTCASE(ABCABC_rsem)
402 
403 #undef E
404 
405 /*
406  * AB BC CD DA deadlock:
407  */
408 
409 #define E()					\
410 						\
411 	LOCK_UNLOCK_2(A, B);			\
412 	LOCK_UNLOCK_2(B, C);			\
413 	LOCK_UNLOCK_2(C, D);			\
414 	LOCK_UNLOCK_2(D, A); /* fail */
415 
416 /*
417  * 6 testcases:
418  */
419 #include "locking-selftest-spin.h"
420 GENERATE_TESTCASE(ABBCCDDA_spin)
421 #include "locking-selftest-wlock.h"
422 GENERATE_TESTCASE(ABBCCDDA_wlock)
423 #include "locking-selftest-rlock.h"
424 GENERATE_TESTCASE(ABBCCDDA_rlock)
425 #include "locking-selftest-mutex.h"
426 GENERATE_TESTCASE(ABBCCDDA_mutex)
427 #include "locking-selftest-wsem.h"
428 GENERATE_TESTCASE(ABBCCDDA_wsem)
429 #include "locking-selftest-rsem.h"
430 GENERATE_TESTCASE(ABBCCDDA_rsem)
431 
432 #undef E
433 
434 /*
435  * AB CD BD DA deadlock:
436  */
437 #define E()					\
438 						\
439 	LOCK_UNLOCK_2(A, B);			\
440 	LOCK_UNLOCK_2(C, D);			\
441 	LOCK_UNLOCK_2(B, D);			\
442 	LOCK_UNLOCK_2(D, A); /* fail */
443 
444 /*
445  * 6 testcases:
446  */
447 #include "locking-selftest-spin.h"
448 GENERATE_TESTCASE(ABCDBDDA_spin)
449 #include "locking-selftest-wlock.h"
450 GENERATE_TESTCASE(ABCDBDDA_wlock)
451 #include "locking-selftest-rlock.h"
452 GENERATE_TESTCASE(ABCDBDDA_rlock)
453 #include "locking-selftest-mutex.h"
454 GENERATE_TESTCASE(ABCDBDDA_mutex)
455 #include "locking-selftest-wsem.h"
456 GENERATE_TESTCASE(ABCDBDDA_wsem)
457 #include "locking-selftest-rsem.h"
458 GENERATE_TESTCASE(ABCDBDDA_rsem)
459 
460 #undef E
461 
462 /*
463  * AB CD BC DA deadlock:
464  */
465 #define E()					\
466 						\
467 	LOCK_UNLOCK_2(A, B);			\
468 	LOCK_UNLOCK_2(C, D);			\
469 	LOCK_UNLOCK_2(B, C);			\
470 	LOCK_UNLOCK_2(D, A); /* fail */
471 
472 /*
473  * 6 testcases:
474  */
475 #include "locking-selftest-spin.h"
476 GENERATE_TESTCASE(ABCDBCDA_spin)
477 #include "locking-selftest-wlock.h"
478 GENERATE_TESTCASE(ABCDBCDA_wlock)
479 #include "locking-selftest-rlock.h"
480 GENERATE_TESTCASE(ABCDBCDA_rlock)
481 #include "locking-selftest-mutex.h"
482 GENERATE_TESTCASE(ABCDBCDA_mutex)
483 #include "locking-selftest-wsem.h"
484 GENERATE_TESTCASE(ABCDBCDA_wsem)
485 #include "locking-selftest-rsem.h"
486 GENERATE_TESTCASE(ABCDBCDA_rsem)
487 
488 #undef E
489 
490 /*
491  * Double unlock:
492  */
493 #define E()					\
494 						\
495 	LOCK(A);				\
496 	UNLOCK(A);				\
497 	UNLOCK(A); /* fail */
498 
499 /*
500  * 6 testcases:
501  */
502 #include "locking-selftest-spin.h"
503 GENERATE_TESTCASE(double_unlock_spin)
504 #include "locking-selftest-wlock.h"
505 GENERATE_TESTCASE(double_unlock_wlock)
506 #include "locking-selftest-rlock.h"
507 GENERATE_TESTCASE(double_unlock_rlock)
508 #include "locking-selftest-mutex.h"
509 GENERATE_TESTCASE(double_unlock_mutex)
510 #include "locking-selftest-wsem.h"
511 GENERATE_TESTCASE(double_unlock_wsem)
512 #include "locking-selftest-rsem.h"
513 GENERATE_TESTCASE(double_unlock_rsem)
514 
515 #undef E
516 
517 /*
518  * Bad unlock ordering:
519  */
520 #define E()					\
521 						\
522 	LOCK(A);				\
523 	LOCK(B);				\
524 	UNLOCK(A); /* fail */			\
525 	UNLOCK(B);
526 
527 /*
528  * 6 testcases:
529  */
530 #include "locking-selftest-spin.h"
531 GENERATE_TESTCASE(bad_unlock_order_spin)
532 #include "locking-selftest-wlock.h"
533 GENERATE_TESTCASE(bad_unlock_order_wlock)
534 #include "locking-selftest-rlock.h"
535 GENERATE_TESTCASE(bad_unlock_order_rlock)
536 #include "locking-selftest-mutex.h"
537 GENERATE_TESTCASE(bad_unlock_order_mutex)
538 #include "locking-selftest-wsem.h"
539 GENERATE_TESTCASE(bad_unlock_order_wsem)
540 #include "locking-selftest-rsem.h"
541 GENERATE_TESTCASE(bad_unlock_order_rsem)
542 
543 #undef E
544 
545 /*
546  * initializing a held lock:
547  */
548 #define E()					\
549 						\
550 	LOCK(A);				\
551 	INIT(A); /* fail */
552 
553 /*
554  * 6 testcases:
555  */
556 #include "locking-selftest-spin.h"
557 GENERATE_TESTCASE(init_held_spin)
558 #include "locking-selftest-wlock.h"
559 GENERATE_TESTCASE(init_held_wlock)
560 #include "locking-selftest-rlock.h"
561 GENERATE_TESTCASE(init_held_rlock)
562 #include "locking-selftest-mutex.h"
563 GENERATE_TESTCASE(init_held_mutex)
564 #include "locking-selftest-wsem.h"
565 GENERATE_TESTCASE(init_held_wsem)
566 #include "locking-selftest-rsem.h"
567 GENERATE_TESTCASE(init_held_rsem)
568 
569 #undef E
570 
571 /*
572  * locking an irq-safe lock with irqs enabled:
573  */
574 #define E1()				\
575 					\
576 	IRQ_ENTER();			\
577 	LOCK(A);			\
578 	UNLOCK(A);			\
579 	IRQ_EXIT();
580 
581 #define E2()				\
582 					\
583 	LOCK(A);			\
584 	UNLOCK(A);
585 
586 /*
587  * Generate 24 testcases:
588  */
589 #include "locking-selftest-spin-hardirq.h"
590 GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_hard_spin)
591 
592 #include "locking-selftest-rlock-hardirq.h"
593 GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_hard_rlock)
594 
595 #include "locking-selftest-wlock-hardirq.h"
596 GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_hard_wlock)
597 
598 #include "locking-selftest-spin-softirq.h"
599 GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_soft_spin)
600 
601 #include "locking-selftest-rlock-softirq.h"
602 GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_soft_rlock)
603 
604 #include "locking-selftest-wlock-softirq.h"
605 GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_soft_wlock)
606 
607 #undef E1
608 #undef E2
609 
610 /*
611  * Enabling hardirqs with a softirq-safe lock held:
612  */
613 #define E1()				\
614 					\
615 	SOFTIRQ_ENTER();		\
616 	LOCK(A);			\
617 	UNLOCK(A);			\
618 	SOFTIRQ_EXIT();
619 
620 #define E2()				\
621 					\
622 	HARDIRQ_DISABLE();		\
623 	LOCK(A);			\
624 	HARDIRQ_ENABLE();		\
625 	UNLOCK(A);
626 
627 /*
628  * Generate 12 testcases:
629  */
630 #include "locking-selftest-spin.h"
631 GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2A_spin)
632 
633 #include "locking-selftest-wlock.h"
634 GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2A_wlock)
635 
636 #include "locking-selftest-rlock.h"
637 GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2A_rlock)
638 
639 #undef E1
640 #undef E2
641 
642 /*
643  * Enabling irqs with an irq-safe lock held:
644  */
645 #define E1()				\
646 					\
647 	IRQ_ENTER();			\
648 	LOCK(A);			\
649 	UNLOCK(A);			\
650 	IRQ_EXIT();
651 
652 #define E2()				\
653 					\
654 	IRQ_DISABLE();			\
655 	LOCK(A);			\
656 	IRQ_ENABLE();			\
657 	UNLOCK(A);
658 
659 /*
660  * Generate 24 testcases:
661  */
662 #include "locking-selftest-spin-hardirq.h"
663 GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_hard_spin)
664 
665 #include "locking-selftest-rlock-hardirq.h"
666 GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_hard_rlock)
667 
668 #include "locking-selftest-wlock-hardirq.h"
669 GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_hard_wlock)
670 
671 #include "locking-selftest-spin-softirq.h"
672 GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_soft_spin)
673 
674 #include "locking-selftest-rlock-softirq.h"
675 GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_soft_rlock)
676 
677 #include "locking-selftest-wlock-softirq.h"
678 GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_soft_wlock)
679 
680 #undef E1
681 #undef E2
682 
683 /*
684  * Acquiring a irq-unsafe lock while holding an irq-safe-lock:
685  */
686 #define E1()				\
687 					\
688 	LOCK(A);			\
689 	LOCK(B);			\
690 	UNLOCK(B);			\
691 	UNLOCK(A);			\
692 
693 #define E2()				\
694 					\
695 	LOCK(B);			\
696 	UNLOCK(B);
697 
698 #define E3()				\
699 					\
700 	IRQ_ENTER();			\
701 	LOCK(A);			\
702 	UNLOCK(A);			\
703 	IRQ_EXIT();
704 
705 /*
706  * Generate 36 testcases:
707  */
708 #include "locking-selftest-spin-hardirq.h"
709 GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_hard_spin)
710 
711 #include "locking-selftest-rlock-hardirq.h"
712 GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_hard_rlock)
713 
714 #include "locking-selftest-wlock-hardirq.h"
715 GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_hard_wlock)
716 
717 #include "locking-selftest-spin-softirq.h"
718 GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_soft_spin)
719 
720 #include "locking-selftest-rlock-softirq.h"
721 GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_soft_rlock)
722 
723 #include "locking-selftest-wlock-softirq.h"
724 GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_soft_wlock)
725 
726 #undef E1
727 #undef E2
728 #undef E3
729 
730 /*
731  * If a lock turns into softirq-safe, but earlier it took
732  * a softirq-unsafe lock:
733  */
734 
735 #define E1()				\
736 	IRQ_DISABLE();			\
737 	LOCK(A);			\
738 	LOCK(B);			\
739 	UNLOCK(B);			\
740 	UNLOCK(A);			\
741 	IRQ_ENABLE();
742 
743 #define E2()				\
744 	LOCK(B);			\
745 	UNLOCK(B);
746 
747 #define E3()				\
748 	IRQ_ENTER();			\
749 	LOCK(A);			\
750 	UNLOCK(A);			\
751 	IRQ_EXIT();
752 
753 /*
754  * Generate 36 testcases:
755  */
756 #include "locking-selftest-spin-hardirq.h"
757 GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_hard_spin)
758 
759 #include "locking-selftest-rlock-hardirq.h"
760 GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_hard_rlock)
761 
762 #include "locking-selftest-wlock-hardirq.h"
763 GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_hard_wlock)
764 
765 #include "locking-selftest-spin-softirq.h"
766 GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_soft_spin)
767 
768 #include "locking-selftest-rlock-softirq.h"
769 GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_soft_rlock)
770 
771 #include "locking-selftest-wlock-softirq.h"
772 GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_soft_wlock)
773 
774 #undef E1
775 #undef E2
776 #undef E3
777 
778 /*
779  * read-lock / write-lock irq inversion.
780  *
781  * Deadlock scenario:
782  *
783  * CPU#1 is at #1, i.e. it has write-locked A, but has not
784  * taken B yet.
785  *
786  * CPU#2 is at #2, i.e. it has locked B.
787  *
788  * Hardirq hits CPU#2 at point #2 and is trying to read-lock A.
789  *
790  * The deadlock occurs because CPU#1 will spin on B, and CPU#2
791  * will spin on A.
792  */
793 
794 #define E1()				\
795 					\
796 	IRQ_DISABLE();			\
797 	WL(A);				\
798 	LOCK(B);			\
799 	UNLOCK(B);			\
800 	WU(A);				\
801 	IRQ_ENABLE();
802 
803 #define E2()				\
804 					\
805 	LOCK(B);			\
806 	UNLOCK(B);
807 
808 #define E3()				\
809 					\
810 	IRQ_ENTER();			\
811 	RL(A);				\
812 	RU(A);				\
813 	IRQ_EXIT();
814 
815 /*
816  * Generate 36 testcases:
817  */
818 #include "locking-selftest-spin-hardirq.h"
819 GENERATE_PERMUTATIONS_3_EVENTS(irq_inversion_hard_spin)
820 
821 #include "locking-selftest-rlock-hardirq.h"
822 GENERATE_PERMUTATIONS_3_EVENTS(irq_inversion_hard_rlock)
823 
824 #include "locking-selftest-wlock-hardirq.h"
825 GENERATE_PERMUTATIONS_3_EVENTS(irq_inversion_hard_wlock)
826 
827 #include "locking-selftest-spin-softirq.h"
828 GENERATE_PERMUTATIONS_3_EVENTS(irq_inversion_soft_spin)
829 
830 #include "locking-selftest-rlock-softirq.h"
831 GENERATE_PERMUTATIONS_3_EVENTS(irq_inversion_soft_rlock)
832 
833 #include "locking-selftest-wlock-softirq.h"
834 GENERATE_PERMUTATIONS_3_EVENTS(irq_inversion_soft_wlock)
835 
836 #undef E1
837 #undef E2
838 #undef E3
839 
840 /*
841  * read-lock / write-lock recursion that is actually safe.
842  */
843 
844 #define E1()				\
845 					\
846 	IRQ_DISABLE();			\
847 	WL(A);				\
848 	WU(A);				\
849 	IRQ_ENABLE();
850 
851 #define E2()				\
852 					\
853 	RL(A);				\
854 	RU(A);				\
855 
856 #define E3()				\
857 					\
858 	IRQ_ENTER();			\
859 	RL(A);				\
860 	L(B);				\
861 	U(B);				\
862 	RU(A);				\
863 	IRQ_EXIT();
864 
865 /*
866  * Generate 12 testcases:
867  */
868 #include "locking-selftest-hardirq.h"
869 GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion_hard)
870 
871 #include "locking-selftest-softirq.h"
872 GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion_soft)
873 
874 #undef E1
875 #undef E2
876 #undef E3
877 
878 /*
879  * read-lock / write-lock recursion that is unsafe.
880  */
881 
882 #define E1()				\
883 					\
884 	IRQ_DISABLE();			\
885 	L(B);				\
886 	WL(A);				\
887 	WU(A);				\
888 	U(B);				\
889 	IRQ_ENABLE();
890 
891 #define E2()				\
892 					\
893 	RL(A);				\
894 	RU(A);				\
895 
896 #define E3()				\
897 					\
898 	IRQ_ENTER();			\
899 	L(B);				\
900 	U(B);				\
901 	IRQ_EXIT();
902 
903 /*
904  * Generate 12 testcases:
905  */
906 #include "locking-selftest-hardirq.h"
907 // GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion2_hard)
908 
909 #include "locking-selftest-softirq.h"
910 // GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion2_soft)
911 
912 #ifdef CONFIG_DEBUG_LOCK_ALLOC
913 # define I_SPINLOCK(x)	lockdep_reset_lock(&lock_##x.dep_map)
914 # define I_RWLOCK(x)	lockdep_reset_lock(&rwlock_##x.dep_map)
915 # define I_MUTEX(x)	lockdep_reset_lock(&mutex_##x.dep_map)
916 # define I_RWSEM(x)	lockdep_reset_lock(&rwsem_##x.dep_map)
917 # define I_WW(x)	lockdep_reset_lock(&x.dep_map)
918 #else
919 # define I_SPINLOCK(x)
920 # define I_RWLOCK(x)
921 # define I_MUTEX(x)
922 # define I_RWSEM(x)
923 # define I_WW(x)
924 #endif
925 
926 #define I1(x)					\
927 	do {					\
928 		I_SPINLOCK(x);			\
929 		I_RWLOCK(x);			\
930 		I_MUTEX(x);			\
931 		I_RWSEM(x);			\
932 	} while (0)
933 
934 #define I2(x)					\
935 	do {					\
936 		raw_spin_lock_init(&lock_##x);	\
937 		rwlock_init(&rwlock_##x);	\
938 		mutex_init(&mutex_##x);		\
939 		init_rwsem(&rwsem_##x);		\
940 	} while (0)
941 
942 static void reset_locks(void)
943 {
944 	local_irq_disable();
945 	lockdep_free_key_range(&ww_lockdep.acquire_key, 1);
946 	lockdep_free_key_range(&ww_lockdep.mutex_key, 1);
947 
948 	I1(A); I1(B); I1(C); I1(D);
949 	I1(X1); I1(X2); I1(Y1); I1(Y2); I1(Z1); I1(Z2);
950 	I_WW(t); I_WW(t2); I_WW(o.base); I_WW(o2.base); I_WW(o3.base);
951 	lockdep_reset();
952 	I2(A); I2(B); I2(C); I2(D);
953 	init_shared_classes();
954 
955 	ww_mutex_init(&o, &ww_lockdep); ww_mutex_init(&o2, &ww_lockdep); ww_mutex_init(&o3, &ww_lockdep);
956 	memset(&t, 0, sizeof(t)); memset(&t2, 0, sizeof(t2));
957 	memset(&ww_lockdep.acquire_key, 0, sizeof(ww_lockdep.acquire_key));
958 	memset(&ww_lockdep.mutex_key, 0, sizeof(ww_lockdep.mutex_key));
959 	local_irq_enable();
960 }
961 
962 #undef I
963 
964 static int testcase_total;
965 static int testcase_successes;
966 static int expected_testcase_failures;
967 static int unexpected_testcase_failures;
968 
969 static void dotest(void (*testcase_fn)(void), int expected, int lockclass_mask)
970 {
971 	unsigned long saved_preempt_count = preempt_count();
972 
973 	WARN_ON(irqs_disabled());
974 
975 	testcase_fn();
976 	/*
977 	 * Filter out expected failures:
978 	 */
979 #ifndef CONFIG_PROVE_LOCKING
980 	if (expected == FAILURE && debug_locks) {
981 		expected_testcase_failures++;
982 		printk("failed|");
983 	}
984 	else
985 #endif
986 	if (debug_locks != expected) {
987 		unexpected_testcase_failures++;
988 		printk("FAILED|");
989 
990 		dump_stack();
991 	} else {
992 		testcase_successes++;
993 		printk("  ok  |");
994 	}
995 	testcase_total++;
996 
997 	if (debug_locks_verbose)
998 		printk(" lockclass mask: %x, debug_locks: %d, expected: %d\n",
999 			lockclass_mask, debug_locks, expected);
1000 	/*
1001 	 * Some tests (e.g. double-unlock) might corrupt the preemption
1002 	 * count, so restore it:
1003 	 */
1004 	preempt_count() = saved_preempt_count;
1005 #ifdef CONFIG_TRACE_IRQFLAGS
1006 	if (softirq_count())
1007 		current->softirqs_enabled = 0;
1008 	else
1009 		current->softirqs_enabled = 1;
1010 #endif
1011 
1012 	reset_locks();
1013 }
1014 
1015 static inline void print_testname(const char *testname)
1016 {
1017 	printk("%33s:", testname);
1018 }
1019 
1020 #define DO_TESTCASE_1(desc, name, nr)				\
1021 	print_testname(desc"/"#nr);				\
1022 	dotest(name##_##nr, SUCCESS, LOCKTYPE_RWLOCK);		\
1023 	printk("\n");
1024 
1025 #define DO_TESTCASE_1B(desc, name, nr)				\
1026 	print_testname(desc"/"#nr);				\
1027 	dotest(name##_##nr, FAILURE, LOCKTYPE_RWLOCK);		\
1028 	printk("\n");
1029 
1030 #define DO_TESTCASE_3(desc, name, nr)				\
1031 	print_testname(desc"/"#nr);				\
1032 	dotest(name##_spin_##nr, FAILURE, LOCKTYPE_SPIN);	\
1033 	dotest(name##_wlock_##nr, FAILURE, LOCKTYPE_RWLOCK);	\
1034 	dotest(name##_rlock_##nr, SUCCESS, LOCKTYPE_RWLOCK);	\
1035 	printk("\n");
1036 
1037 #define DO_TESTCASE_3RW(desc, name, nr)				\
1038 	print_testname(desc"/"#nr);				\
1039 	dotest(name##_spin_##nr, FAILURE, LOCKTYPE_SPIN|LOCKTYPE_RWLOCK);\
1040 	dotest(name##_wlock_##nr, FAILURE, LOCKTYPE_RWLOCK);	\
1041 	dotest(name##_rlock_##nr, SUCCESS, LOCKTYPE_RWLOCK);	\
1042 	printk("\n");
1043 
1044 #define DO_TESTCASE_6(desc, name)				\
1045 	print_testname(desc);					\
1046 	dotest(name##_spin, FAILURE, LOCKTYPE_SPIN);		\
1047 	dotest(name##_wlock, FAILURE, LOCKTYPE_RWLOCK);		\
1048 	dotest(name##_rlock, FAILURE, LOCKTYPE_RWLOCK);		\
1049 	dotest(name##_mutex, FAILURE, LOCKTYPE_MUTEX);		\
1050 	dotest(name##_wsem, FAILURE, LOCKTYPE_RWSEM);		\
1051 	dotest(name##_rsem, FAILURE, LOCKTYPE_RWSEM);		\
1052 	printk("\n");
1053 
1054 #define DO_TESTCASE_6_SUCCESS(desc, name)			\
1055 	print_testname(desc);					\
1056 	dotest(name##_spin, SUCCESS, LOCKTYPE_SPIN);		\
1057 	dotest(name##_wlock, SUCCESS, LOCKTYPE_RWLOCK);		\
1058 	dotest(name##_rlock, SUCCESS, LOCKTYPE_RWLOCK);		\
1059 	dotest(name##_mutex, SUCCESS, LOCKTYPE_MUTEX);		\
1060 	dotest(name##_wsem, SUCCESS, LOCKTYPE_RWSEM);		\
1061 	dotest(name##_rsem, SUCCESS, LOCKTYPE_RWSEM);		\
1062 	printk("\n");
1063 
1064 /*
1065  * 'read' variant: rlocks must not trigger.
1066  */
1067 #define DO_TESTCASE_6R(desc, name)				\
1068 	print_testname(desc);					\
1069 	dotest(name##_spin, FAILURE, LOCKTYPE_SPIN);		\
1070 	dotest(name##_wlock, FAILURE, LOCKTYPE_RWLOCK);		\
1071 	dotest(name##_rlock, SUCCESS, LOCKTYPE_RWLOCK);		\
1072 	dotest(name##_mutex, FAILURE, LOCKTYPE_MUTEX);		\
1073 	dotest(name##_wsem, FAILURE, LOCKTYPE_RWSEM);		\
1074 	dotest(name##_rsem, FAILURE, LOCKTYPE_RWSEM);		\
1075 	printk("\n");
1076 
1077 #define DO_TESTCASE_2I(desc, name, nr)				\
1078 	DO_TESTCASE_1("hard-"desc, name##_hard, nr);		\
1079 	DO_TESTCASE_1("soft-"desc, name##_soft, nr);
1080 
1081 #define DO_TESTCASE_2IB(desc, name, nr)				\
1082 	DO_TESTCASE_1B("hard-"desc, name##_hard, nr);		\
1083 	DO_TESTCASE_1B("soft-"desc, name##_soft, nr);
1084 
1085 #define DO_TESTCASE_6I(desc, name, nr)				\
1086 	DO_TESTCASE_3("hard-"desc, name##_hard, nr);		\
1087 	DO_TESTCASE_3("soft-"desc, name##_soft, nr);
1088 
1089 #define DO_TESTCASE_6IRW(desc, name, nr)			\
1090 	DO_TESTCASE_3RW("hard-"desc, name##_hard, nr);		\
1091 	DO_TESTCASE_3RW("soft-"desc, name##_soft, nr);
1092 
1093 #define DO_TESTCASE_2x3(desc, name)				\
1094 	DO_TESTCASE_3(desc, name, 12);				\
1095 	DO_TESTCASE_3(desc, name, 21);
1096 
1097 #define DO_TESTCASE_2x6(desc, name)				\
1098 	DO_TESTCASE_6I(desc, name, 12);				\
1099 	DO_TESTCASE_6I(desc, name, 21);
1100 
1101 #define DO_TESTCASE_6x2(desc, name)				\
1102 	DO_TESTCASE_2I(desc, name, 123);			\
1103 	DO_TESTCASE_2I(desc, name, 132);			\
1104 	DO_TESTCASE_2I(desc, name, 213);			\
1105 	DO_TESTCASE_2I(desc, name, 231);			\
1106 	DO_TESTCASE_2I(desc, name, 312);			\
1107 	DO_TESTCASE_2I(desc, name, 321);
1108 
1109 #define DO_TESTCASE_6x2B(desc, name)				\
1110 	DO_TESTCASE_2IB(desc, name, 123);			\
1111 	DO_TESTCASE_2IB(desc, name, 132);			\
1112 	DO_TESTCASE_2IB(desc, name, 213);			\
1113 	DO_TESTCASE_2IB(desc, name, 231);			\
1114 	DO_TESTCASE_2IB(desc, name, 312);			\
1115 	DO_TESTCASE_2IB(desc, name, 321);
1116 
1117 #define DO_TESTCASE_6x6(desc, name)				\
1118 	DO_TESTCASE_6I(desc, name, 123);			\
1119 	DO_TESTCASE_6I(desc, name, 132);			\
1120 	DO_TESTCASE_6I(desc, name, 213);			\
1121 	DO_TESTCASE_6I(desc, name, 231);			\
1122 	DO_TESTCASE_6I(desc, name, 312);			\
1123 	DO_TESTCASE_6I(desc, name, 321);
1124 
1125 #define DO_TESTCASE_6x6RW(desc, name)				\
1126 	DO_TESTCASE_6IRW(desc, name, 123);			\
1127 	DO_TESTCASE_6IRW(desc, name, 132);			\
1128 	DO_TESTCASE_6IRW(desc, name, 213);			\
1129 	DO_TESTCASE_6IRW(desc, name, 231);			\
1130 	DO_TESTCASE_6IRW(desc, name, 312);			\
1131 	DO_TESTCASE_6IRW(desc, name, 321);
1132 
1133 static void ww_test_fail_acquire(void)
1134 {
1135 	int ret;
1136 
1137 	WWAI(&t);
1138 	t.stamp++;
1139 
1140 	ret = WWL(&o, &t);
1141 
1142 	if (WARN_ON(!o.ctx) ||
1143 	    WARN_ON(ret))
1144 		return;
1145 
1146 	/* No lockdep test, pure API */
1147 	ret = WWL(&o, &t);
1148 	WARN_ON(ret != -EALREADY);
1149 
1150 	ret = WWT(&o);
1151 	WARN_ON(ret);
1152 
1153 	t2 = t;
1154 	t2.stamp++;
1155 	ret = WWL(&o, &t2);
1156 	WARN_ON(ret != -EDEADLK);
1157 	WWU(&o);
1158 
1159 	if (WWT(&o))
1160 		WWU(&o);
1161 #ifdef CONFIG_DEBUG_LOCK_ALLOC
1162 	else
1163 		DEBUG_LOCKS_WARN_ON(1);
1164 #endif
1165 }
1166 
1167 static void ww_test_normal(void)
1168 {
1169 	int ret;
1170 
1171 	WWAI(&t);
1172 
1173 	/*
1174 	 * None of the ww_mutex codepaths should be taken in the 'normal'
1175 	 * mutex calls. The easiest way to verify this is by using the
1176 	 * normal mutex calls, and making sure o.ctx is unmodified.
1177 	 */
1178 
1179 	/* mutex_lock (and indirectly, mutex_lock_nested) */
1180 	o.ctx = (void *)~0UL;
1181 	mutex_lock(&o.base);
1182 	mutex_unlock(&o.base);
1183 	WARN_ON(o.ctx != (void *)~0UL);
1184 
1185 	/* mutex_lock_interruptible (and *_nested) */
1186 	o.ctx = (void *)~0UL;
1187 	ret = mutex_lock_interruptible(&o.base);
1188 	if (!ret)
1189 		mutex_unlock(&o.base);
1190 	else
1191 		WARN_ON(1);
1192 	WARN_ON(o.ctx != (void *)~0UL);
1193 
1194 	/* mutex_lock_killable (and *_nested) */
1195 	o.ctx = (void *)~0UL;
1196 	ret = mutex_lock_killable(&o.base);
1197 	if (!ret)
1198 		mutex_unlock(&o.base);
1199 	else
1200 		WARN_ON(1);
1201 	WARN_ON(o.ctx != (void *)~0UL);
1202 
1203 	/* trylock, succeeding */
1204 	o.ctx = (void *)~0UL;
1205 	ret = mutex_trylock(&o.base);
1206 	WARN_ON(!ret);
1207 	if (ret)
1208 		mutex_unlock(&o.base);
1209 	else
1210 		WARN_ON(1);
1211 	WARN_ON(o.ctx != (void *)~0UL);
1212 
1213 	/* trylock, failing */
1214 	o.ctx = (void *)~0UL;
1215 	mutex_lock(&o.base);
1216 	ret = mutex_trylock(&o.base);
1217 	WARN_ON(ret);
1218 	mutex_unlock(&o.base);
1219 	WARN_ON(o.ctx != (void *)~0UL);
1220 
1221 	/* nest_lock */
1222 	o.ctx = (void *)~0UL;
1223 	mutex_lock_nest_lock(&o.base, &t);
1224 	mutex_unlock(&o.base);
1225 	WARN_ON(o.ctx != (void *)~0UL);
1226 }
1227 
1228 static void ww_test_two_contexts(void)
1229 {
1230 	WWAI(&t);
1231 	WWAI(&t2);
1232 }
1233 
1234 static void ww_test_diff_class(void)
1235 {
1236 	WWAI(&t);
1237 #ifdef CONFIG_DEBUG_MUTEXES
1238 	t.ww_class = NULL;
1239 #endif
1240 	WWL(&o, &t);
1241 }
1242 
1243 static void ww_test_context_done_twice(void)
1244 {
1245 	WWAI(&t);
1246 	WWAD(&t);
1247 	WWAD(&t);
1248 	WWAF(&t);
1249 }
1250 
1251 static void ww_test_context_unlock_twice(void)
1252 {
1253 	WWAI(&t);
1254 	WWAD(&t);
1255 	WWAF(&t);
1256 	WWAF(&t);
1257 }
1258 
1259 static void ww_test_context_fini_early(void)
1260 {
1261 	WWAI(&t);
1262 	WWL(&o, &t);
1263 	WWAD(&t);
1264 	WWAF(&t);
1265 }
1266 
1267 static void ww_test_context_lock_after_done(void)
1268 {
1269 	WWAI(&t);
1270 	WWAD(&t);
1271 	WWL(&o, &t);
1272 }
1273 
1274 static void ww_test_object_unlock_twice(void)
1275 {
1276 	WWL1(&o);
1277 	WWU(&o);
1278 	WWU(&o);
1279 }
1280 
1281 static void ww_test_object_lock_unbalanced(void)
1282 {
1283 	WWAI(&t);
1284 	WWL(&o, &t);
1285 	t.acquired = 0;
1286 	WWU(&o);
1287 	WWAF(&t);
1288 }
1289 
1290 static void ww_test_object_lock_stale_context(void)
1291 {
1292 	WWAI(&t);
1293 	o.ctx = &t2;
1294 	WWL(&o, &t);
1295 }
1296 
1297 static void ww_test_edeadlk_normal(void)
1298 {
1299 	int ret;
1300 
1301 	mutex_lock(&o2.base);
1302 	o2.ctx = &t2;
1303 	mutex_release(&o2.base.dep_map, 1, _THIS_IP_);
1304 
1305 	WWAI(&t);
1306 	t2 = t;
1307 	t2.stamp--;
1308 
1309 	ret = WWL(&o, &t);
1310 	WARN_ON(ret);
1311 
1312 	ret = WWL(&o2, &t);
1313 	WARN_ON(ret != -EDEADLK);
1314 
1315 	o2.ctx = NULL;
1316 	mutex_acquire(&o2.base.dep_map, 0, 1, _THIS_IP_);
1317 	mutex_unlock(&o2.base);
1318 	WWU(&o);
1319 
1320 	WWL(&o2, &t);
1321 }
1322 
1323 static void ww_test_edeadlk_normal_slow(void)
1324 {
1325 	int ret;
1326 
1327 	mutex_lock(&o2.base);
1328 	mutex_release(&o2.base.dep_map, 1, _THIS_IP_);
1329 	o2.ctx = &t2;
1330 
1331 	WWAI(&t);
1332 	t2 = t;
1333 	t2.stamp--;
1334 
1335 	ret = WWL(&o, &t);
1336 	WARN_ON(ret);
1337 
1338 	ret = WWL(&o2, &t);
1339 	WARN_ON(ret != -EDEADLK);
1340 
1341 	o2.ctx = NULL;
1342 	mutex_acquire(&o2.base.dep_map, 0, 1, _THIS_IP_);
1343 	mutex_unlock(&o2.base);
1344 	WWU(&o);
1345 
1346 	ww_mutex_lock_slow(&o2, &t);
1347 }
1348 
1349 static void ww_test_edeadlk_no_unlock(void)
1350 {
1351 	int ret;
1352 
1353 	mutex_lock(&o2.base);
1354 	o2.ctx = &t2;
1355 	mutex_release(&o2.base.dep_map, 1, _THIS_IP_);
1356 
1357 	WWAI(&t);
1358 	t2 = t;
1359 	t2.stamp--;
1360 
1361 	ret = WWL(&o, &t);
1362 	WARN_ON(ret);
1363 
1364 	ret = WWL(&o2, &t);
1365 	WARN_ON(ret != -EDEADLK);
1366 
1367 	o2.ctx = NULL;
1368 	mutex_acquire(&o2.base.dep_map, 0, 1, _THIS_IP_);
1369 	mutex_unlock(&o2.base);
1370 
1371 	WWL(&o2, &t);
1372 }
1373 
1374 static void ww_test_edeadlk_no_unlock_slow(void)
1375 {
1376 	int ret;
1377 
1378 	mutex_lock(&o2.base);
1379 	mutex_release(&o2.base.dep_map, 1, _THIS_IP_);
1380 	o2.ctx = &t2;
1381 
1382 	WWAI(&t);
1383 	t2 = t;
1384 	t2.stamp--;
1385 
1386 	ret = WWL(&o, &t);
1387 	WARN_ON(ret);
1388 
1389 	ret = WWL(&o2, &t);
1390 	WARN_ON(ret != -EDEADLK);
1391 
1392 	o2.ctx = NULL;
1393 	mutex_acquire(&o2.base.dep_map, 0, 1, _THIS_IP_);
1394 	mutex_unlock(&o2.base);
1395 
1396 	ww_mutex_lock_slow(&o2, &t);
1397 }
1398 
1399 static void ww_test_edeadlk_acquire_more(void)
1400 {
1401 	int ret;
1402 
1403 	mutex_lock(&o2.base);
1404 	mutex_release(&o2.base.dep_map, 1, _THIS_IP_);
1405 	o2.ctx = &t2;
1406 
1407 	WWAI(&t);
1408 	t2 = t;
1409 	t2.stamp--;
1410 
1411 	ret = WWL(&o, &t);
1412 	WARN_ON(ret);
1413 
1414 	ret = WWL(&o2, &t);
1415 	WARN_ON(ret != -EDEADLK);
1416 
1417 	ret = WWL(&o3, &t);
1418 }
1419 
1420 static void ww_test_edeadlk_acquire_more_slow(void)
1421 {
1422 	int ret;
1423 
1424 	mutex_lock(&o2.base);
1425 	mutex_release(&o2.base.dep_map, 1, _THIS_IP_);
1426 	o2.ctx = &t2;
1427 
1428 	WWAI(&t);
1429 	t2 = t;
1430 	t2.stamp--;
1431 
1432 	ret = WWL(&o, &t);
1433 	WARN_ON(ret);
1434 
1435 	ret = WWL(&o2, &t);
1436 	WARN_ON(ret != -EDEADLK);
1437 
1438 	ww_mutex_lock_slow(&o3, &t);
1439 }
1440 
1441 static void ww_test_edeadlk_acquire_more_edeadlk(void)
1442 {
1443 	int ret;
1444 
1445 	mutex_lock(&o2.base);
1446 	mutex_release(&o2.base.dep_map, 1, _THIS_IP_);
1447 	o2.ctx = &t2;
1448 
1449 	mutex_lock(&o3.base);
1450 	mutex_release(&o3.base.dep_map, 1, _THIS_IP_);
1451 	o3.ctx = &t2;
1452 
1453 	WWAI(&t);
1454 	t2 = t;
1455 	t2.stamp--;
1456 
1457 	ret = WWL(&o, &t);
1458 	WARN_ON(ret);
1459 
1460 	ret = WWL(&o2, &t);
1461 	WARN_ON(ret != -EDEADLK);
1462 
1463 	ret = WWL(&o3, &t);
1464 	WARN_ON(ret != -EDEADLK);
1465 }
1466 
1467 static void ww_test_edeadlk_acquire_more_edeadlk_slow(void)
1468 {
1469 	int ret;
1470 
1471 	mutex_lock(&o2.base);
1472 	mutex_release(&o2.base.dep_map, 1, _THIS_IP_);
1473 	o2.ctx = &t2;
1474 
1475 	mutex_lock(&o3.base);
1476 	mutex_release(&o3.base.dep_map, 1, _THIS_IP_);
1477 	o3.ctx = &t2;
1478 
1479 	WWAI(&t);
1480 	t2 = t;
1481 	t2.stamp--;
1482 
1483 	ret = WWL(&o, &t);
1484 	WARN_ON(ret);
1485 
1486 	ret = WWL(&o2, &t);
1487 	WARN_ON(ret != -EDEADLK);
1488 
1489 	ww_mutex_lock_slow(&o3, &t);
1490 }
1491 
1492 static void ww_test_edeadlk_acquire_wrong(void)
1493 {
1494 	int ret;
1495 
1496 	mutex_lock(&o2.base);
1497 	mutex_release(&o2.base.dep_map, 1, _THIS_IP_);
1498 	o2.ctx = &t2;
1499 
1500 	WWAI(&t);
1501 	t2 = t;
1502 	t2.stamp--;
1503 
1504 	ret = WWL(&o, &t);
1505 	WARN_ON(ret);
1506 
1507 	ret = WWL(&o2, &t);
1508 	WARN_ON(ret != -EDEADLK);
1509 	if (!ret)
1510 		WWU(&o2);
1511 
1512 	WWU(&o);
1513 
1514 	ret = WWL(&o3, &t);
1515 }
1516 
1517 static void ww_test_edeadlk_acquire_wrong_slow(void)
1518 {
1519 	int ret;
1520 
1521 	mutex_lock(&o2.base);
1522 	mutex_release(&o2.base.dep_map, 1, _THIS_IP_);
1523 	o2.ctx = &t2;
1524 
1525 	WWAI(&t);
1526 	t2 = t;
1527 	t2.stamp--;
1528 
1529 	ret = WWL(&o, &t);
1530 	WARN_ON(ret);
1531 
1532 	ret = WWL(&o2, &t);
1533 	WARN_ON(ret != -EDEADLK);
1534 	if (!ret)
1535 		WWU(&o2);
1536 
1537 	WWU(&o);
1538 
1539 	ww_mutex_lock_slow(&o3, &t);
1540 }
1541 
1542 static void ww_test_spin_nest_unlocked(void)
1543 {
1544 	raw_spin_lock_nest_lock(&lock_A, &o.base);
1545 	U(A);
1546 }
1547 
1548 static void ww_test_unneeded_slow(void)
1549 {
1550 	WWAI(&t);
1551 
1552 	ww_mutex_lock_slow(&o, &t);
1553 }
1554 
1555 static void ww_test_context_block(void)
1556 {
1557 	int ret;
1558 
1559 	WWAI(&t);
1560 
1561 	ret = WWL(&o, &t);
1562 	WARN_ON(ret);
1563 	WWL1(&o2);
1564 }
1565 
1566 static void ww_test_context_try(void)
1567 {
1568 	int ret;
1569 
1570 	WWAI(&t);
1571 
1572 	ret = WWL(&o, &t);
1573 	WARN_ON(ret);
1574 
1575 	ret = WWT(&o2);
1576 	WARN_ON(!ret);
1577 	WWU(&o2);
1578 	WWU(&o);
1579 }
1580 
1581 static void ww_test_context_context(void)
1582 {
1583 	int ret;
1584 
1585 	WWAI(&t);
1586 
1587 	ret = WWL(&o, &t);
1588 	WARN_ON(ret);
1589 
1590 	ret = WWL(&o2, &t);
1591 	WARN_ON(ret);
1592 
1593 	WWU(&o2);
1594 	WWU(&o);
1595 }
1596 
1597 static void ww_test_try_block(void)
1598 {
1599 	bool ret;
1600 
1601 	ret = WWT(&o);
1602 	WARN_ON(!ret);
1603 
1604 	WWL1(&o2);
1605 	WWU(&o2);
1606 	WWU(&o);
1607 }
1608 
1609 static void ww_test_try_try(void)
1610 {
1611 	bool ret;
1612 
1613 	ret = WWT(&o);
1614 	WARN_ON(!ret);
1615 	ret = WWT(&o2);
1616 	WARN_ON(!ret);
1617 	WWU(&o2);
1618 	WWU(&o);
1619 }
1620 
1621 static void ww_test_try_context(void)
1622 {
1623 	int ret;
1624 
1625 	ret = WWT(&o);
1626 	WARN_ON(!ret);
1627 
1628 	WWAI(&t);
1629 
1630 	ret = WWL(&o2, &t);
1631 	WARN_ON(ret);
1632 }
1633 
1634 static void ww_test_block_block(void)
1635 {
1636 	WWL1(&o);
1637 	WWL1(&o2);
1638 }
1639 
1640 static void ww_test_block_try(void)
1641 {
1642 	bool ret;
1643 
1644 	WWL1(&o);
1645 	ret = WWT(&o2);
1646 	WARN_ON(!ret);
1647 }
1648 
1649 static void ww_test_block_context(void)
1650 {
1651 	int ret;
1652 
1653 	WWL1(&o);
1654 	WWAI(&t);
1655 
1656 	ret = WWL(&o2, &t);
1657 	WARN_ON(ret);
1658 }
1659 
1660 static void ww_test_spin_block(void)
1661 {
1662 	L(A);
1663 	U(A);
1664 
1665 	WWL1(&o);
1666 	L(A);
1667 	U(A);
1668 	WWU(&o);
1669 
1670 	L(A);
1671 	WWL1(&o);
1672 	WWU(&o);
1673 	U(A);
1674 }
1675 
1676 static void ww_test_spin_try(void)
1677 {
1678 	bool ret;
1679 
1680 	L(A);
1681 	U(A);
1682 
1683 	ret = WWT(&o);
1684 	WARN_ON(!ret);
1685 	L(A);
1686 	U(A);
1687 	WWU(&o);
1688 
1689 	L(A);
1690 	ret = WWT(&o);
1691 	WARN_ON(!ret);
1692 	WWU(&o);
1693 	U(A);
1694 }
1695 
1696 static void ww_test_spin_context(void)
1697 {
1698 	int ret;
1699 
1700 	L(A);
1701 	U(A);
1702 
1703 	WWAI(&t);
1704 
1705 	ret = WWL(&o, &t);
1706 	WARN_ON(ret);
1707 	L(A);
1708 	U(A);
1709 	WWU(&o);
1710 
1711 	L(A);
1712 	ret = WWL(&o, &t);
1713 	WARN_ON(ret);
1714 	WWU(&o);
1715 	U(A);
1716 }
1717 
1718 static void ww_tests(void)
1719 {
1720 	printk("  --------------------------------------------------------------------------\n");
1721 	printk("  | Wound/wait tests |\n");
1722 	printk("  ---------------------\n");
1723 
1724 	print_testname("ww api failures");
1725 	dotest(ww_test_fail_acquire, SUCCESS, LOCKTYPE_WW);
1726 	dotest(ww_test_normal, SUCCESS, LOCKTYPE_WW);
1727 	dotest(ww_test_unneeded_slow, FAILURE, LOCKTYPE_WW);
1728 	printk("\n");
1729 
1730 	print_testname("ww contexts mixing");
1731 	dotest(ww_test_two_contexts, FAILURE, LOCKTYPE_WW);
1732 	dotest(ww_test_diff_class, FAILURE, LOCKTYPE_WW);
1733 	printk("\n");
1734 
1735 	print_testname("finishing ww context");
1736 	dotest(ww_test_context_done_twice, FAILURE, LOCKTYPE_WW);
1737 	dotest(ww_test_context_unlock_twice, FAILURE, LOCKTYPE_WW);
1738 	dotest(ww_test_context_fini_early, FAILURE, LOCKTYPE_WW);
1739 	dotest(ww_test_context_lock_after_done, FAILURE, LOCKTYPE_WW);
1740 	printk("\n");
1741 
1742 	print_testname("locking mismatches");
1743 	dotest(ww_test_object_unlock_twice, FAILURE, LOCKTYPE_WW);
1744 	dotest(ww_test_object_lock_unbalanced, FAILURE, LOCKTYPE_WW);
1745 	dotest(ww_test_object_lock_stale_context, FAILURE, LOCKTYPE_WW);
1746 	printk("\n");
1747 
1748 	print_testname("EDEADLK handling");
1749 	dotest(ww_test_edeadlk_normal, SUCCESS, LOCKTYPE_WW);
1750 	dotest(ww_test_edeadlk_normal_slow, SUCCESS, LOCKTYPE_WW);
1751 	dotest(ww_test_edeadlk_no_unlock, FAILURE, LOCKTYPE_WW);
1752 	dotest(ww_test_edeadlk_no_unlock_slow, FAILURE, LOCKTYPE_WW);
1753 	dotest(ww_test_edeadlk_acquire_more, FAILURE, LOCKTYPE_WW);
1754 	dotest(ww_test_edeadlk_acquire_more_slow, FAILURE, LOCKTYPE_WW);
1755 	dotest(ww_test_edeadlk_acquire_more_edeadlk, FAILURE, LOCKTYPE_WW);
1756 	dotest(ww_test_edeadlk_acquire_more_edeadlk_slow, FAILURE, LOCKTYPE_WW);
1757 	dotest(ww_test_edeadlk_acquire_wrong, FAILURE, LOCKTYPE_WW);
1758 	dotest(ww_test_edeadlk_acquire_wrong_slow, FAILURE, LOCKTYPE_WW);
1759 	printk("\n");
1760 
1761 	print_testname("spinlock nest unlocked");
1762 	dotest(ww_test_spin_nest_unlocked, FAILURE, LOCKTYPE_WW);
1763 	printk("\n");
1764 
1765 	printk("  -----------------------------------------------------\n");
1766 	printk("                                 |block | try  |context|\n");
1767 	printk("  -----------------------------------------------------\n");
1768 
1769 	print_testname("context");
1770 	dotest(ww_test_context_block, FAILURE, LOCKTYPE_WW);
1771 	dotest(ww_test_context_try, SUCCESS, LOCKTYPE_WW);
1772 	dotest(ww_test_context_context, SUCCESS, LOCKTYPE_WW);
1773 	printk("\n");
1774 
1775 	print_testname("try");
1776 	dotest(ww_test_try_block, FAILURE, LOCKTYPE_WW);
1777 	dotest(ww_test_try_try, SUCCESS, LOCKTYPE_WW);
1778 	dotest(ww_test_try_context, FAILURE, LOCKTYPE_WW);
1779 	printk("\n");
1780 
1781 	print_testname("block");
1782 	dotest(ww_test_block_block, FAILURE, LOCKTYPE_WW);
1783 	dotest(ww_test_block_try, SUCCESS, LOCKTYPE_WW);
1784 	dotest(ww_test_block_context, FAILURE, LOCKTYPE_WW);
1785 	printk("\n");
1786 
1787 	print_testname("spinlock");
1788 	dotest(ww_test_spin_block, FAILURE, LOCKTYPE_WW);
1789 	dotest(ww_test_spin_try, SUCCESS, LOCKTYPE_WW);
1790 	dotest(ww_test_spin_context, FAILURE, LOCKTYPE_WW);
1791 	printk("\n");
1792 }
1793 
1794 void locking_selftest(void)
1795 {
1796 	/*
1797 	 * Got a locking failure before the selftest ran?
1798 	 */
1799 	if (!debug_locks) {
1800 		printk("----------------------------------\n");
1801 		printk("| Locking API testsuite disabled |\n");
1802 		printk("----------------------------------\n");
1803 		return;
1804 	}
1805 
1806 	/*
1807 	 * Run the testsuite:
1808 	 */
1809 	printk("------------------------\n");
1810 	printk("| Locking API testsuite:\n");
1811 	printk("----------------------------------------------------------------------------\n");
1812 	printk("                                 | spin |wlock |rlock |mutex | wsem | rsem |\n");
1813 	printk("  --------------------------------------------------------------------------\n");
1814 
1815 	init_shared_classes();
1816 	debug_locks_silent = !debug_locks_verbose;
1817 
1818 	DO_TESTCASE_6R("A-A deadlock", AA);
1819 	DO_TESTCASE_6R("A-B-B-A deadlock", ABBA);
1820 	DO_TESTCASE_6R("A-B-B-C-C-A deadlock", ABBCCA);
1821 	DO_TESTCASE_6R("A-B-C-A-B-C deadlock", ABCABC);
1822 	DO_TESTCASE_6R("A-B-B-C-C-D-D-A deadlock", ABBCCDDA);
1823 	DO_TESTCASE_6R("A-B-C-D-B-D-D-A deadlock", ABCDBDDA);
1824 	DO_TESTCASE_6R("A-B-C-D-B-C-D-A deadlock", ABCDBCDA);
1825 	DO_TESTCASE_6("double unlock", double_unlock);
1826 	DO_TESTCASE_6("initialize held", init_held);
1827 	DO_TESTCASE_6_SUCCESS("bad unlock order", bad_unlock_order);
1828 
1829 	printk("  --------------------------------------------------------------------------\n");
1830 	print_testname("recursive read-lock");
1831 	printk("             |");
1832 	dotest(rlock_AA1, SUCCESS, LOCKTYPE_RWLOCK);
1833 	printk("             |");
1834 	dotest(rsem_AA1, FAILURE, LOCKTYPE_RWSEM);
1835 	printk("\n");
1836 
1837 	print_testname("recursive read-lock #2");
1838 	printk("             |");
1839 	dotest(rlock_AA1B, SUCCESS, LOCKTYPE_RWLOCK);
1840 	printk("             |");
1841 	dotest(rsem_AA1B, FAILURE, LOCKTYPE_RWSEM);
1842 	printk("\n");
1843 
1844 	print_testname("mixed read-write-lock");
1845 	printk("             |");
1846 	dotest(rlock_AA2, FAILURE, LOCKTYPE_RWLOCK);
1847 	printk("             |");
1848 	dotest(rsem_AA2, FAILURE, LOCKTYPE_RWSEM);
1849 	printk("\n");
1850 
1851 	print_testname("mixed write-read-lock");
1852 	printk("             |");
1853 	dotest(rlock_AA3, FAILURE, LOCKTYPE_RWLOCK);
1854 	printk("             |");
1855 	dotest(rsem_AA3, FAILURE, LOCKTYPE_RWSEM);
1856 	printk("\n");
1857 
1858 	printk("  --------------------------------------------------------------------------\n");
1859 
1860 	/*
1861 	 * irq-context testcases:
1862 	 */
1863 	DO_TESTCASE_2x6("irqs-on + irq-safe-A", irqsafe1);
1864 	DO_TESTCASE_2x3("sirq-safe-A => hirqs-on", irqsafe2A);
1865 	DO_TESTCASE_2x6("safe-A + irqs-on", irqsafe2B);
1866 	DO_TESTCASE_6x6("safe-A + unsafe-B #1", irqsafe3);
1867 	DO_TESTCASE_6x6("safe-A + unsafe-B #2", irqsafe4);
1868 	DO_TESTCASE_6x6RW("irq lock-inversion", irq_inversion);
1869 
1870 	DO_TESTCASE_6x2("irq read-recursion", irq_read_recursion);
1871 //	DO_TESTCASE_6x2B("irq read-recursion #2", irq_read_recursion2);
1872 
1873 	ww_tests();
1874 
1875 	if (unexpected_testcase_failures) {
1876 		printk("-----------------------------------------------------------------\n");
1877 		debug_locks = 0;
1878 		printk("BUG: %3d unexpected failures (out of %3d) - debugging disabled! |\n",
1879 			unexpected_testcase_failures, testcase_total);
1880 		printk("-----------------------------------------------------------------\n");
1881 	} else if (expected_testcase_failures && testcase_successes) {
1882 		printk("--------------------------------------------------------\n");
1883 		printk("%3d out of %3d testcases failed, as expected. |\n",
1884 			expected_testcase_failures, testcase_total);
1885 		printk("----------------------------------------------------\n");
1886 		debug_locks = 1;
1887 	} else if (expected_testcase_failures && !testcase_successes) {
1888 		printk("--------------------------------------------------------\n");
1889 		printk("All %3d testcases failed, as expected. |\n",
1890 			expected_testcase_failures);
1891 		printk("----------------------------------------\n");
1892 		debug_locks = 1;
1893 	} else {
1894 		printk("-------------------------------------------------------\n");
1895 		printk("Good, all %3d testcases passed! |\n",
1896 			testcase_successes);
1897 		printk("---------------------------------\n");
1898 		debug_locks = 1;
1899 	}
1900 	debug_locks_silent = 0;
1901 }
1902