qla2xxx: Allow the next firmware dump if the previous dump capture fails for ISP8044.
authorSaurav Kashyap <saurav.kashyap@qlogic.com>
Fri, 11 Apr 2014 20:54:14 +0000 (16:54 -0400)
committerChristoph Hellwig <hch@lst.de>
Mon, 19 May 2014 11:31:00 +0000 (13:31 +0200)
Signed-off-by: Giridhar Malavali <giridhar.malvali@qlogic.com>
Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/scsi/qla2xxx/qla_def.h
drivers/scsi/qla2xxx/qla_nx.c
drivers/scsi/qla2xxx/qla_nx2.c
drivers/scsi/qla2xxx/qla_os.c

index 89bece72ef664ef01a18dde714c6e121b99c062b..bab1cf12d1e9731dae69bacc07e0f24475ec2521 100644 (file)
@@ -3141,6 +3141,7 @@ struct qla_hw_data {
        uint32_t        fw_dump_len;
        int             fw_dumped;
        int             fw_dump_reading;
+       int             prev_minidump_failed;
        dma_addr_t      eft_dma;
        void            *eft;
 /* Current size of mctp dump is 0x086064 bytes */
index 81388e9572379be1ff4552ccfe0b77e6aca94f75..3c5819ae451ba2e038c75ed9d08755b5e83ade4a 100644 (file)
@@ -3142,18 +3142,18 @@ qla82xx_check_md_needed(scsi_qla_host_t *vha)
 
        if (ql2xmdenable) {
                if (!ha->fw_dumped) {
-                       if (fw_major_version != ha->fw_major_version ||
+                       if ((fw_major_version != ha->fw_major_version ||
                            fw_minor_version != ha->fw_minor_version ||
-                           fw_subminor_version != ha->fw_subminor_version) {
+                           fw_subminor_version != ha->fw_subminor_version) ||
+                           (ha->prev_minidump_failed)) {
                                ql_dbg(ql_dbg_p3p, vha, 0xb02d,
-                                   "Firmware version differs "
-                                   "Previous version: %d:%d:%d - "
-                                   "New version: %d:%d:%d\n",
+                                   "Firmware version differs Previous version: %d:%d:%d - New version: %d:%d:%d, prev_minidump_failed: %d.\n",
                                    fw_major_version, fw_minor_version,
                                    fw_subminor_version,
                                    ha->fw_major_version,
                                    ha->fw_minor_version,
-                                   ha->fw_subminor_version);
+                                   ha->fw_subminor_version,
+                                   ha->prev_minidump_failed);
                                /* Release MiniDump resources */
                                qla82xx_md_free(vha);
                                /* ALlocate MiniDump resources */
index e381835a10b42fd2829b51be7fca400b1d6d86a6..d36a62377c098b075b82650de7a900fa5f456be9 100644 (file)
@@ -3125,6 +3125,7 @@ skip_nxt_entry:
                    "Dump data mismatch: Data collected: "
                    "[0x%x], total_data_size:[0x%x]\n",
                    data_collected, ha->md_dump_size);
+               rval = QLA_FUNCTION_FAILED;
                goto md_failed;
        }
 
@@ -3149,10 +3150,12 @@ qla8044_get_minidump(struct scsi_qla_host *vha)
 
        if (!qla8044_collect_md_data(vha)) {
                ha->fw_dumped = 1;
+               ha->prev_minidump_failed = 0;
        } else {
                ql_log(ql_log_fatal, vha, 0xb0db,
                    "%s: Unable to collect minidump\n",
                    __func__);
+               ha->prev_minidump_failed = 1;
        }
 }
 
index 1b1cd75a7aa044d436362faeda31e8a5647ed210..0114ea4e87cd991979b5dd677fd6a45bce1a3145 100644 (file)
@@ -2885,6 +2885,7 @@ skip_dpc:
 
        base_vha->flags.init_done = 1;
        base_vha->flags.online = 1;
+       ha->prev_minidump_failed = 0;
 
        ql_dbg(ql_dbg_init, base_vha, 0x00f2,
            "Init done and hba is online.\n");