From ede317202201d4b22bd1127e9b5bcd527c920dc8 Mon Sep 17 00:00:00 2001
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Wed, 10 Mar 2021 15:09:02 +0100
Subject: [PATCH 104/158] rcu: Delay RCU-selftests

Delay RCU-selftests until ksoftirqd is up and running.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 include/linux/rcupdate.h | 7 +++++++
 init/main.c              | 1 +
 kernel/rcu/tasks.h       | 9 ++-------
 3 files changed, 10 insertions(+), 7 deletions(-)

Index: linux-5.15.19-rt29/include/linux/rcupdate.h
===================================================================
--- linux-5.15.19-rt29.orig/include/linux/rcupdate.h
+++ linux-5.15.19-rt29/include/linux/rcupdate.h
@@ -94,6 +94,13 @@ void rcu_init_tasks_generic(void);
 static inline void rcu_init_tasks_generic(void) { }
 #endif
 
+#if defined(CONFIG_PROVE_RCU) && defined(CONFIG_TASKS_RCU_GENERIC)
+void rcu_tasks_initiate_self_tests(void);
+#else
+static inline void rcu_tasks_initiate_self_tests(void) {}
+#endif
+
+
 #ifdef CONFIG_RCU_STALL_COMMON
 void rcu_sysrq_start(void);
 void rcu_sysrq_end(void);
Index: linux-5.15.19-rt29/init/main.c
===================================================================
--- linux-5.15.19-rt29.orig/init/main.c
+++ linux-5.15.19-rt29/init/main.c
@@ -1604,6 +1604,7 @@ static noinline void __init kernel_init_
 
 	rcu_init_tasks_generic();
 	do_pre_smp_initcalls();
+	rcu_tasks_initiate_self_tests();
 	lockup_detector_init();
 
 	smp_init();
Index: linux-5.15.19-rt29/kernel/rcu/tasks.h
===================================================================
--- linux-5.15.19-rt29.orig/kernel/rcu/tasks.h
+++ linux-5.15.19-rt29/kernel/rcu/tasks.h
@@ -1347,7 +1347,7 @@ static void test_rcu_tasks_callback(stru
 	rttd->notrun = true;
 }
 
-static void rcu_tasks_initiate_self_tests(void)
+void rcu_tasks_initiate_self_tests(void)
 {
 	pr_info("Running RCU-tasks wait API self tests\n");
 #ifdef CONFIG_TASKS_RCU
@@ -1384,9 +1384,7 @@ static int rcu_tasks_verify_self_tests(v
 	return ret;
 }
 late_initcall(rcu_tasks_verify_self_tests);
-#else /* #ifdef CONFIG_PROVE_RCU */
-static void rcu_tasks_initiate_self_tests(void) { }
-#endif /* #else #ifdef CONFIG_PROVE_RCU */
+#endif /* #ifdef CONFIG_PROVE_RCU */
 
 void __init rcu_init_tasks_generic(void)
 {
@@ -1401,9 +1399,6 @@ void __init rcu_init_tasks_generic(void)
 #ifdef CONFIG_TASKS_TRACE_RCU
 	rcu_spawn_tasks_trace_kthread();
 #endif
-
-	// Run the self-tests.
-	rcu_tasks_initiate_self_tests();
 }
 
 #else /* #ifdef CONFIG_TASKS_RCU_GENERIC */