diff options
author | Ursula Braun <ursula.braun@de.ibm.com> | 2008-10-10 15:33:04 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2008-10-10 15:33:46 -0400 |
commit | 4bcb3a37180ee4dffaef8298f373b334a7bedabb (patch) | |
tree | ed8621d5a3763aff53475742d60e9db3cbb4de1d /drivers/s390/cio/qdio_main.c | |
parent | f6bccf695431da0e9bd773550ae91b8cb9ffb227 (diff) |
[S390] qdio: speed up multicast traffic on full HiperSocket queue
If an asynchronous HiperSockets queue runs full, no further packet
can be sent. In this case the next initiative to give transmitted
skbs back to the stack is triggered only by a 10-seconds qdio timer.
This timer has been introduced for low multicast traffic scenarios
to guarantee freeing of skbs in a limited amount of time. For high
HiperSocket multicast traffic scenarios progress checking on the
outbound queue should be enforced by tasklet rescheduling.
Signed-off-by: Ursula Braun <ursula.braun@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/cio/qdio_main.c')
-rw-r--r-- | drivers/s390/cio/qdio_main.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c index e6eabc85342..9307512132f 100644 --- a/drivers/s390/cio/qdio_main.c +++ b/drivers/s390/cio/qdio_main.c | |||
@@ -851,6 +851,12 @@ static void __qdio_outbound_processing(struct qdio_q *q) | |||
851 | if (queue_type(q) == QDIO_IQDIO_QFMT && !multicast_outbound(q)) | 851 | if (queue_type(q) == QDIO_IQDIO_QFMT && !multicast_outbound(q)) |
852 | return; | 852 | return; |
853 | 853 | ||
854 | if ((queue_type(q) == QDIO_IQDIO_QFMT) && | ||
855 | (atomic_read(&q->nr_buf_used)) > QDIO_IQDIO_POLL_LVL) { | ||
856 | tasklet_schedule(&q->tasklet); | ||
857 | return; | ||
858 | } | ||
859 | |||
854 | if (q->u.out.pci_out_enabled) | 860 | if (q->u.out.pci_out_enabled) |
855 | return; | 861 | return; |
856 | 862 | ||