Skip to content

Commit a529f8d

Browse files
Sebastian Andrzej SiewiorPeter Zijlstra
authored andcommitted
lockdep/selftests: Skip the softirq related tests on PREEMPT_RT
The softirq context on PREEMPT_RT is different compared to !PREEMPT_RT. As such lockdep_softirq_enter() is a nop and the all the "softirq safe" tests fail on PREEMPT_RT because there is no difference. Skip the softirq context tests on PREEMPT_RT. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/r/20211129174654.668506-9-bigeasy@linutronix.de
1 parent 512bf71 commit a529f8d

1 file changed

Lines changed: 31 additions & 7 deletions

File tree

lib/locking-selftest.c

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@
2626
#include <linux/rtmutex.h>
2727
#include <linux/local_lock.h>
2828

29+
#ifdef CONFIG_PREEMPT_RT
30+
# define NON_RT(...)
31+
#else
32+
# define NON_RT(...) __VA_ARGS__
33+
#endif
34+
2935
/*
3036
* Change this to 1 if you want to see the failure printouts:
3137
*/
@@ -808,6 +814,7 @@ GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_hard_rlock)
808814
#include "locking-selftest-wlock-hardirq.h"
809815
GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_hard_wlock)
810816

817+
#ifndef CONFIG_PREEMPT_RT
811818
#include "locking-selftest-spin-softirq.h"
812819
GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_soft_spin)
813820

@@ -816,10 +823,12 @@ GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_soft_rlock)
816823

817824
#include "locking-selftest-wlock-softirq.h"
818825
GENERATE_PERMUTATIONS_2_EVENTS(irqsafe1_soft_wlock)
826+
#endif
819827

820828
#undef E1
821829
#undef E2
822830

831+
#ifndef CONFIG_PREEMPT_RT
823832
/*
824833
* Enabling hardirqs with a softirq-safe lock held:
825834
*/
@@ -852,6 +861,8 @@ GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2A_rlock)
852861
#undef E1
853862
#undef E2
854863

864+
#endif
865+
855866
/*
856867
* Enabling irqs with an irq-safe lock held:
857868
*/
@@ -881,6 +892,7 @@ GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_hard_rlock)
881892
#include "locking-selftest-wlock-hardirq.h"
882893
GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_hard_wlock)
883894

895+
#ifndef CONFIG_PREEMPT_RT
884896
#include "locking-selftest-spin-softirq.h"
885897
GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_soft_spin)
886898

@@ -889,6 +901,7 @@ GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_soft_rlock)
889901

890902
#include "locking-selftest-wlock-softirq.h"
891903
GENERATE_PERMUTATIONS_2_EVENTS(irqsafe2B_soft_wlock)
904+
#endif
892905

893906
#undef E1
894907
#undef E2
@@ -927,6 +940,7 @@ GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_hard_rlock)
927940
#include "locking-selftest-wlock-hardirq.h"
928941
GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_hard_wlock)
929942

943+
#ifndef CONFIG_PREEMPT_RT
930944
#include "locking-selftest-spin-softirq.h"
931945
GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_soft_spin)
932946

@@ -935,6 +949,7 @@ GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_soft_rlock)
935949

936950
#include "locking-selftest-wlock-softirq.h"
937951
GENERATE_PERMUTATIONS_3_EVENTS(irqsafe3_soft_wlock)
952+
#endif
938953

939954
#undef E1
940955
#undef E2
@@ -975,6 +990,7 @@ GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_hard_rlock)
975990
#include "locking-selftest-wlock-hardirq.h"
976991
GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_hard_wlock)
977992

993+
#ifndef CONFIG_PREEMPT_RT
978994
#include "locking-selftest-spin-softirq.h"
979995
GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_soft_spin)
980996

@@ -983,6 +999,7 @@ GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_soft_rlock)
983999

9841000
#include "locking-selftest-wlock-softirq.h"
9851001
GENERATE_PERMUTATIONS_3_EVENTS(irqsafe4_soft_wlock)
1002+
#endif
9861003

9871004
#undef E1
9881005
#undef E2
@@ -1037,6 +1054,7 @@ GENERATE_PERMUTATIONS_3_EVENTS(irq_inversion_hard_rlock)
10371054
#include "locking-selftest-wlock-hardirq.h"
10381055
GENERATE_PERMUTATIONS_3_EVENTS(irq_inversion_hard_wlock)
10391056

1057+
#ifndef CONFIG_PREEMPT_RT
10401058
#include "locking-selftest-spin-softirq.h"
10411059
GENERATE_PERMUTATIONS_3_EVENTS(irq_inversion_soft_spin)
10421060

@@ -1045,6 +1063,7 @@ GENERATE_PERMUTATIONS_3_EVENTS(irq_inversion_soft_rlock)
10451063

10461064
#include "locking-selftest-wlock-softirq.h"
10471065
GENERATE_PERMUTATIONS_3_EVENTS(irq_inversion_soft_wlock)
1066+
#endif
10481067

10491068
#undef E1
10501069
#undef E2
@@ -1212,12 +1231,14 @@ GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion_hard_rlock)
12121231
#include "locking-selftest-wlock.h"
12131232
GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion_hard_wlock)
12141233

1234+
#ifndef CONFIG_PREEMPT_RT
12151235
#include "locking-selftest-softirq.h"
12161236
#include "locking-selftest-rlock.h"
12171237
GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion_soft_rlock)
12181238

12191239
#include "locking-selftest-wlock.h"
12201240
GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion_soft_wlock)
1241+
#endif
12211242

12221243
#undef E1
12231244
#undef E2
@@ -1258,12 +1279,14 @@ GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion2_hard_rlock)
12581279
#include "locking-selftest-wlock.h"
12591280
GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion2_hard_wlock)
12601281

1282+
#ifndef CONFIG_PREEMPT_RT
12611283
#include "locking-selftest-softirq.h"
12621284
#include "locking-selftest-rlock.h"
12631285
GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion2_soft_rlock)
12641286

12651287
#include "locking-selftest-wlock.h"
12661288
GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion2_soft_wlock)
1289+
#endif
12671290

12681291
#undef E1
12691292
#undef E2
@@ -1312,12 +1335,14 @@ GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion3_hard_rlock)
13121335
#include "locking-selftest-wlock.h"
13131336
GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion3_hard_wlock)
13141337

1338+
#ifndef CONFIG_PREEMPT_RT
13151339
#include "locking-selftest-softirq.h"
13161340
#include "locking-selftest-rlock.h"
13171341
GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion3_soft_rlock)
13181342

13191343
#include "locking-selftest-wlock.h"
13201344
GENERATE_PERMUTATIONS_3_EVENTS(irq_read_recursion3_soft_wlock)
1345+
#endif
13211346

13221347
#ifdef CONFIG_DEBUG_LOCK_ALLOC
13231348
# define I_SPINLOCK(x) lockdep_reset_lock(&lock_##x.dep_map)
@@ -1523,7 +1548,7 @@ static inline void print_testname(const char *testname)
15231548

15241549
#define DO_TESTCASE_2x2RW(desc, name, nr) \
15251550
DO_TESTCASE_2RW("hard-"desc, name##_hard, nr) \
1526-
DO_TESTCASE_2RW("soft-"desc, name##_soft, nr) \
1551+
NON_RT(DO_TESTCASE_2RW("soft-"desc, name##_soft, nr)) \
15271552

15281553
#define DO_TESTCASE_6x2x2RW(desc, name) \
15291554
DO_TESTCASE_2x2RW(desc, name, 123); \
@@ -1571,19 +1596,19 @@ static inline void print_testname(const char *testname)
15711596

15721597
#define DO_TESTCASE_2I(desc, name, nr) \
15731598
DO_TESTCASE_1("hard-"desc, name##_hard, nr); \
1574-
DO_TESTCASE_1("soft-"desc, name##_soft, nr);
1599+
NON_RT(DO_TESTCASE_1("soft-"desc, name##_soft, nr));
15751600

15761601
#define DO_TESTCASE_2IB(desc, name, nr) \
15771602
DO_TESTCASE_1B("hard-"desc, name##_hard, nr); \
1578-
DO_TESTCASE_1B("soft-"desc, name##_soft, nr);
1603+
NON_RT(DO_TESTCASE_1B("soft-"desc, name##_soft, nr));
15791604

15801605
#define DO_TESTCASE_6I(desc, name, nr) \
15811606
DO_TESTCASE_3("hard-"desc, name##_hard, nr); \
1582-
DO_TESTCASE_3("soft-"desc, name##_soft, nr);
1607+
NON_RT(DO_TESTCASE_3("soft-"desc, name##_soft, nr));
15831608

15841609
#define DO_TESTCASE_6IRW(desc, name, nr) \
15851610
DO_TESTCASE_3RW("hard-"desc, name##_hard, nr); \
1586-
DO_TESTCASE_3RW("soft-"desc, name##_soft, nr);
1611+
NON_RT(DO_TESTCASE_3RW("soft-"desc, name##_soft, nr));
15871612

15881613
#define DO_TESTCASE_2x3(desc, name) \
15891614
DO_TESTCASE_3(desc, name, 12); \
@@ -2909,12 +2934,11 @@ void locking_selftest(void)
29092934
DO_TESTCASE_6x1RR("rlock W1R2/R2R3/W3W1", W1R2_R2R3_W3W1);
29102935

29112936
printk(" --------------------------------------------------------------------------\n");
2912-
29132937
/*
29142938
* irq-context testcases:
29152939
*/
29162940
DO_TESTCASE_2x6("irqs-on + irq-safe-A", irqsafe1);
2917-
DO_TESTCASE_2x3("sirq-safe-A => hirqs-on", irqsafe2A);
2941+
NON_RT(DO_TESTCASE_2x3("sirq-safe-A => hirqs-on", irqsafe2A));
29182942
DO_TESTCASE_2x6("safe-A + irqs-on", irqsafe2B);
29192943
DO_TESTCASE_6x6("safe-A + unsafe-B #1", irqsafe3);
29202944
DO_TESTCASE_6x6("safe-A + unsafe-B #2", irqsafe4);

0 commit comments

Comments
 (0)