Patch "s390/qdio: clear DSCI prior to scanning multiple input queues" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
s390/qdio: clear DSCI prior to scanning multiple input queues
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
s390-qdio-clear-dsci-prior-to-scanning-multiple-input-queues.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
1e4a382fdc0ba8d1a85b758c0811de3a3631085eMon Sep 17 00:00:00 2001
From: Julian Wiedmann <[email protected]>
Date: Mon, 21 Nov 2016 13:37:48 +0100
Subject: s390/qdio: clear DSCI prior to scanning multiple input queues
From: Julian Wiedmann <[email protected]>
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.
--- drivers/s390/cio/qdio_thinint.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/s390/cio/qdio_thinint.c +4 -4
@@ -147,11 +147,11 @@ static inline void tiqdio_call_inq_handlstruct qdio_q *q;int i; -for_each_input_queue (irq, q, i) { -if (!references_shared_dsci (irq) && -has_multiple_inq_on_dsci (irq)) -xchg (q->irq_ptr->dsci,0 ); +if (!references_shared_dsci (irq) && +has_multiple_inq_on_dsci (irq)) +xchg (irq->dsci,0 ); +for_each_input_queue (irq, q, i) {if (q->u.in.queue_start_poll) {/* skip if polling is enabled or already in work */ if (test_and_set_bit(QDIO_QUEUE_IRQS_DISABLED,
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/s390-qdio-clear-dsci-prior-to-scanning-multiple-input-queues.patch