Commit a58cbd52 authored by James Smart's avatar James Smart Committed by James Bottomley

[SCSI] lpfc 8.2.2 : Error messages and debugfs updates

Error messages and debugfs updates:
 - Fix up GID_FT error messages
 - Enhance debugfs with slow_ring_trace, dumpslim and nodelist information
 - Add log type (and messages) for vport state changes
 - Enhance log messages when retries ELS fail
Signed-off-by: default avatarJames Smart <James.Smart@emulex.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent c000c43c
...@@ -335,7 +335,7 @@ struct lpfc_vport { ...@@ -335,7 +335,7 @@ struct lpfc_vport {
struct dentry *debug_disc_trc; struct dentry *debug_disc_trc;
struct dentry *debug_nodelist; struct dentry *debug_nodelist;
struct dentry *vport_debugfs_root; struct dentry *vport_debugfs_root;
struct lpfc_disc_trc *disc_trc; struct lpfc_debugfs_trc *disc_trc;
atomic_t disc_trc_cnt; atomic_t disc_trc_cnt;
#endif #endif
}; };
...@@ -547,6 +547,10 @@ struct lpfc_hba { ...@@ -547,6 +547,10 @@ struct lpfc_hba {
#ifdef CONFIG_LPFC_DEBUG_FS #ifdef CONFIG_LPFC_DEBUG_FS
struct dentry *hba_debugfs_root; struct dentry *hba_debugfs_root;
atomic_t debugfs_vport_count; atomic_t debugfs_vport_count;
struct dentry *debug_dumpslim;
struct dentry *debug_slow_ring_trc;
struct lpfc_debugfs_trc *slow_ring_trc;
atomic_t slow_ring_trc_cnt;
#endif #endif
/* Fields used for heart beat. */ /* Fields used for heart beat. */
......
...@@ -271,6 +271,8 @@ extern void lpfc_debugfs_initialize(struct lpfc_vport *); ...@@ -271,6 +271,8 @@ extern void lpfc_debugfs_initialize(struct lpfc_vport *);
extern void lpfc_debugfs_terminate(struct lpfc_vport *); extern void lpfc_debugfs_terminate(struct lpfc_vport *);
extern void lpfc_debugfs_disc_trc(struct lpfc_vport *, int, char *, uint32_t, extern void lpfc_debugfs_disc_trc(struct lpfc_vport *, int, char *, uint32_t,
uint32_t, uint32_t); uint32_t, uint32_t);
extern void lpfc_debugfs_slow_ring_trc(struct lpfc_hba *, char *, uint32_t,
uint32_t, uint32_t);
/* Interface exported by fabric iocb scheduler */ /* Interface exported by fabric iocb scheduler */
int lpfc_issue_fabric_iocb(struct lpfc_hba *, struct lpfc_iocbq *); int lpfc_issue_fabric_iocb(struct lpfc_hba *, struct lpfc_iocbq *);
......
...@@ -607,7 +607,25 @@ lpfc_cmpl_ct_cmd_gid_ft(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, ...@@ -607,7 +607,25 @@ lpfc_cmpl_ct_cmd_gid_ft(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
} else if (CTrsp->CommandResponse.bits.CmdRsp == } else if (CTrsp->CommandResponse.bits.CmdRsp ==
be16_to_cpu(SLI_CT_RESPONSE_FS_RJT)) { be16_to_cpu(SLI_CT_RESPONSE_FS_RJT)) {
/* NameServer Rsp Error */ /* NameServer Rsp Error */
lpfc_printf_log(phba, KERN_INFO, LOG_DISCOVERY, if ((CTrsp->ReasonCode == SLI_CT_UNABLE_TO_PERFORM_REQ)
&& (CTrsp->Explanation == SLI_CT_NO_FC4_TYPES)) {
lpfc_printf_log(phba, KERN_INFO, LOG_DISCOVERY,
"%d (%d):0269 No NameServer Entries "
"Data: x%x x%x x%x x%x\n",
phba->brd_no, vport->vpi,
CTrsp->CommandResponse.bits.CmdRsp,
(uint32_t) CTrsp->ReasonCode,
(uint32_t) CTrsp->Explanation,
vport->fc_flag);
lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_CT,
"GID_FT no entry cmd:x%x rsn:x%x exp:x%x",
(uint32_t)CTrsp->CommandResponse.bits.CmdRsp,
(uint32_t) CTrsp->ReasonCode,
(uint32_t) CTrsp->Explanation);
}
else {
lpfc_printf_log(phba, KERN_INFO, LOG_DISCOVERY,
"%d (%d):0240 NameServer Rsp Error " "%d (%d):0240 NameServer Rsp Error "
"Data: x%x x%x x%x x%x\n", "Data: x%x x%x x%x x%x\n",
phba->brd_no, vport->vpi, phba->brd_no, vport->vpi,
...@@ -616,11 +634,13 @@ lpfc_cmpl_ct_cmd_gid_ft(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, ...@@ -616,11 +634,13 @@ lpfc_cmpl_ct_cmd_gid_ft(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
(uint32_t) CTrsp->Explanation, (uint32_t) CTrsp->Explanation,
vport->fc_flag); vport->fc_flag);
lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_CT, lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_CT,
"GID_FT rsp err1 cmd:x%x rsn:x%x exp:x%x", "GID_FT rsp err1 cmd:x%x rsn:x%x exp:x%x",
(uint32_t)CTrsp->CommandResponse.bits.CmdRsp, (uint32_t)CTrsp->CommandResponse.bits.CmdRsp,
(uint32_t) CTrsp->ReasonCode, (uint32_t) CTrsp->ReasonCode,
(uint32_t) CTrsp->Explanation); (uint32_t) CTrsp->Explanation);
}
} else { } else {
/* NameServer Rsp Error */ /* NameServer Rsp Error */
...@@ -696,7 +716,7 @@ lpfc_cmpl_ct_cmd_gff_id(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, ...@@ -696,7 +716,7 @@ lpfc_cmpl_ct_cmd_gff_id(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
if ((fbits & FC4_FEATURE_INIT) && if ((fbits & FC4_FEATURE_INIT) &&
!(fbits & FC4_FEATURE_TARGET)) { !(fbits & FC4_FEATURE_TARGET)) {
lpfc_printf_log(phba, KERN_INFO, LOG_DISCOVERY, lpfc_printf_log(phba, KERN_INFO, LOG_DISCOVERY,
"%d (%d):0245 Skip x%x GFF " "%d (%d):0270 Skip x%x GFF "
"NameServer Rsp Data: (init) " "NameServer Rsp Data: (init) "
"x%x x%x\n", phba->brd_no, "x%x x%x\n", phba->brd_no,
vport->vpi, did, fbits, vport->vpi, did, fbits,
......
This diff is collapsed.
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#define _H_LPFC_DEBUG_FS #define _H_LPFC_DEBUG_FS
#ifdef CONFIG_LPFC_DEBUG_FS #ifdef CONFIG_LPFC_DEBUG_FS
struct lpfc_disc_trc { struct lpfc_debugfs_trc {
char *fmt; char *fmt;
uint32_t data1; uint32_t data1;
uint32_t data2; uint32_t data2;
......
...@@ -2033,12 +2033,11 @@ lpfc_els_retry(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, ...@@ -2033,12 +2033,11 @@ lpfc_els_retry(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
} }
/* No retry ELS command <elsCmd> to remote NPORT <did> */ /* No retry ELS command <elsCmd> to remote NPORT <did> */
lpfc_printf_log(phba, KERN_INFO, LOG_ELS, lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS,
"%d (%d):0108 No retry ELS command x%x to remote " "0108 No retry ELS command x%x to remote "
"NPORT x%x Data: x%x\n", "NPORT x%x Retried:%d Error:x%x/%x\n",
phba->brd_no, vport->vpi, cmd, did, cmdiocb->retry, irsp->ulpStatus,
cmd, did, cmdiocb->retry); irsp->un.ulpWord[4]);
return 0; return 0;
} }
......
...@@ -426,10 +426,19 @@ lpfc_work_done(struct lpfc_hba *phba) ...@@ -426,10 +426,19 @@ lpfc_work_done(struct lpfc_hba *phba)
spin_lock_irq(&phba->hbalock); spin_lock_irq(&phba->hbalock);
control = readl(phba->HCregaddr); control = readl(phba->HCregaddr);
if (!(control & (HC_R0INT_ENA << LPFC_ELS_RING))) { if (!(control & (HC_R0INT_ENA << LPFC_ELS_RING))) {
lpfc_debugfs_slow_ring_trc(phba,
"WRK Enable ring: cntl:x%x hacopy:x%x",
control, ha_copy, 0);
control |= (HC_R0INT_ENA << LPFC_ELS_RING); control |= (HC_R0INT_ENA << LPFC_ELS_RING);
writel(control, phba->HCregaddr); writel(control, phba->HCregaddr);
readl(phba->HCregaddr); /* flush */ readl(phba->HCregaddr); /* flush */
} }
else {
lpfc_debugfs_slow_ring_trc(phba,
"WRK Ring ok: cntl:x%x hacopy:x%x",
control, ha_copy, 0);
}
spin_unlock_irq(&phba->hbalock); spin_unlock_irq(&phba->hbalock);
} }
lpfc_work_list_done(phba); lpfc_work_list_done(phba);
......
...@@ -395,6 +395,14 @@ lpfc_sli_submit_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, ...@@ -395,6 +395,14 @@ lpfc_sli_submit_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
*/ */
nextiocb->iocb.ulpIoTag = (nextiocb->iocb_cmpl) ? nextiocb->iotag : 0; nextiocb->iocb.ulpIoTag = (nextiocb->iocb_cmpl) ? nextiocb->iotag : 0;
if (pring->ringno == LPFC_ELS_RING) {
lpfc_debugfs_slow_ring_trc(phba,
"IOCB cmd ring: wd4:x%08x wd6:x%08x wd7:x%08x",
*(((uint32_t *) &nextiocb->iocb) + 4),
*(((uint32_t *) &nextiocb->iocb) + 6),
*(((uint32_t *) &nextiocb->iocb) + 7));
}
/* /*
* Issue iocb command to adapter * Issue iocb command to adapter
*/ */
...@@ -1542,6 +1550,14 @@ lpfc_sli_handle_slow_ring_event(struct lpfc_hba *phba, ...@@ -1542,6 +1550,14 @@ lpfc_sli_handle_slow_ring_event(struct lpfc_hba *phba,
if (++pring->rspidx >= portRspMax) if (++pring->rspidx >= portRspMax)
pring->rspidx = 0; pring->rspidx = 0;
if (pring->ringno == LPFC_ELS_RING) {
lpfc_debugfs_slow_ring_trc(phba,
"IOCB rsp ring: wd4:x%08x wd6:x%08x wd7:x%08x",
*(((uint32_t *) irsp) + 4),
*(((uint32_t *) irsp) + 6),
*(((uint32_t *) irsp) + 7));
}
writel(pring->rspidx, &phba->host_gp[pring->ringno].rspGetInx); writel(pring->rspidx, &phba->host_gp[pring->ringno].rspGetInx);
if (list_empty(&(pring->iocb_continueq))) { if (list_empty(&(pring->iocb_continueq))) {
...@@ -3850,12 +3866,33 @@ lpfc_intr_handler(int irq, void *dev_id) ...@@ -3850,12 +3866,33 @@ lpfc_intr_handler(int irq, void *dev_id)
if (status & HA_RXMASK) { if (status & HA_RXMASK) {
spin_lock(&phba->hbalock); spin_lock(&phba->hbalock);
control = readl(phba->HCregaddr); control = readl(phba->HCregaddr);
lpfc_debugfs_slow_ring_trc(phba,
"ISR slow ring: ctl:x%x stat:x%x isrcnt:x%x",
control, status,
(uint32_t)phba->sli.slistat.sli_intr);
if (control & (HC_R0INT_ENA << LPFC_ELS_RING)) { if (control & (HC_R0INT_ENA << LPFC_ELS_RING)) {
lpfc_debugfs_slow_ring_trc(phba,
"ISR Disable ring:"
"pwork:x%x hawork:x%x wait:x%x",
phba->work_ha, work_ha_copy,
(uint32_t)((unsigned long)
phba->work_wait));
control &= control &=
~(HC_R0INT_ENA << LPFC_ELS_RING); ~(HC_R0INT_ENA << LPFC_ELS_RING);
writel(control, phba->HCregaddr); writel(control, phba->HCregaddr);
readl(phba->HCregaddr); /* flush */ readl(phba->HCregaddr); /* flush */
} }
else {
lpfc_debugfs_slow_ring_trc(phba,
"ISR slow ring: pwork:"
"x%x hawork:x%x wait:x%x",
phba->work_ha, work_ha_copy,
(uint32_t)((unsigned long)
phba->work_wait));
}
spin_unlock(&phba->hbalock); spin_unlock(&phba->hbalock);
} }
} }
......
...@@ -326,6 +326,8 @@ lpfc_vport_create(struct fc_vport *fc_vport, bool disable) ...@@ -326,6 +326,8 @@ lpfc_vport_create(struct fc_vport *fc_vport, bool disable)
rc = VPORT_OK; rc = VPORT_OK;
out: out:
lpfc_printf_vlog(vport, KERN_ERR, LOG_VPORT,
"1825 Vport Created.\n");
lpfc_host_attrib_init(lpfc_shost_from_vport(vport)); lpfc_host_attrib_init(lpfc_shost_from_vport(vport));
error_out: error_out:
return rc; return rc;
...@@ -371,6 +373,8 @@ disable_vport(struct fc_vport *fc_vport) ...@@ -371,6 +373,8 @@ disable_vport(struct fc_vport *fc_vport)
lpfc_mbx_unreg_vpi(vport); lpfc_mbx_unreg_vpi(vport);
lpfc_vport_set_state(vport, FC_VPORT_DISABLED); lpfc_vport_set_state(vport, FC_VPORT_DISABLED);
lpfc_printf_vlog(vport, KERN_ERR, LOG_VPORT,
"1826 Vport Disabled.\n");
return VPORT_OK; return VPORT_OK;
} }
...@@ -408,7 +412,8 @@ enable_vport(struct fc_vport *fc_vport) ...@@ -408,7 +412,8 @@ enable_vport(struct fc_vport *fc_vport)
} else { } else {
lpfc_vport_set_state(vport, FC_VPORT_FAILED); lpfc_vport_set_state(vport, FC_VPORT_FAILED);
} }
lpfc_printf_vlog(vport, KERN_ERR, LOG_VPORT,
"1827 Vport Enabled.\n");
return VPORT_OK; return VPORT_OK;
} }
...@@ -511,7 +516,8 @@ lpfc_vport_delete(struct fc_vport *fc_vport) ...@@ -511,7 +516,8 @@ lpfc_vport_delete(struct fc_vport *fc_vport)
spin_lock_irq(&phba->hbalock); spin_lock_irq(&phba->hbalock);
list_del_init(&vport->listentry); list_del_init(&vport->listentry);
spin_unlock_irq(&phba->hbalock); spin_unlock_irq(&phba->hbalock);
lpfc_printf_vlog(vport, KERN_ERR, LOG_VPORT,
"1828 Vport Deleted.\n");
rc = VPORT_OK; rc = VPORT_OK;
out: out:
scsi_host_put(shost); scsi_host_put(shost);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment