]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
s390/cio: add cond_resched() in the slow_eval_known_fn() loop
authorVineeth Vijayan <vneethv@linux.ibm.com>
Thu, 18 Jun 2020 14:42:45 +0000 (16:42 +0200)
committerHeiko Carstens <hca@linux.ibm.com>
Mon, 17 Aug 2020 11:17:00 +0000 (13:17 +0200)
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>
drivers/s390/cio/css.c

index 94edbb33d0d1fa7db7c93c8fe6702b7c30eebb8e..aca022239b333e6eabe0904ef4e7b6e77c00a84d 100644 (file)
@@ -677,6 +677,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;
 }