]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
lpfc: Fix FW dump using sysfs
authorJames Smart <james.smart@emulex.com>
Fri, 4 Apr 2014 17:52:12 +0000 (13:52 -0400)
committerChristoph Hellwig <hch@lst.de>
Mon, 2 Jun 2014 16:28:52 +0000 (18:28 +0200)
Fix FW dump using sysfs

Signed-off-by: James Smart <james.smart@emulex.com>
Reviewed-By: Dick Kennedy <dick.kennedy@emulex.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/scsi/lpfc/lpfc.h
drivers/scsi/lpfc/lpfc_attr.c
drivers/scsi/lpfc/lpfc_sli.c

index 94a3cafe7197ded339c889aa07c32c9ac41b32e5..f713758720075f0002eca8a41c42bdf72ddb4a65 100644 (file)
@@ -640,6 +640,7 @@ struct lpfc_hba {
 #define HBA_DEVLOSS_TMO         0x2000 /* HBA in devloss timeout */
 #define HBA_RRQ_ACTIVE         0x4000 /* process the rrq active list */
 #define HBA_FCP_IOQ_FLUSH      0x8000 /* FCP I/O queues being flushed */
+#define HBA_FW_DUMP_OP         0x10000 /* Skips fn reset before FW dump */
        uint32_t fcp_ring_in_use; /* When polling test if intr-hndlr active*/
        struct lpfc_dmabuf slim2p;
 
index 8d5b6ceec9c9d2a3710fe650d122a806fb5ca2f8..3d6a77e21540c28da5ab7fab180e90b962a36d7e 100644 (file)
@@ -919,10 +919,15 @@ lpfc_sli4_pdev_reg_request(struct lpfc_hba *phba, uint32_t opcode)
                phba->cfg_sriov_nr_virtfn = 0;
        }
 
+       if (opcode == LPFC_FW_DUMP)
+               phba->hba_flag |= HBA_FW_DUMP_OP;
+
        status = lpfc_do_offline(phba, LPFC_EVT_OFFLINE);
 
-       if (status != 0)
+       if (status != 0) {
+               phba->hba_flag &= ~HBA_FW_DUMP_OP;
                return status;
+       }
 
        /* wait for the device to be quiesced before firmware reset */
        msleep(100);
index 91e3c51f82658450954b1d07ad747bf6a197d616..b5336a693974c09cd49e78e8a32cb9e6b35f9d10 100644 (file)
@@ -4057,12 +4057,13 @@ lpfc_sli4_brdreset(struct lpfc_hba *phba)
 {
        struct lpfc_sli *psli = &phba->sli;
        uint16_t cfg_value;
-       int rc;
+       int rc = 0;
 
        /* Reset HBA */
        lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
-                       "0295 Reset HBA Data: x%x x%x\n",
-                       phba->pport->port_state, psli->sli_flag);
+                       "0295 Reset HBA Data: x%x x%x x%x\n",
+                       phba->pport->port_state, psli->sli_flag,
+                       phba->hba_flag);
 
        /* perform board reset */
        phba->fc_eventTag = 0;
@@ -4075,6 +4076,12 @@ lpfc_sli4_brdreset(struct lpfc_hba *phba)
        phba->fcf.fcf_flag = 0;
        spin_unlock_irq(&phba->hbalock);
 
+       /* SLI4 INTF 2: if FW dump is being taken skip INIT_PORT */
+       if (phba->hba_flag & HBA_FW_DUMP_OP) {
+               phba->hba_flag &= ~HBA_FW_DUMP_OP;
+               return rc;
+       }
+
        /* Now physically reset the device */
        lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
                        "0389 Performing PCI function reset!\n");