]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blob - src/patches/suse-2.6.27.25/patches.arch/s390-03-04-qdio_multicast_performance.patch
Updated xen patches taken from suse.
[people/teissler/ipfire-2.x.git] / src / patches / suse-2.6.27.25 / patches.arch / s390-03-04-qdio_multicast_performance.patch
1 From: Gerald Schaefer <geraldsc@de.ibm.com>
2 Subject: dasd: fix message flood for unsolicited interrupts
3 References: bnc#440610
4
5 Symptom: The message log is flooded with messages for unsolicited
6 interrupts and missing sense data.
7 Problem: CIO generates fake IRBs which are falsly interpreted as
8 unsolicited interrupts.
9 Solution: Ignore fake IRBs in unsolicited interupt handler.
10
11 Acked-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
17 Index: 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,
36 Index: 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