android_kernel_lge_bullhead/drivers/s390/cio
Julian Wiedmann 8e68a4d13a s390/qdio: clear DSCI prior to scanning multiple input queues
commit 1e4a382fdc0ba8d1a85b758c0811de3a3631085e upstream.

For devices with multiple input queues, tiqdio_call_inq_handlers()
iterates over all input queues and clears the device's DSCI
during each iteration. If the DSCI is re-armed during one
of the later iterations, we therefore do not scan the previous
queues again.
The re-arming also raises a new adapter interrupt. But its
handler does not trigger a rescan for the device, as the DSCI
has already been erroneously cleared.
This can result in queue stalls on devices with multiple
input queues.

Fix it by clearing the DSCI just once, prior to scanning the queues.

As the code is moved in front of the loop, we also need to access
the DSCI directly (ie irq->dsci) instead of going via each queue's
parent pointer to the same irq. This is not a functional change,
and a follow-up patch will clean up the other users.

In practice, this bug only affects CQ-enabled HiperSockets devices,
ie. devices with sysfs-attribute "hsuid" set. Setting a hsuid is
needed for AF_IUCV socket applications that use HiperSockets
communication.

Fixes: 104ea556ee ("qdio: support asynchronous delivery of storage blocks")
Reviewed-by: Ursula Braun <ubraun@linux.vnet.ibm.com>
Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Willy Tarreau <w@1wt.eu>
2017-06-08 00:47:02 +02:00
..
Makefile s390/cio: add eadm subchannel driver 2012-09-26 15:45:00 +02:00
airq.c s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
blacklist.c s390/cio: add condev keyword to cio_ignore 2013-05-02 15:50:20 +02:00
blacklist.h
ccwgroup.c s390/ccwgroup: allow drivers to call set_{on,off}line 2012-11-23 11:14:35 +01:00
ccwreq.c [S390] cio: add message for timeouts on internal I/O 2011-10-30 15:16:41 +01:00
chp.c s390/cio: add channel ID sysfs attribute 2013-05-15 16:47:39 +02:00
chp.h s390/cio: collect format 1 channel-path description data 2013-04-17 14:07:26 +02:00
chsc.c s390/chsc: fix SEI usage on old FW levels 2014-05-13 13:59:42 +02:00
chsc.h s390/cio: add channel ID sysfs attribute 2013-05-15 16:47:39 +02:00
chsc_sch.c s390/irq: remove split irq fields from /proc/stat 2013-01-08 10:57:07 +01:00
chsc_sch.h
cio.c s390/cio: fix irq statistics 2013-04-26 09:07:13 +02:00
cio.h s390/css: move subchannel lock allocation 2013-04-17 14:07:34 +02:00
cio_debug.h
cmf.c s390/time: rename tod clock access functions 2013-02-14 15:55:10 +01:00
crw.c s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
css.c s390/css: move subchannel lock allocation 2013-04-17 14:07:34 +02:00
css.h s390/css: remove unused function definitions 2013-04-17 14:07:33 +02:00
device.c s390/cio: fix driver callback initialization for ccw consoles 2014-05-06 07:55:27 -07:00
device.h s390/cio: fix early init counter usage 2013-04-17 14:07:33 +02:00
device_fsm.c s390/time: rename tod clock access functions 2013-02-14 15:55:10 +01:00
device_id.c s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
device_ops.c s390/cio: make use of newly added format 1 channel-path data 2013-04-17 14:07:26 +02:00
device_pgid.c s390/cio: handle unknown pgroup state 2013-02-14 15:55:09 +01:00
device_status.c s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
eadm_sch.c s390/irq: remove split irq fields from /proc/stat 2013-01-08 10:57:07 +01:00
eadm_sch.h s390/cio: add eadm subchannel driver 2012-09-26 15:45:00 +02:00
fcx.c [S390] drivers: Correct size given to memset 2009-12-18 17:43:32 +01:00
idset.c s390/cio: Use BITS_TO_LONGS() instead of __BITOPS_WORDS() 2013-04-17 14:07:29 +02:00
idset.h s390/css: stop stsch loop after cc 3 2012-10-18 17:50:08 +02:00
io_sch.h s390/cio: dont abort verification after missing irq 2013-02-14 15:55:07 +01:00
ioasm.h [S390] cio: move asms to generic header 2011-03-15 17:08:23 +01:00
isc.c
itcw.c [S390] cio: reduce memory consumption of itcw structures 2011-01-05 12:47:29 +01:00
orb.h s390: add eadm related structures 2012-09-26 15:44:57 +02:00
qdio.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
qdio_debug.c constify a bunch of struct file_operations instances 2013-04-09 14:16:20 -04:00
qdio_debug.h qdio: remove unused parameters 2013-02-28 09:37:12 +01:00
qdio_main.c qdio: remove unused parameters 2013-02-28 09:37:12 +01:00
qdio_setup.c s390/qdio: rename the misleading PCI flag of qdio devices 2012-12-11 14:52:49 +01:00
qdio_thinint.c s390/qdio: clear DSCI prior to scanning multiple input queues 2017-06-08 00:47:02 +02:00
scm.c s390/scm: process availability 2013-03-07 09:52:24 +01:00