[S390] qdio: Refresh buffer states for IQDIO Asynchronous output queue
authorKlaus D. Wacker <kdwacker@de.ibm.com>
Wed, 22 Aug 2007 11:51:39 +0000 (13:51 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 22 Aug 2007 11:51:47 +0000 (13:51 +0200)
Hipersocket Multicast queue works asynchronously. When sending buffers,
the buffer state change may happen delayed. The tasklet for checking
changes in the outbound queue excluded IQDIO async queues from this
process. This created either a hang situation when the queue ran full,
or presented a hang situation a interface close time.
The tasklet processing is changed to include IQDIO async queues when
requesting buffer state refresh.

Signed-off-by: Klaus D. Wacker <kdwacker@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/cio/qdio.c

index badfb5b21304a3cd0097d68b1e4f2ebc82c4a76e..d8d479876ec7ad7de402ada7cb8cf079cd1a0583 100644 (file)
@@ -742,7 +742,8 @@ qdio_get_outbound_buffer_frontier(struct qdio_q *q)
        first_not_to_check=f+qdio_min(atomic_read(&q->number_of_buffers_used),
                                      (QDIO_MAX_BUFFERS_PER_Q-1));
 
-       if ((!q->is_iqdio_q)&&(!q->hydra_gives_outbound_pcis))
+       if (((!q->is_iqdio_q) && (!q->hydra_gives_outbound_pcis)) ||
+                (q->queue_type == QDIO_IQDIO_QFMT_ASYNCH))
                SYNC_MEMORY;
 
 check_next: