s390/qdio: allow to scan all Output SBALs in one go
authorJulian Wiedmann <jwi@linux.ibm.com>
Mon, 1 Apr 2019 08:08:08 +0000 (10:08 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 8 May 2019 13:01:23 +0000 (15:01 +0200)
Old code restricted the number of inspected SBALs to
QDIO_MAX_BUFFERS_PER_Q - 1, as otherwise the first_to_check and
first_to_kick cursors could overlap. Subsequent code would then assume that
there was no progress on the queue, when in fact _all_ SBALs on the queue
were ready-to-process.

This limitation no longer applies, so allow the queue-scan code to inspect
all SBALs on the queue. Note that qeth requires an additional patch
("s390/qeth: stop/wake TX queues based on their fill level"), to avoid
potential queue stalls when all 128 SBALs are reported as ready-to-process.

Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/cio/qdio_main.c

index cfce255..957c2a8 100644 (file)
@@ -719,11 +719,7 @@ static int get_outbound_buffer_frontier(struct qdio_q *q, unsigned int start)
                    multicast_outbound(q)))
                        qdio_siga_sync_q(q);
 
-       /*
-        * Don't check 128 buffers, as otherwise qdio_inbound_q_moved
-        * would return 0.
-        */
-       count = min(atomic_read(&q->nr_buf_used), QDIO_MAX_BUFFERS_MASK);
+       count = atomic_read(&q->nr_buf_used);
        if (!count)
                return 0;