Loading drivers/s390/block/dasd_eckd.c +11 −34 Original line number Original line Diff line number Diff line Loading @@ -1696,8 +1696,7 @@ static void dasd_eckd_handle_unsolicited_interrupt(struct dasd_device *device, DBF_DEV_EVENT(DBF_ERR, device, "%s", DBF_DEV_EVENT(DBF_ERR, device, "%s", "unsolicited interrupt received " "unsolicited interrupt received " "(sense available)"); "(sense available)"); device->discipline->dump_sense_dbf(device, NULL, irb, device->discipline->dump_sense_dbf(device, irb, "unsolicited"); "unsolicited"); } } dasd_schedule_device_bh(device); dasd_schedule_device_bh(device); Loading Loading @@ -2941,42 +2940,20 @@ dasd_eckd_dump_ccw_range(struct ccw1 *from, struct ccw1 *to, char *page) } } static void static void dasd_eckd_dump_sense_dbf(struct dasd_device *device, struct dasd_ccw_req *req, dasd_eckd_dump_sense_dbf(struct dasd_device *device, struct irb *irb, struct irb *irb, char *reason) char *reason) { { u64 *sense; u64 *sense; int sl; struct tsb *tsb; sense = NULL; sense = (u64 *) dasd_get_sense(irb); tsb = NULL; if (req && scsw_is_tm(&req->irb.scsw)) { if (irb->scsw.tm.tcw) tsb = tcw_get_tsb( (struct tcw *)(unsigned long)irb->scsw.tm.tcw); if (tsb && (irb->scsw.tm.fcxs == 0x01)) { switch (tsb->flags & 0x07) { case 1: /* tsa_iostat */ sense = (u64 *)tsb->tsa.iostat.sense; break; case 2: /* ts_ddpc */ sense = (u64 *)tsb->tsa.ddpc.sense; break; case 3: /* tsa_intrg */ break; } } } else { if (irb->esw.esw0.erw.cons) sense = (u64 *)irb->ecw; } if (sense) { if (sense) { for (sl = 0; sl < 4; sl++) { DBF_DEV_EVENT(DBF_EMERG, device, DBF_DEV_EVENT(DBF_EMERG, device, "%s: %016llx %016llx %016llx %016llx", "%s: %s %02x%02x%02x %016llx %016llx %016llx " reason, sense[0], sense[1], sense[2], "%016llx", reason, sense[3]); scsw_is_tm(&irb->scsw) ? "t" : "c", } scsw_cc(&irb->scsw), scsw_cstat(&irb->scsw), scsw_dstat(&irb->scsw), sense[0], sense[1], sense[2], sense[3]); } else { } else { DBF_DEV_EVENT(DBF_EMERG, device, "%s", DBF_DEV_EVENT(DBF_EMERG, device, "%s", "SORRY - NO VALID SENSE AVAILABLE\n"); "SORRY - NO VALID SENSE AVAILABLE\n"); Loading drivers/s390/block/dasd_erp.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -172,7 +172,7 @@ dasd_log_sense_dbf(struct dasd_ccw_req *cqr, struct irb *irb) device = cqr->startdev; device = cqr->startdev; /* dump sense data to s390 debugfeature*/ /* dump sense data to s390 debugfeature*/ if (device->discipline && device->discipline->dump_sense_dbf) if (device->discipline && device->discipline->dump_sense_dbf) device->discipline->dump_sense_dbf(device, cqr, irb, "log"); device->discipline->dump_sense_dbf(device, irb, "log"); } } EXPORT_SYMBOL(dasd_log_sense_dbf); EXPORT_SYMBOL(dasd_log_sense_dbf); Loading drivers/s390/block/dasd_fba.c +14 −11 Original line number Original line Diff line number Diff line Loading @@ -241,7 +241,7 @@ static void dasd_fba_handle_unsolicited_interrupt(struct dasd_device *device, /* check for unsolicited interrupts */ /* check for unsolicited interrupts */ DBF_DEV_EVENT(DBF_WARNING, device, "%s", DBF_DEV_EVENT(DBF_WARNING, device, "%s", "unsolicited interrupt received"); "unsolicited interrupt received"); device->discipline->dump_sense_dbf(device, NULL, irb, "unsolicited"); device->discipline->dump_sense_dbf(device, irb, "unsolicited"); dasd_schedule_device_bh(device); dasd_schedule_device_bh(device); return; return; }; }; Loading Loading @@ -444,17 +444,20 @@ dasd_fba_fill_info(struct dasd_device * device, } } static void static void dasd_fba_dump_sense_dbf(struct dasd_device *device, struct dasd_ccw_req *req, dasd_fba_dump_sense_dbf(struct dasd_device *device, struct irb *irb, struct irb *irb, char *reason) char *reason) { { int sl; u64 *sense; if (irb->esw.esw0.erw.cons) { for (sl = 0; sl < 4; sl++) { sense = (u64 *) dasd_get_sense(irb); if (sense) { DBF_DEV_EVENT(DBF_EMERG, device, DBF_DEV_EVENT(DBF_EMERG, device, "%s: %08x %08x %08x %08x", "%s: %s %02x%02x%02x %016llx %016llx %016llx " reason, irb->ecw[8 * 0], irb->ecw[8 * 1], "%016llx", reason, irb->ecw[8 * 2], irb->ecw[8 * 3]); scsw_is_tm(&irb->scsw) ? "t" : "c", } scsw_cc(&irb->scsw), scsw_cstat(&irb->scsw), scsw_dstat(&irb->scsw), sense[0], sense[1], sense[2], sense[3]); } else { } else { DBF_DEV_EVENT(DBF_EMERG, device, "%s", DBF_DEV_EVENT(DBF_EMERG, device, "%s", "SORRY - NO VALID SENSE AVAILABLE\n"); "SORRY - NO VALID SENSE AVAILABLE\n"); Loading drivers/s390/block/dasd_int.h +1 −2 Original line number Original line Diff line number Diff line Loading @@ -284,8 +284,7 @@ struct dasd_discipline { dasd_erp_fn_t(*erp_postaction) (struct dasd_ccw_req *); dasd_erp_fn_t(*erp_postaction) (struct dasd_ccw_req *); void (*dump_sense) (struct dasd_device *, struct dasd_ccw_req *, void (*dump_sense) (struct dasd_device *, struct dasd_ccw_req *, struct irb *); struct irb *); void (*dump_sense_dbf) (struct dasd_device *, struct dasd_ccw_req *, void (*dump_sense_dbf) (struct dasd_device *, struct irb *, char *); struct irb *, char *); void (*handle_unsolicited_interrupt) (struct dasd_device *, void (*handle_unsolicited_interrupt) (struct dasd_device *, struct irb *); struct irb *); Loading Loading
drivers/s390/block/dasd_eckd.c +11 −34 Original line number Original line Diff line number Diff line Loading @@ -1696,8 +1696,7 @@ static void dasd_eckd_handle_unsolicited_interrupt(struct dasd_device *device, DBF_DEV_EVENT(DBF_ERR, device, "%s", DBF_DEV_EVENT(DBF_ERR, device, "%s", "unsolicited interrupt received " "unsolicited interrupt received " "(sense available)"); "(sense available)"); device->discipline->dump_sense_dbf(device, NULL, irb, device->discipline->dump_sense_dbf(device, irb, "unsolicited"); "unsolicited"); } } dasd_schedule_device_bh(device); dasd_schedule_device_bh(device); Loading Loading @@ -2941,42 +2940,20 @@ dasd_eckd_dump_ccw_range(struct ccw1 *from, struct ccw1 *to, char *page) } } static void static void dasd_eckd_dump_sense_dbf(struct dasd_device *device, struct dasd_ccw_req *req, dasd_eckd_dump_sense_dbf(struct dasd_device *device, struct irb *irb, struct irb *irb, char *reason) char *reason) { { u64 *sense; u64 *sense; int sl; struct tsb *tsb; sense = NULL; sense = (u64 *) dasd_get_sense(irb); tsb = NULL; if (req && scsw_is_tm(&req->irb.scsw)) { if (irb->scsw.tm.tcw) tsb = tcw_get_tsb( (struct tcw *)(unsigned long)irb->scsw.tm.tcw); if (tsb && (irb->scsw.tm.fcxs == 0x01)) { switch (tsb->flags & 0x07) { case 1: /* tsa_iostat */ sense = (u64 *)tsb->tsa.iostat.sense; break; case 2: /* ts_ddpc */ sense = (u64 *)tsb->tsa.ddpc.sense; break; case 3: /* tsa_intrg */ break; } } } else { if (irb->esw.esw0.erw.cons) sense = (u64 *)irb->ecw; } if (sense) { if (sense) { for (sl = 0; sl < 4; sl++) { DBF_DEV_EVENT(DBF_EMERG, device, DBF_DEV_EVENT(DBF_EMERG, device, "%s: %016llx %016llx %016llx %016llx", "%s: %s %02x%02x%02x %016llx %016llx %016llx " reason, sense[0], sense[1], sense[2], "%016llx", reason, sense[3]); scsw_is_tm(&irb->scsw) ? "t" : "c", } scsw_cc(&irb->scsw), scsw_cstat(&irb->scsw), scsw_dstat(&irb->scsw), sense[0], sense[1], sense[2], sense[3]); } else { } else { DBF_DEV_EVENT(DBF_EMERG, device, "%s", DBF_DEV_EVENT(DBF_EMERG, device, "%s", "SORRY - NO VALID SENSE AVAILABLE\n"); "SORRY - NO VALID SENSE AVAILABLE\n"); Loading
drivers/s390/block/dasd_erp.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -172,7 +172,7 @@ dasd_log_sense_dbf(struct dasd_ccw_req *cqr, struct irb *irb) device = cqr->startdev; device = cqr->startdev; /* dump sense data to s390 debugfeature*/ /* dump sense data to s390 debugfeature*/ if (device->discipline && device->discipline->dump_sense_dbf) if (device->discipline && device->discipline->dump_sense_dbf) device->discipline->dump_sense_dbf(device, cqr, irb, "log"); device->discipline->dump_sense_dbf(device, irb, "log"); } } EXPORT_SYMBOL(dasd_log_sense_dbf); EXPORT_SYMBOL(dasd_log_sense_dbf); Loading
drivers/s390/block/dasd_fba.c +14 −11 Original line number Original line Diff line number Diff line Loading @@ -241,7 +241,7 @@ static void dasd_fba_handle_unsolicited_interrupt(struct dasd_device *device, /* check for unsolicited interrupts */ /* check for unsolicited interrupts */ DBF_DEV_EVENT(DBF_WARNING, device, "%s", DBF_DEV_EVENT(DBF_WARNING, device, "%s", "unsolicited interrupt received"); "unsolicited interrupt received"); device->discipline->dump_sense_dbf(device, NULL, irb, "unsolicited"); device->discipline->dump_sense_dbf(device, irb, "unsolicited"); dasd_schedule_device_bh(device); dasd_schedule_device_bh(device); return; return; }; }; Loading Loading @@ -444,17 +444,20 @@ dasd_fba_fill_info(struct dasd_device * device, } } static void static void dasd_fba_dump_sense_dbf(struct dasd_device *device, struct dasd_ccw_req *req, dasd_fba_dump_sense_dbf(struct dasd_device *device, struct irb *irb, struct irb *irb, char *reason) char *reason) { { int sl; u64 *sense; if (irb->esw.esw0.erw.cons) { for (sl = 0; sl < 4; sl++) { sense = (u64 *) dasd_get_sense(irb); if (sense) { DBF_DEV_EVENT(DBF_EMERG, device, DBF_DEV_EVENT(DBF_EMERG, device, "%s: %08x %08x %08x %08x", "%s: %s %02x%02x%02x %016llx %016llx %016llx " reason, irb->ecw[8 * 0], irb->ecw[8 * 1], "%016llx", reason, irb->ecw[8 * 2], irb->ecw[8 * 3]); scsw_is_tm(&irb->scsw) ? "t" : "c", } scsw_cc(&irb->scsw), scsw_cstat(&irb->scsw), scsw_dstat(&irb->scsw), sense[0], sense[1], sense[2], sense[3]); } else { } else { DBF_DEV_EVENT(DBF_EMERG, device, "%s", DBF_DEV_EVENT(DBF_EMERG, device, "%s", "SORRY - NO VALID SENSE AVAILABLE\n"); "SORRY - NO VALID SENSE AVAILABLE\n"); Loading
drivers/s390/block/dasd_int.h +1 −2 Original line number Original line Diff line number Diff line Loading @@ -284,8 +284,7 @@ struct dasd_discipline { dasd_erp_fn_t(*erp_postaction) (struct dasd_ccw_req *); dasd_erp_fn_t(*erp_postaction) (struct dasd_ccw_req *); void (*dump_sense) (struct dasd_device *, struct dasd_ccw_req *, void (*dump_sense) (struct dasd_device *, struct dasd_ccw_req *, struct irb *); struct irb *); void (*dump_sense_dbf) (struct dasd_device *, struct dasd_ccw_req *, void (*dump_sense_dbf) (struct dasd_device *, struct irb *, char *); struct irb *, char *); void (*handle_unsolicited_interrupt) (struct dasd_device *, void (*handle_unsolicited_interrupt) (struct dasd_device *, struct irb *); struct irb *); Loading