s390/cio: Relax subchannel scan loop
authorPeter Oberparleiter <oberpar@linux.vnet.ibm.com>
Tue, 26 Nov 2013 13:57:13 +0000 (14:57 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 16 Dec 2013 13:37:40 +0000 (14:37 +0100)
The CIO layer scans for newly available I/O devices by performing a scan
of available subchannels using the Store Subchannel (STSCH) instruction.
This processing can take a significant amount of time during which no
other task can run on the same CPU (unless CONFIG_PREEMPT has been
enabled). As a result, scheduling latencies for other tasks are
increased noticeably, especially on a single-CPU system.

Fix this problem by explicitly allowing other tasks to be scheduled
each time a subchannel has been processed.

Signed-off-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
Reviewed-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/cio/css.c

index 8c2cb87bccc5d8b1a195ff1dc43181309aa75d82..c1f9cc728c2dbf85d18342ed093b024635bf36aa 100644 (file)
@@ -553,6 +553,9 @@ static int slow_eval_unknown_fn(struct subchannel_id schid, void *data)
                default:
                        rc = 0;
                }
+               /* Allow scheduling here since the containing loop might
+                * take a while.  */
+               cond_resched();
        }
        return rc;
 }