linux/drivers/s390/cio
Julian Wiedmann 1e4a382fdc s390/qdio: clear DSCI prior to scanning multiple input queues
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")
Cc: <stable@vger.kernel.org> # v3.2+
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>
2017-02-03 13:50:19 +01:00
..
airq.c s390/cio: Introduce common I/O layer tracepoints 2015-12-18 14:59:36 +01:00
blacklist.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
blacklist.h
ccwgroup.c s390/ccwgroup: use ccwgroup_ungroup wrapper 2014-06-16 10:32:52 +02:00
ccwreq.c s390: Use pr_warn instead of pr_warning 2016-03-07 13:12:04 +01:00
chp.c s390/cio: clarify cssid usage 2017-01-16 07:27:52 +01:00
chp.h s390/cio: clarify cssid usage 2017-01-16 07:27:52 +01:00
chsc_sch.c s390/chsc: fix ioctl CHSC_INFO_CU command 2016-07-15 14:31:58 +02:00
chsc_sch.h
chsc.c s390/cio: use cssid for pgid generation 2017-01-16 07:27:52 +01:00
chsc.h s390/cio: use cssid for pgid generation 2017-01-16 07:27:52 +01:00
cio_debug.h
cio.c s390: Use pr_warn instead of pr_warning 2016-03-07 13:12:04 +01:00
cio.h s390: cio: remove redundant cio_cancel declaration 2016-08-24 09:23:56 +02:00
cmf.c s390/cio: remove cmf related code relevant for 31 bit only 2017-01-16 07:27:55 +01:00
crw.c s390/cio: Consolidate inline assemblies and related data definitions 2015-12-18 14:59:34 +01:00
css.c s390/cio: remove unused struct member 2017-01-16 07:27:53 +01:00
css.h s390/cio: remove unused struct member 2017-01-16 07:27:53 +01:00
device_fsm.c s390/cio: clean up DEV_STATE_SENSE_PGID 2016-10-28 10:09:03 +02:00
device_id.c
device_ops.c s390: cio: make it explicitly non-modular 2016-10-31 17:55:32 +01:00
device_pgid.c s390/cio: move ccw_device_stlck functions 2015-10-27 09:34:44 +01:00
device_status.c s390/cio: stop using subchannel_id from ccw_device_private 2016-08-08 15:41:32 +02:00
device.c s390: cio: make it explicitly non-modular 2016-10-31 17:55:32 +01:00
device.h s390/cio: clean up DEV_STATE_SENSE_PGID 2016-10-28 10:09:03 +02:00
eadm_sch.c s390: remove unneeded variables 2015-08-07 09:57:01 +02:00
eadm_sch.h s390/eadm_sch: improve quiesce handling 2013-10-24 17:16:58 +02:00
fcx.c
idset.c s390/cio: idset.c: remove some unused functions 2015-01-08 10:02:50 +01:00
idset.h s390: use canonical include guard style 2016-06-13 15:58:17 +02:00
io_sch.h s390/cio: remove subchannel_id from ccw_device_private 2016-08-08 15:41:33 +02:00
ioasm.c s390/cio: use basic blocks for i/o inline assemblies 2016-06-28 09:32:34 +02:00
ioasm.h s390/cio: Change I/O instructions from inline to normal functions 2015-12-18 14:59:37 +01:00
isc.c
itcw.c
Makefile s390/cio: Change I/O instructions from inline to normal functions 2015-12-18 14:59:37 +01:00
orb.h
qdio_debug.c s390: Delete unnecessary checks before the function call "debug_unregister" 2015-11-27 09:24:16 +01:00
qdio_debug.h qdio: Keep device-specific dbf entries 2014-06-16 10:31:58 +02:00
qdio_main.c s390/qdio: avoid reschedule of outbound tasklet once killed 2016-08-08 16:01:28 +02:00
qdio_setup.c s390: remove 31 bit support 2015-03-25 11:49:33 +01:00
qdio_thinint.c s390/qdio: clear DSCI prior to scanning multiple input queues 2017-02-03 13:50:19 +01:00
qdio.h s390: remove 31 bit support 2015-03-25 11:49:33 +01:00
scm.c s390/scm_block: do not hide eadm subchannel dependency 2013-11-15 14:08:42 +01:00
trace.c s390/cio: Introduce common I/O layer tracepoints 2015-12-18 14:59:36 +01:00
trace.h s390/cio: Introduce common I/O layer tracepoints 2015-12-18 14:59:36 +01:00