diff options
author | James Smart <James.Smart@Emulex.Com> | 2007-08-02 11:10:31 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.localdomain> | 2007-08-01 13:24:10 -0400 |
commit | 51ef4c26891a734bc8416b639ad460a8162926bc (patch) | |
tree | 8279e11bf1a0a3200e8aa9bb3d956345ef73533c /drivers/scsi/lpfc/lpfc_debugfs.c | |
parent | 78b2d852a88cd2a55e3ab632109de045d58b83e3 (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.c | 11 |
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 | */ |
74 | static int lpfc_debugfs_enable = 0; | 74 | static int lpfc_debugfs_enable = 1; |
75 | module_param(lpfc_debugfs_enable, int, 0); | 75 | module_param(lpfc_debugfs_enable, int, 0); |
76 | MODULE_PARM_DESC(lpfc_debugfs_enable, "Enable debugfs services"); | 76 | MODULE_PARM_DESC(lpfc_debugfs_enable, "Enable debugfs services"); |
77 | 77 | ||
@@ -113,7 +113,6 @@ struct lpfc_debug { | |||
113 | }; | 113 | }; |
114 | 114 | ||
115 | extern struct lpfc_hbq_init *lpfc_hbq_defs[]; | 115 | extern struct lpfc_hbq_init *lpfc_hbq_defs[]; |
116 | extern int lpfc_sli_hbq_count(void); | ||
117 | 116 | ||
118 | atomic_t lpfc_debugfs_seq_trc_cnt = ATOMIC_INIT(0); | 117 | atomic_t lpfc_debugfs_seq_trc_cnt = ATOMIC_INIT(0); |
119 | unsigned long lpfc_debugfs_start_time = 0L; | 118 | unsigned 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) { |