aboutsummaryrefslogtreecommitdiffstats
path: root/lib/locking-selftest.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/locking-selftest.c')
-rw-r--r--lib/locking-selftest.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/lib/locking-selftest.c b/lib/locking-selftest.c
index 619313ed6c46..65e7eab8498e 100644
--- a/lib/locking-selftest.c
+++ b/lib/locking-selftest.c
@@ -158,7 +158,7 @@ static void init_shared_classes(void)
158 local_bh_disable(); \ 158 local_bh_disable(); \
159 local_irq_disable(); \ 159 local_irq_disable(); \
160 lockdep_softirq_enter(); \ 160 lockdep_softirq_enter(); \
161 WARN_ON(!in_softirq()); 161 /* FIXME: preemptible softirqs. WARN_ON(!in_softirq()); */
162 162
163#define SOFTIRQ_EXIT() \ 163#define SOFTIRQ_EXIT() \
164 lockdep_softirq_exit(); \ 164 lockdep_softirq_exit(); \
@@ -550,6 +550,11 @@ GENERATE_TESTCASE(init_held_rsem)
550#undef E 550#undef E
551 551
552/* 552/*
553 * FIXME: turns these into raw-spinlock tests on -rt
554 */
555#ifndef CONFIG_PREEMPT_RT
556
557/*
553 * locking an irq-safe lock with irqs enabled: 558 * locking an irq-safe lock with irqs enabled:
554 */ 559 */
555#define E1() \ 560#define E1() \
@@ -890,6 +895,8 @@ GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion_soft)
890#include "locking-selftest-softirq.h" 895#include "locking-selftest-softirq.h"
891// GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion2_soft) 896// GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion2_soft)
892 897
898#endif /* !CONFIG_PREEMPT_RT */
899
893#ifdef CONFIG_DEBUG_LOCK_ALLOC 900#ifdef CONFIG_DEBUG_LOCK_ALLOC
894# define I_SPINLOCK(x) lockdep_reset_lock(&lock_##x.dep_map) 901# define I_SPINLOCK(x) lockdep_reset_lock(&lock_##x.dep_map)
895# define I_RWLOCK(x) lockdep_reset_lock(&rwlock_##x.dep_map) 902# define I_RWLOCK(x) lockdep_reset_lock(&rwlock_##x.dep_map)
@@ -998,7 +1005,7 @@ static inline void print_testname(const char *testname)
998 1005
999#define DO_TESTCASE_1(desc, name, nr) \ 1006#define DO_TESTCASE_1(desc, name, nr) \
1000 print_testname(desc"/"#nr); \ 1007 print_testname(desc"/"#nr); \
1001 dotest(name##_##nr, SUCCESS, LOCKTYPE_RWLOCK); \ 1008 dotest(name##_##nr, SUCCESS, LOCKTYPE_RWLOCK); \
1002 printk("\n"); 1009 printk("\n");
1003 1010
1004#define DO_TESTCASE_1B(desc, name, nr) \ 1011#define DO_TESTCASE_1B(desc, name, nr) \
@@ -1006,17 +1013,17 @@ static inline void print_testname(const char *testname)
1006 dotest(name##_##nr, FAILURE, LOCKTYPE_RWLOCK); \ 1013 dotest(name##_##nr, FAILURE, LOCKTYPE_RWLOCK); \
1007 printk("\n"); 1014 printk("\n");
1008 1015
1009#define DO_TESTCASE_3(desc, name, nr) \ 1016#define DO_TESTCASE_3(desc, name, nr) \
1010 print_testname(desc"/"#nr); \ 1017 print_testname(desc"/"#nr); \
1011 dotest(name##_spin_##nr, FAILURE, LOCKTYPE_SPIN); \ 1018 dotest(name##_spin_##nr, FAILURE, LOCKTYPE_SPIN); \
1012 dotest(name##_wlock_##nr, FAILURE, LOCKTYPE_RWLOCK); \ 1019 dotest(name##_wlock_##nr, FAILURE, LOCKTYPE_RWLOCK); \
1013 dotest(name##_rlock_##nr, SUCCESS, LOCKTYPE_RWLOCK); \ 1020 dotest(name##_rlock_##nr, SUCCESS, LOCKTYPE_RWLOCK); \
1014 printk("\n"); 1021 printk("\n");
1015 1022
1016#define DO_TESTCASE_3RW(desc, name, nr) \ 1023#define DO_TESTCASE_3RW(desc, name, nr) \
1017 print_testname(desc"/"#nr); \ 1024 print_testname(desc"/"#nr); \
1018 dotest(name##_spin_##nr, FAILURE, LOCKTYPE_SPIN|LOCKTYPE_RWLOCK);\ 1025 dotest(name##_spin_##nr, FAILURE, LOCKTYPE_SPIN|LOCKTYPE_RWLOCK);\
1019 dotest(name##_wlock_##nr, FAILURE, LOCKTYPE_RWLOCK); \ 1026 dotest(name##_wlock_##nr, FAILURE, LOCKTYPE_RWLOCK); \
1020 dotest(name##_rlock_##nr, SUCCESS, LOCKTYPE_RWLOCK); \ 1027 dotest(name##_rlock_##nr, SUCCESS, LOCKTYPE_RWLOCK); \
1021 printk("\n"); 1028 printk("\n");
1022 1029
@@ -1047,7 +1054,7 @@ static inline void print_testname(const char *testname)
1047 print_testname(desc); \ 1054 print_testname(desc); \
1048 dotest(name##_spin, FAILURE, LOCKTYPE_SPIN); \ 1055 dotest(name##_spin, FAILURE, LOCKTYPE_SPIN); \
1049 dotest(name##_wlock, FAILURE, LOCKTYPE_RWLOCK); \ 1056 dotest(name##_wlock, FAILURE, LOCKTYPE_RWLOCK); \
1050 dotest(name##_rlock, SUCCESS, LOCKTYPE_RWLOCK); \ 1057 dotest(name##_rlock, SUCCESS, LOCKTYPE_RWLOCK); \
1051 dotest(name##_mutex, FAILURE, LOCKTYPE_MUTEX); \ 1058 dotest(name##_mutex, FAILURE, LOCKTYPE_MUTEX); \
1052 dotest(name##_wsem, FAILURE, LOCKTYPE_RWSEM); \ 1059 dotest(name##_wsem, FAILURE, LOCKTYPE_RWSEM); \
1053 dotest(name##_rsem, FAILURE, LOCKTYPE_RWSEM); \ 1060 dotest(name##_rsem, FAILURE, LOCKTYPE_RWSEM); \
@@ -1179,6 +1186,7 @@ void locking_selftest(void)
1179 /* 1186 /*
1180 * irq-context testcases: 1187 * irq-context testcases:
1181 */ 1188 */
1189#ifndef CONFIG_PREEMPT_RT
1182 DO_TESTCASE_2x6("irqs-on + irq-safe-A", irqsafe1); 1190 DO_TESTCASE_2x6("irqs-on + irq-safe-A", irqsafe1);
1183 DO_TESTCASE_2x3("sirq-safe-A => hirqs-on", irqsafe2A); 1191 DO_TESTCASE_2x3("sirq-safe-A => hirqs-on", irqsafe2A);
1184 DO_TESTCASE_2x6("safe-A + irqs-on", irqsafe2B); 1192 DO_TESTCASE_2x6("safe-A + irqs-on", irqsafe2B);
@@ -1188,6 +1196,7 @@ void locking_selftest(void)
1188 1196
1189 DO_TESTCASE_6x2("irq read-recursion", irq_read_recursion); 1197 DO_TESTCASE_6x2("irq read-recursion", irq_read_recursion);
1190// DO_TESTCASE_6x2B("irq read-recursion #2", irq_read_recursion2); 1198// DO_TESTCASE_6x2B("irq read-recursion #2", irq_read_recursion2);
1199#endif
1191 1200
1192 if (unexpected_testcase_failures) { 1201 if (unexpected_testcase_failures) {
1193 printk("-----------------------------------------------------------------\n"); 1202 printk("-----------------------------------------------------------------\n");