]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - src/patches/suse-2.6.27.31/patches.arch/s390-03-03-dasd_unsolicited_interrupt.patch
Merge branch 'master' into next
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.arch / s390-03-03-dasd_unsolicited_interrupt.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
10
11Acked-by: John Jolly <jjolly@suse.de>
12---
13 drivers/s390/block/dasd_eckd.c | 25 ++++++++++++++++++++-----
14 1 file changed, 20 insertions(+), 5 deletions(-)
15
16Index: 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