Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph...
[firefly-linux-kernel-4.4.55.git] / drivers / scsi / lpfc / lpfc_hbadisc.c
index 759cbebed7c73a6ad48177ab0c422cb9217e9acf..bfc2442dd74a5738283b32f78506af70f85bb327 100644 (file)
@@ -800,7 +800,6 @@ lpfc_cleanup_rpis(struct lpfc_vport *vport, int remove)
        struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
        struct lpfc_hba  *phba = vport->phba;
        struct lpfc_nodelist *ndlp, *next_ndlp;
-       int  rc;
 
        list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes, nlp_listp) {
                if (!NLP_CHK_NODE_ACT(ndlp))
@@ -816,10 +815,10 @@ lpfc_cleanup_rpis(struct lpfc_vport *vport, int remove)
                if ((phba->sli_rev < LPFC_SLI_REV4) &&
                    (!remove && ndlp->nlp_type & NLP_FABRIC))
                        continue;
-               rc = lpfc_disc_state_machine(vport, ndlp, NULL,
-                                            remove
-                                            ? NLP_EVT_DEVICE_RM
-                                            : NLP_EVT_DEVICE_RECOVERY);
+               lpfc_disc_state_machine(vport, ndlp, NULL,
+                                       remove
+                                       ? NLP_EVT_DEVICE_RM
+                                       : NLP_EVT_DEVICE_RECOVERY);
        }
        if (phba->sli3_options & LPFC_SLI3_VPORT_TEARDOWN) {
                if (phba->sli_rev == LPFC_SLI_REV4)
@@ -1774,7 +1773,6 @@ lpfc_sli4_fcf_rec_mbox_parse(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq,
                             uint16_t *next_fcf_index)
 {
        void *virt_addr;
-       dma_addr_t phys_addr;
        struct lpfc_mbx_sge sge;
        struct lpfc_mbx_read_fcf_tbl *read_fcf;
        uint32_t shdr_status, shdr_add_status, if_type;
@@ -1785,7 +1783,6 @@ lpfc_sli4_fcf_rec_mbox_parse(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq,
         * routine only uses a single SGE.
         */
        lpfc_sli4_mbx_sge_get(mboxq, 0, &sge);
-       phys_addr = getPaddr(sge.pa_hi, sge.pa_lo);
        if (unlikely(!mboxq->sge_array)) {
                lpfc_printf_log(phba, KERN_ERR, LOG_MBOX,
                                "2524 Failed to get the non-embedded SGE "
@@ -2977,7 +2974,8 @@ lpfc_mbx_cmpl_read_sparam(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
        MAILBOX_t *mb = &pmb->u.mb;
        struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *) pmb->context1;
        struct lpfc_vport  *vport = pmb->vport;
-
+       struct serv_parm *sp = &vport->fc_sparam;
+       uint32_t ed_tov;
 
        /* Check for error */
        if (mb->mbxStatus) {
@@ -2992,6 +2990,18 @@ lpfc_mbx_cmpl_read_sparam(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
 
        memcpy((uint8_t *) &vport->fc_sparam, (uint8_t *) mp->virt,
               sizeof (struct serv_parm));
+
+       ed_tov = be32_to_cpu(sp->cmn.e_d_tov);
+       if (sp->cmn.edtovResolution)    /* E_D_TOV ticks are in nanoseconds */
+               ed_tov = (ed_tov + 999999) / 1000000;
+
+       phba->fc_edtov = ed_tov;
+       phba->fc_ratov = (2 * ed_tov) / 1000;
+       if (phba->fc_ratov < FF_DEF_RATOV) {
+               /* RA_TOV should be atleast 10sec for initial flogi */
+               phba->fc_ratov = FF_DEF_RATOV;
+       }
+
        lpfc_update_vport_wwn(vport);
        if (vport->port_type == LPFC_PHYSICAL_PORT) {
                memcpy(&phba->wwnn, &vport->fc_nodename, sizeof(phba->wwnn));
@@ -3032,6 +3042,7 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la)
        case LPFC_LINK_SPEED_8GHZ:
        case LPFC_LINK_SPEED_10GHZ:
        case LPFC_LINK_SPEED_16GHZ:
+       case LPFC_LINK_SPEED_32GHZ:
                phba->fc_linkspeed = bf_get(lpfc_mbx_read_top_link_spd, la);
                break;
        default: