]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
lpfc: Fix default RA_TOV and ED_TOV in the FC/FCoE driver for all topologies
authorrkennedy <dick.kennedy@avagotech.com>
Tue, 13 Oct 2015 20:15:40 +0000 (13:15 -0700)
committerChuck Anderson <chuck.anderson@oracle.com>
Mon, 19 Oct 2015 16:10:59 +0000 (09:10 -0700)
Submitted by james.smart () james.smart.()@emulex.com

Fix default RA_TOV and ED_TOV in the FC/FCoE driver for all topologies

Initial link up defaults were not properly being tracked relative to
initial FLOGI or pt2pt PLOGI. Add code to initialize them.

Signed-off-by: Dick Kennedy dick.kennedy@avagotech.com
Signed-off-by: James Smart james.smart@avagotech.com
http://marc.info/?l=linux-scsi&m=144105412203750&w=2

Orabug: 22029622
From dick.kennedy@avagotech.com lpfc-10.5.0.1-11.0.0.3-1.tar.gz
Acked-by: Chuck Anderson <chuck.anderson@oracle.com>
drivers/scsi/lpfc/lpfc_hbadisc.c
drivers/scsi/lpfc/lpfc_hw.h

index 12a13110674a224499d67933247e6d5cb71df7df..5c83e82e22b9ff0ecd47c6e7e834cbcf857e3e9d 100644 (file)
@@ -3000,7 +3000,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) {
@@ -3015,6 +3016,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));
index f73b6e1833cc9461d30dab8beb606d9d33a9afeb..2cce88e967ce168500e4f5bc738451532fb49144 100644 (file)
@@ -33,7 +33,7 @@
 
 #define FF_DEF_EDTOV          2000     /* Default E_D_TOV (2000ms) */
 #define FF_DEF_ALTOV            15     /* Default AL_TIME (15ms) */
-#define FF_DEF_RATOV             2     /* Default RA_TOV (2s) */
+#define FF_DEF_RATOV            10     /* Default RA_TOV (10s) */
 #define FF_DEF_ARBTOV         1900     /* Default ARB_TOV (1900ms) */
 
 #define LPFC_BUF_RING0        64       /* Number of buffers to post to RING