aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/cio/qdio.h8
-rw-r--r--drivers/s390/cio/qdio_main.c6
2 files changed, 14 insertions, 0 deletions
diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h
index c1a70985abfa..af867731a5f4 100644
--- a/drivers/s390/cio/qdio.h
+++ b/drivers/s390/cio/qdio.h
@@ -16,6 +16,14 @@
16#define QDIO_BUSY_BIT_GIVE_UP 2000000 /* 2 seconds = eternity */ 16#define QDIO_BUSY_BIT_GIVE_UP 2000000 /* 2 seconds = eternity */
17#define QDIO_INPUT_THRESHOLD 500 /* 500 microseconds */ 17#define QDIO_INPUT_THRESHOLD 500 /* 500 microseconds */
18 18
19/*
20 * if an asynchronous HiperSockets queue runs full, the 10 seconds timer wait
21 * till next initiative to give transmitted skbs back to the stack is too long.
22 * Therefore polling is started in case of multicast queue is filled more
23 * than 50 percent.
24 */
25#define QDIO_IQDIO_POLL_LVL 65 /* HS multicast queue */
26
19enum qdio_irq_states { 27enum qdio_irq_states {
20 QDIO_IRQ_STATE_INACTIVE, 28 QDIO_IRQ_STATE_INACTIVE,
21 QDIO_IRQ_STATE_ESTABLISHED, 29 QDIO_IRQ_STATE_ESTABLISHED,
diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
index e6eabc853422..9307512132fe 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