|
@@ -1107,17 +1107,22 @@ void dasd_int_handler(struct ccw_device *cdev, unsigned long intparm,
|
|
if (cqr)
|
|
if (cqr)
|
|
memcpy(&cqr->irb, irb, sizeof(*irb));
|
|
memcpy(&cqr->irb, irb, sizeof(*irb));
|
|
device = dasd_device_from_cdev_locked(cdev);
|
|
device = dasd_device_from_cdev_locked(cdev);
|
|
- if (!IS_ERR(device)) {
|
|
|
|
- device->discipline->dump_sense_dbf(device, irb,
|
|
|
|
- "unsolicited");
|
|
|
|
- if ((device->features & DASD_FEATURE_ERPLOG))
|
|
|
|
- device->discipline->dump_sense(device, cqr,
|
|
|
|
- irb);
|
|
|
|
- dasd_device_clear_timer(device);
|
|
|
|
- device->discipline->handle_unsolicited_interrupt(device,
|
|
|
|
- irb);
|
|
|
|
|
|
+ if (IS_ERR(device))
|
|
|
|
+ return;
|
|
|
|
+ /* ignore unsolicited interrupts for DIAG discipline */
|
|
|
|
+ if (device->discipline == dasd_diag_discipline_pointer) {
|
|
dasd_put_device(device);
|
|
dasd_put_device(device);
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
|
|
+ device->discipline->dump_sense_dbf(device, irb,
|
|
|
|
+ "unsolicited");
|
|
|
|
+ if ((device->features & DASD_FEATURE_ERPLOG))
|
|
|
|
+ device->discipline->dump_sense(device, cqr,
|
|
|
|
+ irb);
|
|
|
|
+ dasd_device_clear_timer(device);
|
|
|
|
+ device->discipline->handle_unsolicited_interrupt(device,
|
|
|
|
+ irb);
|
|
|
|
+ dasd_put_device(device);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|