1 From: Gerald Schaefer <geraldsc@de.ibm.com>
2 Subject: dasd: fix message flood for unsolicited interrupts
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.
11 Acked-by: John Jolly <jjolly@suse.de>
13 drivers/s390/cio/qdio.h | 8 ++++++++
14 drivers/s390/cio/qdio_main.c | 6 ++++++
15 2 files changed, 14 insertions(+)
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
22 #define QDIO_BUSY_BIT_GIVE_UP 2000000 /* 2 seconds = eternity */
23 #define QDIO_INPUT_THRESHOLD 500 /* 500 microseconds */
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
31 +#define QDIO_IQDIO_POLL_LVL 65 /* HS multicast queue */
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))
44 + if ((queue_type(q) == QDIO_IQDIO_QFMT) &&
45 + (atomic_read(&q->nr_buf_used)) > QDIO_IQDIO_POLL_LVL) {
46 + tasklet_schedule(&q->tasklet);
50 if (q->u.out.pci_out_enabled)