diff options
author | Andrew Vasquez <andrew.vasquez@qlogic.com> | 2008-04-03 16:13:19 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-04-07 13:19:13 -0400 |
commit | cb8dacbf1110d8bd39413f3116ff1720f757854e (patch) | |
tree | 8d58f215c7a1091f7e760359c56d1316d9c80f7d /drivers/scsi/qla2xxx/qla_isr.c | |
parent | 0971de7f56f809f40edae6fd372745e429e970e9 (diff) |
[SCSI] qla2xxx: Add hardware trace-logging support.
Recent ISPs have a region within FLASH which acts as a repository
for the logging of serious hardware and software failures.
Currently, the region is large enough to support up to 255
entries.
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_isr.c')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index e9d8a79dd6a4..088464251d7e 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
@@ -349,6 +349,7 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb) | |||
349 | "ISP System Error - mbx1=%xh mbx2=%xh mbx3=%xh.\n", | 349 | "ISP System Error - mbx1=%xh mbx2=%xh mbx3=%xh.\n", |
350 | mb[1], mb[2], mb[3]); | 350 | mb[1], mb[2], mb[3]); |
351 | 351 | ||
352 | qla2x00_post_hwe_work(ha, mb[0], mb[1], mb[2], mb[3]); | ||
352 | ha->isp_ops->fw_dump(ha, 1); | 353 | ha->isp_ops->fw_dump(ha, 1); |
353 | 354 | ||
354 | if (IS_FWI2_CAPABLE(ha)) { | 355 | if (IS_FWI2_CAPABLE(ha)) { |
@@ -373,6 +374,7 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb) | |||
373 | ha->host_no)); | 374 | ha->host_no)); |
374 | qla_printk(KERN_WARNING, ha, "ISP Request Transfer Error.\n"); | 375 | qla_printk(KERN_WARNING, ha, "ISP Request Transfer Error.\n"); |
375 | 376 | ||
377 | qla2x00_post_hwe_work(ha, mb[0], mb[1], mb[2], mb[3]); | ||
376 | set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags); | 378 | set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags); |
377 | break; | 379 | break; |
378 | 380 | ||
@@ -381,6 +383,7 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb) | |||
381 | ha->host_no)); | 383 | ha->host_no)); |
382 | qla_printk(KERN_WARNING, ha, "ISP Response Transfer Error.\n"); | 384 | qla_printk(KERN_WARNING, ha, "ISP Response Transfer Error.\n"); |
383 | 385 | ||
386 | qla2x00_post_hwe_work(ha, mb[0], mb[1], mb[2], mb[3]); | ||
384 | set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags); | 387 | set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags); |
385 | break; | 388 | break; |
386 | 389 | ||
@@ -1558,6 +1561,12 @@ qla24xx_intr_handler(int irq, void *dev_id) | |||
1558 | if (pci_channel_offline(ha->pdev)) | 1561 | if (pci_channel_offline(ha->pdev)) |
1559 | break; | 1562 | break; |
1560 | 1563 | ||
1564 | if (ha->hw_event_pause_errors == 0) | ||
1565 | qla2x00_post_hwe_work(ha, HW_EVENT_PARITY_ERR, | ||
1566 | 0, MSW(stat), LSW(stat)); | ||
1567 | else if (ha->hw_event_pause_errors < 0xffffffff) | ||
1568 | ha->hw_event_pause_errors++; | ||
1569 | |||
1561 | hccr = RD_REG_DWORD(®->hccr); | 1570 | hccr = RD_REG_DWORD(®->hccr); |
1562 | 1571 | ||
1563 | qla_printk(KERN_INFO, ha, "RISC paused -- HCCR=%x, " | 1572 | qla_printk(KERN_INFO, ha, "RISC paused -- HCCR=%x, " |
@@ -1693,6 +1702,12 @@ qla24xx_msix_default(int irq, void *dev_id) | |||
1693 | if (pci_channel_offline(ha->pdev)) | 1702 | if (pci_channel_offline(ha->pdev)) |
1694 | break; | 1703 | break; |
1695 | 1704 | ||
1705 | if (ha->hw_event_pause_errors == 0) | ||
1706 | qla2x00_post_hwe_work(ha, HW_EVENT_PARITY_ERR, | ||
1707 | 0, MSW(stat), LSW(stat)); | ||
1708 | else if (ha->hw_event_pause_errors < 0xffffffff) | ||
1709 | ha->hw_event_pause_errors++; | ||
1710 | |||
1696 | hccr = RD_REG_DWORD(®->hccr); | 1711 | hccr = RD_REG_DWORD(®->hccr); |
1697 | 1712 | ||
1698 | qla_printk(KERN_INFO, ha, "RISC paused -- HCCR=%x, " | 1713 | qla_printk(KERN_INFO, ha, "RISC paused -- HCCR=%x, " |