Commit 58e2bbe9 authored by Tej Parkash's avatar Tej Parkash Committed by James Bottomley

[SCSI] qla4xxx: Driver not able to collect minidump for ISP84xx

Issue:
minidump data collection fails as driver reports data mismatch

Fix:
When the driver encounters a new entry type that it cannot process,
it should just skip the entry and adjust the total buffer size by
subtracting the skipped bytes from it. This is to ensure that there
is no data mismatch because of the new entries.
Signed-off-by: default avatarTej Parkash <tej.parkash@qlogic.com>
Signed-off-by: default avatarVikas Chaudhary <vikas.chaudhary@qlogic.com>
Reviewed-by: default avatarMike Christie <michaelc@cs.wisc.edu>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 61d9a2b6
...@@ -769,6 +769,7 @@ struct scsi_qla_host { ...@@ -769,6 +769,7 @@ struct scsi_qla_host {
uint32_t fw_dump_capture_mask; uint32_t fw_dump_capture_mask;
void *fw_dump_tmplt_hdr; void *fw_dump_tmplt_hdr;
uint32_t fw_dump_tmplt_size; uint32_t fw_dump_tmplt_size;
uint32_t fw_dump_skip_size;
struct completion mbx_intr_comp; struct completion mbx_intr_comp;
......
...@@ -2383,6 +2383,11 @@ static void qla4_8xxx_mark_entry_skipped(struct scsi_qla_host *ha, ...@@ -2383,6 +2383,11 @@ static void qla4_8xxx_mark_entry_skipped(struct scsi_qla_host *ha,
"scsi(%ld): Skipping entry[%d]: ETYPE[0x%x]-ELEVEL[0x%x]\n", "scsi(%ld): Skipping entry[%d]: ETYPE[0x%x]-ELEVEL[0x%x]\n",
ha->host_no, index, entry_hdr->entry_type, ha->host_no, index, entry_hdr->entry_type,
entry_hdr->d_ctrl.entry_capture_mask)); entry_hdr->d_ctrl.entry_capture_mask));
/* If driver encounters a new entry type that it cannot process,
* it should just skip the entry and adjust the total buffer size by
* from subtracting the skipped bytes from it
*/
ha->fw_dump_skip_size += entry_hdr->entry_capture_size;
} }
/* ISP83xx functions to process new minidump entries... */ /* ISP83xx functions to process new minidump entries... */
...@@ -2590,6 +2595,7 @@ static int qla4_8xxx_collect_md_data(struct scsi_qla_host *ha) ...@@ -2590,6 +2595,7 @@ static int qla4_8xxx_collect_md_data(struct scsi_qla_host *ha)
uint64_t now; uint64_t now;
uint32_t timestamp; uint32_t timestamp;
ha->fw_dump_skip_size = 0;
if (!ha->fw_dump) { if (!ha->fw_dump) {
ql4_printk(KERN_INFO, ha, "%s(%ld) No buffer to dump\n", ql4_printk(KERN_INFO, ha, "%s(%ld) No buffer to dump\n",
__func__, ha->host_no); __func__, ha->host_no);
...@@ -2761,7 +2767,7 @@ static int qla4_8xxx_collect_md_data(struct scsi_qla_host *ha) ...@@ -2761,7 +2767,7 @@ static int qla4_8xxx_collect_md_data(struct scsi_qla_host *ha)
entry_hdr->entry_size); entry_hdr->entry_size);
} }
if (data_collected != ha->fw_dump_size) { if ((data_collected + ha->fw_dump_skip_size) != ha->fw_dump_size) {
ql4_printk(KERN_INFO, ha, ql4_printk(KERN_INFO, ha,
"Dump data mismatch: Data collected: [0x%x], total_data_size:[0x%x]\n", "Dump data mismatch: Data collected: [0x%x], total_data_size:[0x%x]\n",
data_collected, ha->fw_dump_size); data_collected, ha->fw_dump_size);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment