aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
authorStefan Haberland <stefan.haberland@de.ibm.com>2008-10-10 15:33:23 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2008-10-10 15:33:59 -0400
commitada3df9171e48b2a5f1e9c828337b61746e19ff0 (patch)
treedb172c9c47a2a0749202a3eef3176dcf10646f5d /drivers/s390
parent5a0d0e65379256b4da2c9092e197a2c761f51c01 (diff)
[S390] dasd: fix message flood for unsolicited interrupts
In the unsolicited interupt handler fake IRBs from CIO have to be ignored because there is nothing to do. The function dump_sense should not be called if there is no sense data available. Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/block/dasd_eckd.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
index 72d3970f11a..8095629bc49 100644
--- a/drivers/s390/block/dasd_eckd.c
+++ b/drivers/s390/block/dasd_eckd.c
@@ -1501,12 +1501,27 @@ static void dasd_eckd_handle_unsolicited_interrupt(struct dasd_device *device,
1501 return; 1501 return;
1502 } 1502 }
1503 1503
1504 /* just report other unsolicited interrupts */ 1504 if ((irb->scsw.cmd.cc == 1) &&
1505 DEV_MESSAGE(KERN_DEBUG, device, "%s", 1505 (irb->scsw.cmd.fctl & SCSW_FCTL_START_FUNC) &&
1506 "unsolicited interrupt received"); 1506 (irb->scsw.cmd.actl & SCSW_ACTL_START_PEND) &&
1507 device->discipline->dump_sense(device, NULL, irb); 1507 (irb->scsw.cmd.stctl & SCSW_STCTL_STATUS_PEND)) {
1508 dasd_schedule_device_bh(device); 1508 /* fake irb do nothing, they are handled elsewhere */
1509 dasd_schedule_device_bh(device);
1510 return;
1511 }
1509 1512
1513 if (!(irb->esw.esw0.erw.cons)) {
1514 /* just report other unsolicited interrupts */
1515 DEV_MESSAGE(KERN_ERR, device, "%s",
1516 "unsolicited interrupt received");
1517 } else {
1518 DEV_MESSAGE(KERN_ERR, device, "%s",
1519 "unsolicited interrupt received "
1520 "(sense available)");
1521 device->discipline->dump_sense(device, NULL, irb);
1522 }
1523
1524 dasd_schedule_device_bh(device);
1510 return; 1525 return;
1511}; 1526};
1512 1527