aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc/lpfc_debugfs.c
diff options
context:
space:
mode:
authorJames Smart <James.Smart@Emulex.Com>2007-08-02 11:10:31 -0400
committerJames Bottomley <jejb@mulgrave.localdomain>2007-08-01 13:24:10 -0400
commit51ef4c26891a734bc8416b639ad460a8162926bc (patch)
tree8279e11bf1a0a3200e8aa9bb3d956345ef73533c /drivers/scsi/lpfc/lpfc_debugfs.c
parent78b2d852a88cd2a55e3ab632109de045d58b83e3 (diff)
[SCSI] lpfc 8.2.2 : Miscellaneous Bug Fixes
- Fix vport ndlp ref counting errors - Fix use after free of ndlp structure - Use the correct flag to check for LOADING setting. - Fix driver unload bugs (related to shost references) after link down or rscn - Fix up HBQ initialization - Fix port_list locking around driver unload. - Fix references to hostdata as a phba - Fix GFFID type offset to work correctly with big endian structure. - Only call pci_disable_msi if the pci_enable_msi succeeded - Fix vport_delete wait/fail if in discovery - Put a reference on the nameservers ndlp when performing CT traffic. - Remove unbalanced hba unlock. - Fix up HBQ processing - Fix lpfc debugfs discovery trace output for ELS rsp cmpl - Send ADISC when rpi is 0 - Stop FDISC retrying forever - Unable to retrieve correct config parameter for vport - Fix sli_validate_fcp_iocb, sli_sum_iocb, sli_abort_iocb to be vport-aware. - Fix index-out-of-range error in iocb. Spotted by Coverity. Signed-off-by: James Smart <James.Smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_debugfs.c')
-rw-r--r--drivers/scsi/lpfc/lpfc_debugfs.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/drivers/scsi/lpfc/lpfc_debugfs.c b/drivers/scsi/lpfc/lpfc_debugfs.c
index f334761d04df..697a09dccb6f 100644
--- a/drivers/scsi/lpfc/lpfc_debugfs.c
+++ b/drivers/scsi/lpfc/lpfc_debugfs.c
@@ -71,7 +71,7 @@
71 * lpfc_debugfs_mask_disc_trc=Y Where Y is an event mask as defined in 71 * lpfc_debugfs_mask_disc_trc=Y Where Y is an event mask as defined in
72 * lpfc_debugfs.h . 72 * lpfc_debugfs.h .
73 */ 73 */
74static int lpfc_debugfs_enable = 0; 74static int lpfc_debugfs_enable = 1;
75module_param(lpfc_debugfs_enable, int, 0); 75module_param(lpfc_debugfs_enable, int, 0);
76MODULE_PARM_DESC(lpfc_debugfs_enable, "Enable debugfs services"); 76MODULE_PARM_DESC(lpfc_debugfs_enable, "Enable debugfs services");
77 77
@@ -113,7 +113,6 @@ struct lpfc_debug {
113}; 113};
114 114
115extern struct lpfc_hbq_init *lpfc_hbq_defs[]; 115extern struct lpfc_hbq_init *lpfc_hbq_defs[];
116extern int lpfc_sli_hbq_count(void);
117 116
118atomic_t lpfc_debugfs_seq_trc_cnt = ATOMIC_INIT(0); 117atomic_t lpfc_debugfs_seq_trc_cnt = ATOMIC_INIT(0);
119unsigned long lpfc_debugfs_start_time = 0L; 118unsigned long lpfc_debugfs_start_time = 0L;
@@ -233,8 +232,9 @@ lpfc_debugfs_hbqinfo_data(struct lpfc_hba *phba, char *buf, int size)
233 232
234 len += snprintf(buf+len, size-len, "HBQ %d Info\n", i); 233 len += snprintf(buf+len, size-len, "HBQ %d Info\n", i);
235 234
235 hbqs = &phba->hbqs[i];
236 posted = 0; 236 posted = 0;
237 list_for_each_entry(d_buf, &phba->hbq_buffer_list, list) 237 list_for_each_entry(d_buf, &hbqs->hbq_buffer_list, list)
238 posted++; 238 posted++;
239 239
240 hip = lpfc_hbq_defs[i]; 240 hip = lpfc_hbq_defs[i];
@@ -243,7 +243,6 @@ lpfc_debugfs_hbqinfo_data(struct lpfc_hba *phba, char *buf, int size)
243 hip->hbq_index, hip->profile, hip->rn, 243 hip->hbq_index, hip->profile, hip->rn,
244 hip->buffer_count, hip->init_count, hip->add_count, posted); 244 hip->buffer_count, hip->init_count, hip->add_count, posted);
245 245
246 hbqs = &phba->hbqs[i];
247 raw_index = phba->hbq_get[i]; 246 raw_index = phba->hbq_get[i];
248 getidx = le32_to_cpu(raw_index); 247 getidx = le32_to_cpu(raw_index);
249 len += snprintf(buf+len, size-len, 248 len += snprintf(buf+len, size-len,
@@ -251,7 +250,7 @@ lpfc_debugfs_hbqinfo_data(struct lpfc_hba *phba, char *buf, int size)
251 hbqs->entry_count, hbqs->hbqPutIdx, hbqs->next_hbqPutIdx, 250 hbqs->entry_count, hbqs->hbqPutIdx, hbqs->next_hbqPutIdx,
252 hbqs->local_hbqGetIdx, getidx); 251 hbqs->local_hbqGetIdx, getidx);
253 252
254 hbqe = (struct lpfc_hbq_entry *) phba->hbqslimp.virt; 253 hbqe = (struct lpfc_hbq_entry *) phba->hbqs[i].hbq_virt;
255 for (j=0; j<hbqs->entry_count; j++) { 254 for (j=0; j<hbqs->entry_count; j++) {
256 len += snprintf(buf+len, size-len, 255 len += snprintf(buf+len, size-len,
257 "%03d: %08x %04x %05x ", j, 256 "%03d: %08x %04x %05x ", j,
@@ -277,7 +276,7 @@ lpfc_debugfs_hbqinfo_data(struct lpfc_hba *phba, char *buf, int size)
277 } 276 }
278 277
279 /* Get the Buffer info for the posted buffer */ 278 /* Get the Buffer info for the posted buffer */
280 list_for_each_entry(d_buf, &phba->hbq_buffer_list, list) { 279 list_for_each_entry(d_buf, &hbqs->hbq_buffer_list, list) {
281 hbq_buf = container_of(d_buf, struct hbq_dmabuf, dbuf); 280 hbq_buf = container_of(d_buf, struct hbq_dmabuf, dbuf);
282 phys = ((uint64_t)hbq_buf->dbuf.phys & 0xffffffff); 281 phys = ((uint64_t)hbq_buf->dbuf.phys & 0xffffffff);
283 if (phys == hbqe->bde.addrLow) { 282 if (phys == hbqe->bde.addrLow) {