summaryrefslogtreecommitdiff
authorPaul E. McKenney <paulmck@linux.ibm.com>2019-03-21 17:26:41 (GMT)
committer Greg Kroah-Hartman <gregkh@linuxfoundation.org>2019-05-31 13:48:30 (GMT)
commit090eb578b9e6c99041e067d64b81d7a212604156 (patch)
tree19ae20ce955139893b7fe4db343bf4fac9ca45cc
parent0b447e75c2c35a8509aba93e1adc0bfedafb53b6 (diff)
downloadcommon-090eb578b9e6c99041e067d64b81d7a212604156.zip
common-090eb578b9e6c99041e067d64b81d7a212604156.tar.gz
common-090eb578b9e6c99041e067d64b81d7a212604156.tar.bz2
rcuperf: Fix cleanup path for invalid perf_type strings
[ Upstream commit ad092c027713a68a34168942a5ef422e42e039f4 ] If the specified rcuperf.perf_type is not in the rcu_perf_init() function's perf_ops[] array, rcuperf prints some console messages and then invokes rcu_perf_cleanup() to set state so that a future torture test can run. However, rcu_perf_cleanup() also attempts to end the test that didn't actually start, and in doing so relies on the value of cur_ops, a value that is not particularly relevant in this case. This can result in confusing output or even follow-on failures due to attempts to use facilities that have not been properly initialized. This commit therefore sets the value of cur_ops to NULL in this case and inserts a check near the beginning of rcu_perf_cleanup(), thus avoiding relying on an irrelevant cur_ops value. Signed-off-by: Paul E. McKenney <paulmck@linux.ibm.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat
-rw-r--r--kernel/rcu/rcuperf.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/kernel/rcu/rcuperf.c b/kernel/rcu/rcuperf.c
index 123ccbd..2b8579d 100644
--- a/kernel/rcu/rcuperf.c
+++ b/kernel/rcu/rcuperf.c
@@ -453,6 +453,10 @@ rcu_perf_cleanup(void)
if (torture_cleanup_begin())
return;
+ if (!cur_ops) {
+ torture_cleanup_end();
+ return;
+ }
if (reader_tasks) {
for (i = 0; i < nrealreaders; i++)
@@ -574,6 +578,7 @@ rcu_perf_init(void)
pr_alert(" %s", perf_ops[i]->name);
pr_alert("\n");
firsterr = -EINVAL;
+ cur_ops = NULL;
goto unwind;
}
if (cur_ops->init)