All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Uladzislau Rezki (Sony)" <urezki@gmail.com>
To: LKML <linux-kernel@vger.kernel.org>, RCU <rcu@vger.kernel.org>,
	"Paul E . McKenney" <paulmck@kernel.org>,
	Michael Ellerman <mpe@ellerman.id.au>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Daniel Axtens <dja@axtens.net>,
	Frederic Weisbecker <frederic@kernel.org>,
	Neeraj Upadhyay <neeraju@codeaurora.org>,
	Joel Fernandes <joel@joelfernandes.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Michal Hocko <mhocko@suse.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	"Theodore Y . Ts'o" <tytso@mit.edu>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	Uladzislau Rezki <urezki@gmail.com>,
	Oleksiy Avramchenko <oleksiy.avramchenko@sonymobile.com>
Subject: [PATCH 2/2] rcu-tasks: add RCU-tasks self tests
Date: Wed,  9 Dec 2020 21:27:32 +0100	[thread overview]
Message-ID: <20201209202732.5896-2-urezki@gmail.com> (raw)
In-Reply-To: <20201209202732.5896-1-urezki@gmail.com>

Add self tests for checking of RCU-tasks API functionality.
It covers:
    - wait API functions;
    - invoking/completion call_rcu_tasks*().

Self-tests are run when CONFIG_PROVE_RCU kernel parameter is set.

Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
---
 kernel/rcu/tasks.h | 44 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/kernel/rcu/tasks.h b/kernel/rcu/tasks.h
index 67a162949763..9407772780c1 100644
--- a/kernel/rcu/tasks.h
+++ b/kernel/rcu/tasks.h
@@ -1225,6 +1225,16 @@ void show_rcu_tasks_gp_kthreads(void)
 }
 #endif /* #ifndef CONFIG_TINY_RCU */
 
+static struct rcu_head rhp;
+static int rcu_execurted_test_counter;
+static int rcu_run_test_counter;
+
+static void test_rcu_tasks_callback(struct rcu_head *r)
+{
+	pr_info("RCU-tasks test callback executed %d\n",
+		++rcu_execurted_test_counter);
+}
+
 void __init rcu_init_tasks_generic(void)
 {
 #ifdef CONFIG_TASKS_RCU
@@ -1238,7 +1248,41 @@ void __init rcu_init_tasks_generic(void)
 #ifdef CONFIG_TASKS_TRACE_RCU
 	rcu_spawn_tasks_trace_kthread();
 #endif
+
+	if (IS_ENABLED(CONFIG_PROVE_RCU)) {
+		pr_info("Running RCU-tasks wait API self tests\n");
+#ifdef CONFIG_TASKS_RCU
+		rcu_run_test_counter++;
+		call_rcu_tasks(&rhp, test_rcu_tasks_callback);
+		synchronize_rcu_tasks();
+#endif
+
+#ifdef CONFIG_TASKS_RUDE_RCU
+		rcu_run_test_counter++;
+		call_rcu_tasks_trace(&rhp, test_rcu_tasks_callback);
+		synchronize_rcu_tasks_rude();
+#endif
+
+#ifdef CONFIG_TASKS_TRACE_RCU
+		rcu_run_test_counter++;
+		call_rcu_tasks_trace(&rhp, test_rcu_tasks_callback);
+		synchronize_rcu_tasks_trace();
+#endif
+	}
+}
+
+static int rcu_tasks_verify_self_tests(void)
+{
+	int ret = 0;
+
+	if (rcu_run_test_counter != rcu_execurted_test_counter) {
+		WARN_ON(1);
+		ret = -1;
+	}
+
+	return ret;
 }
+late_initcall(rcu_tasks_verify_self_tests);
 
 #else /* #ifdef CONFIG_TASKS_RCU_GENERIC */
 static inline void rcu_tasks_bootup_oddness(void) {}
-- 
2.20.1


  reply	other threads:[~2020-12-09 20:31 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-09 20:27 [PATCH 1/2] rcu-tasks: move RCU-tasks initialization out of core_initcall() Uladzislau Rezki (Sony)
2020-12-09 20:27 ` Uladzislau Rezki (Sony) [this message]
2020-12-16 15:49   ` [PATCH 2/2] rcu-tasks: add RCU-tasks self tests Uladzislau Rezki
2020-12-16 23:29     ` Paul E. McKenney
2020-12-21 15:38       ` Uladzislau Rezki
2020-12-21 17:18         ` Paul E. McKenney
2020-12-21 18:45           ` Uladzislau Rezki
2020-12-21 19:29             ` Paul E. McKenney
2020-12-21 19:48               ` Uladzislau Rezki
2020-12-21 20:45                 ` Paul E. McKenney
2020-12-21 21:28                   ` Uladzislau Rezki
2021-02-12 19:20   ` Sebastian Andrzej Siewior
2021-02-12 21:12     ` Uladzislau Rezki
2021-02-12 23:48       ` Paul E. McKenney
2021-02-13  0:37         ` Paul E. McKenney
2021-02-13  0:43           ` Paul E. McKenney
2021-02-13 11:30             ` Uladzislau Rezki
2021-02-13 16:45               ` Paul E. McKenney
2021-02-13 20:00                 ` Uladzislau Rezki
2021-02-15 11:28                 ` Sebastian Andrzej Siewior
2021-02-16 17:30                   ` Paul E. McKenney
2021-02-17 14:47                     ` Masami Hiramatsu
2021-02-17 18:17                       ` Paul E. McKenney
2021-02-18  5:03                         ` Masami Hiramatsu
2021-02-18  8:36                           ` Uladzislau Rezki
2021-02-18 14:29                             ` Masami Hiramatsu
2020-12-09 20:37 ` [PATCH 1/2] rcu-tasks: move RCU-tasks initialization out of core_initcall() Uladzislau Rezki
2020-12-10 13:39   ` Daniel Axtens
2020-12-10 17:32     ` Paul E. McKenney
2020-12-10 18:17     ` Uladzislau Rezki
2020-12-10  3:26 ` Paul E. McKenney
2020-12-10 13:04   ` Uladzislau Rezki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201209202732.5896-2-urezki@gmail.com \
    --to=urezki@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=bigeasy@linutronix.de \
    --cc=dja@axtens.net \
    --cc=frederic@kernel.org \
    --cc=joel@joelfernandes.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhocko@suse.com \
    --cc=mpe@ellerman.id.au \
    --cc=neeraju@codeaurora.org \
    --cc=oleksiy.avramchenko@sonymobile.com \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rcu@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=tytso@mit.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.