]>
Commit | Line | Data |
---|---|---|
2cb7cef9 BS |
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 | |
10 | ||
11 | Acked-by: John Jolly <jjolly@suse.de> | |
12 | --- | |
13 | drivers/s390/block/dasd_eckd.c | 25 ++++++++++++++++++++----- | |
14 | 1 file changed, 20 insertions(+), 5 deletions(-) | |
15 | ||
16 | Index: linux-sles11/drivers/s390/block/dasd_eckd.c | |
17 | =================================================================== | |
18 | --- linux-sles11.orig/drivers/s390/block/dasd_eckd.c | |
19 | +++ linux-sles11/drivers/s390/block/dasd_eckd.c | |
20 | @@ -1501,12 +1501,27 @@ static void dasd_eckd_handle_unsolicited | |
21 | return; | |
22 | } | |
23 | ||
24 | - /* just report other unsolicited interrupts */ | |
25 | - DEV_MESSAGE(KERN_DEBUG, device, "%s", | |
26 | - "unsolicited interrupt received"); | |
27 | - device->discipline->dump_sense(device, NULL, irb); | |
28 | - dasd_schedule_device_bh(device); | |
29 | + if ((irb->scsw.cmd.cc == 1) && | |
30 | + (irb->scsw.cmd.fctl & SCSW_FCTL_START_FUNC) && | |
31 | + (irb->scsw.cmd.actl & SCSW_ACTL_START_PEND) && | |
32 | + (irb->scsw.cmd.stctl & SCSW_STCTL_STATUS_PEND)) { | |
33 | + /* fake irb do nothing, they are handled elsewhere */ | |
34 | + dasd_schedule_device_bh(device); | |
35 | + return; | |
36 | + } | |
37 | ||
38 | + if (!(irb->esw.esw0.erw.cons)) { | |
39 | + /* just report other unsolicited interrupts */ | |
40 | + DEV_MESSAGE(KERN_ERR, device, "%s", | |
41 | + "unsolicited interrupt received"); | |
42 | + } else { | |
43 | + DEV_MESSAGE(KERN_ERR, device, "%s", | |
44 | + "unsolicited interrupt received " | |
45 | + "(sense available)"); | |
46 | + device->discipline->dump_sense(device, NULL, irb); | |
47 | + } | |
48 | + | |
49 | + dasd_schedule_device_bh(device); | |
50 | return; | |
51 | }; | |
52 |