diff options
Diffstat (limited to 'drivers/s390/block')
-rw-r--r-- | drivers/s390/block/dasd_eckd.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c index 72d3970f11a4..8095629bc493 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 | ||