aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/block
diff options
context:
space:
mode:
authorStefan Haberland <stefan.haberland@de.ibm.com>2010-10-25 10:10:49 -0400
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>2010-10-25 10:10:21 -0400
commit56b86b615b807e043339979878a2de88f900ee4f (patch)
tree7ca79c9f6c39ff7cef764aad4240d3ec353e13f4 /drivers/s390/block
parent6d00d00bf23b86b352e2d075cfe751acd1908278 (diff)
[S390] dasd: ignore unsolicited interrupts for DIAG
For the DASD DIAG discipline IO is started through special diagnose calls. Unsolicited interrupts may contain information about the device itself. But this information is not needed because the device is not used directly. Fix the case that an unimplemented dicipline function may be called by ignoring unsolicited interrupts for the DIAG disciplin. Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/block')
-rw-r--r--drivers/s390/block/dasd.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index 80e45de096a9..fb613d70c2cb 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -1107,17 +1107,22 @@ void dasd_int_handler(struct ccw_device *cdev, unsigned long intparm,
1107 if (cqr) 1107 if (cqr)
1108 memcpy(&cqr->irb, irb, sizeof(*irb)); 1108 memcpy(&cqr->irb, irb, sizeof(*irb));
1109 device = dasd_device_from_cdev_locked(cdev); 1109 device = dasd_device_from_cdev_locked(cdev);
1110 if (!IS_ERR(device)) { 1110 if (IS_ERR(device))
1111 device->discipline->dump_sense_dbf(device, irb, 1111 return;
1112 "unsolicited"); 1112 /* ignore unsolicited interrupts for DIAG discipline */
1113 if ((device->features & DASD_FEATURE_ERPLOG)) 1113 if (device->discipline == dasd_diag_discipline_pointer) {
1114 device->discipline->dump_sense(device, cqr,
1115 irb);
1116 dasd_device_clear_timer(device);
1117 device->discipline->handle_unsolicited_interrupt(device,
1118 irb);
1119 dasd_put_device(device); 1114 dasd_put_device(device);
1115 return;
1120 } 1116 }
1117 device->discipline->dump_sense_dbf(device, irb,
1118 "unsolicited");
1119 if ((device->features & DASD_FEATURE_ERPLOG))
1120 device->discipline->dump_sense(device, cqr,
1121 irb);
1122 dasd_device_clear_timer(device);
1123 device->discipline->handle_unsolicited_interrupt(device,
1124 irb);
1125 dasd_put_device(device);
1121 return; 1126 return;
1122 } 1127 }
1123 1128