]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/suse-2.6.27.39/patches.arch/s390-03-04-qdio_multicast_performance.patch
Fix oinkmaster patch.
[ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.arch / s390-03-04-qdio_multicast_performance.patch
CommitLineData
2cb7cef9
BS
1From: Gerald Schaefer <geraldsc@de.ibm.com>
2Subject: dasd: fix message flood for unsolicited interrupts
3References: bnc#440610
4
5Symptom: The message log is flooded with messages for unsolicited
6 interrupts and missing sense data.
7Problem: CIO generates fake IRBs which are falsly interpreted as
8 unsolicited interrupts.
9Solution: Ignore fake IRBs in unsolicited interupt handler.
10
11Acked-by: John Jolly <jjolly@suse.de>
12---
13 drivers/s390/cio/qdio.h | 8 ++++++++
14 drivers/s390/cio/qdio_main.c | 6 ++++++
15 2 files changed, 14 insertions(+)
16
17Index: linux-sles11/drivers/s390/cio/qdio.h
18===================================================================
19--- linux-sles11.orig/drivers/s390/cio/qdio.h
20+++ linux-sles11/drivers/s390/cio/qdio.h
21@@ -16,6 +16,14 @@
22 #define QDIO_BUSY_BIT_GIVE_UP 2000000 /* 2 seconds = eternity */
23 #define QDIO_INPUT_THRESHOLD 500 /* 500 microseconds */
24
25+/*
26+ * if an asynchronous HiperSockets queue runs full, the 10 seconds timer wait
27+ * till next initiative to give transmitted skbs back to the stack is too long.
28+ * Therefore polling is started in case of multicast queue is filled more
29+ * than 50 percent.
30+ */
31+#define QDIO_IQDIO_POLL_LVL 65 /* HS multicast queue */
32+
33 enum qdio_irq_states {
34 QDIO_IRQ_STATE_INACTIVE,
35 QDIO_IRQ_STATE_ESTABLISHED,
36Index: linux-sles11/drivers/s390/cio/qdio_main.c
37===================================================================
38--- linux-sles11.orig/drivers/s390/cio/qdio_main.c
39+++ linux-sles11/drivers/s390/cio/qdio_main.c
40@@ -851,6 +851,12 @@ static void __qdio_outbound_processing(s
41 if (queue_type(q) == QDIO_IQDIO_QFMT && !multicast_outbound(q))
42 return;
43
44+ if ((queue_type(q) == QDIO_IQDIO_QFMT) &&
45+ (atomic_read(&q->nr_buf_used)) > QDIO_IQDIO_POLL_LVL) {
46+ tasklet_schedule(&q->tasklet);
47+ return;
48+ }
49+
50 if (q->u.out.pci_out_enabled)
51 return;
52