summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVineeth Vijayan <vneethv@linux.ibm.com>2020-06-18 16:42:45 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-09-03 11:24:24 +0200
commit017d36c59ca80898314a18c23e28f4045415f3b8 (patch)
tree6f93f77708c6f1f85b9394d102d12548aa2fd057
parentca57f450507548d2eb14a15764e0f159c784c842 (diff)
downloadlinux-stable-017d36c59ca80898314a18c23e28f4045415f3b8.tar.gz
linux-stable-017d36c59ca80898314a18c23e28f4045415f3b8.tar.bz2
linux-stable-017d36c59ca80898314a18c23e28f4045415f3b8.zip
s390/cio: add cond_resched() in the slow_eval_known_fn() loop
[ Upstream commit 0b8eb2ee9da1e8c9b8082f404f3948aa82a057b2 ] The scanning through subchannels during the time of an event could take significant amount of time in case of platforms with lots of known subchannels. This might result in higher scheduling latencies for other tasks especially on systems with a single CPU. Add cond_resched() call, as the loop in slow_eval_known_fn() can be executed for a longer duration. Reviewed-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Vineeth Vijayan <vneethv@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r--drivers/s390/cio/css.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
index df09ed53ab45..825a8f2703b4 100644
--- a/drivers/s390/cio/css.c
+++ b/drivers/s390/cio/css.c
@@ -615,6 +615,11 @@ static int slow_eval_known_fn(struct subchannel *sch, void *data)
rc = css_evaluate_known_subchannel(sch, 1);
if (rc == -EAGAIN)
css_schedule_eval(sch->schid);
+ /*
+ * The loop might take long time for platforms with lots of
+ * known devices. Allow scheduling here.
+ */
+ cond_resched();
}
return 0;
}