aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/lpfc/lpfc_hbadisc.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index 4decb868017e..240492208aba 100644
--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
+++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
@@ -3249,8 +3249,7 @@ lpfc_mbx_cmpl_read_topology(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
3249 vport->fc_flag &= ~FC_BYPASSED_MODE; 3249 vport->fc_flag &= ~FC_BYPASSED_MODE;
3250 spin_unlock_irq(shost->host_lock); 3250 spin_unlock_irq(shost->host_lock);
3251 3251
3252 if ((phba->fc_eventTag < la->eventTag) || 3252 if (phba->fc_eventTag <= la->eventTag) {
3253 (phba->fc_eventTag == la->eventTag)) {
3254 phba->fc_stat.LinkMultiEvent++; 3253 phba->fc_stat.LinkMultiEvent++;
3255 if (bf_get(lpfc_mbx_read_top_att_type, la) == LPFC_ATT_LINK_UP) 3254 if (bf_get(lpfc_mbx_read_top_att_type, la) == LPFC_ATT_LINK_UP)
3256 if (phba->fc_eventTag != 0) 3255 if (phba->fc_eventTag != 0)
@@ -3258,16 +3257,18 @@ lpfc_mbx_cmpl_read_topology(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
3258 } 3257 }
3259 3258
3260 phba->fc_eventTag = la->eventTag; 3259 phba->fc_eventTag = la->eventTag;
3261 spin_lock_irq(&phba->hbalock); 3260 if (phba->sli_rev < LPFC_SLI_REV4) {
3262 if (bf_get(lpfc_mbx_read_top_mm, la)) 3261 spin_lock_irq(&phba->hbalock);
3263 phba->sli.sli_flag |= LPFC_MENLO_MAINT; 3262 if (bf_get(lpfc_mbx_read_top_mm, la))
3264 else 3263 phba->sli.sli_flag |= LPFC_MENLO_MAINT;
3265 phba->sli.sli_flag &= ~LPFC_MENLO_MAINT; 3264 else
3266 spin_unlock_irq(&phba->hbalock); 3265 phba->sli.sli_flag &= ~LPFC_MENLO_MAINT;
3266 spin_unlock_irq(&phba->hbalock);
3267 }
3267 3268
3268 phba->link_events++; 3269 phba->link_events++;
3269 if ((bf_get(lpfc_mbx_read_top_att_type, la) == LPFC_ATT_LINK_UP) && 3270 if ((bf_get(lpfc_mbx_read_top_att_type, la) == LPFC_ATT_LINK_UP) &&
3270 (!bf_get(lpfc_mbx_read_top_mm, la))) { 3271 !(phba->sli.sli_flag & LPFC_MENLO_MAINT)) {
3271 phba->fc_stat.LinkUp++; 3272 phba->fc_stat.LinkUp++;
3272 if (phba->link_flag & LS_LOOPBACK_MODE) { 3273 if (phba->link_flag & LS_LOOPBACK_MODE) {
3273 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, 3274 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT,
@@ -3312,8 +3313,8 @@ lpfc_mbx_cmpl_read_topology(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
3312 bf_get(lpfc_mbx_read_top_fa, la)); 3313 bf_get(lpfc_mbx_read_top_fa, la));
3313 lpfc_mbx_issue_link_down(phba); 3314 lpfc_mbx_issue_link_down(phba);
3314 } 3315 }
3315 if ((bf_get(lpfc_mbx_read_top_mm, la)) && 3316 if ((phba->sli.sli_flag & LPFC_MENLO_MAINT) &&
3316 (bf_get(lpfc_mbx_read_top_att_type, la) == LPFC_ATT_LINK_UP)) { 3317 ((bf_get(lpfc_mbx_read_top_att_type, la) == LPFC_ATT_LINK_UP))) {
3317 if (phba->link_state != LPFC_LINK_DOWN) { 3318 if (phba->link_state != LPFC_LINK_DOWN) {
3318 phba->fc_stat.LinkDown++; 3319 phba->fc_stat.LinkDown++;
3319 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, 3320 lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT,
@@ -3341,8 +3342,9 @@ lpfc_mbx_cmpl_read_topology(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
3341 } 3342 }
3342 } 3343 }
3343 3344
3344 if (bf_get(lpfc_mbx_read_top_fa, la)) { 3345 if ((phba->sli_rev < LPFC_SLI_REV4) &&
3345 if (bf_get(lpfc_mbx_read_top_mm, la)) 3346 bf_get(lpfc_mbx_read_top_fa, la)) {
3347 if (phba->sli.sli_flag & LPFC_MENLO_MAINT)
3346 lpfc_issue_clear_la(phba, vport); 3348 lpfc_issue_clear_la(phba, vport);
3347 lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT, 3349 lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT,
3348 "1311 fa %d\n", 3350 "1311 fa %d\n",