]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/patches/suse-2.6.27.39/patches.arch/s390-03-03-dasd_unsolicited_interrupt.patch
Fix oinkmaster patch.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.arch / s390-03-03-dasd_unsolicited_interrupt.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
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