Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 271113
b: refs/heads/master
c: 166dd20
h: refs/heads/master
i:
  271111: 8796c3b
v: v3
  • Loading branch information
Lalit Chandivade authored and James Bottomley committed Oct 16, 2011
1 parent 1d6afb2 commit 14019ae
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 28deb45cea848e8389530b17c987339b62fea459
refs/heads/master: 166dd20d794e7885b23c8d5fc533949ed82cc337
40 changes: 40 additions & 0 deletions trunk/drivers/scsi/qla4xxx/ql4_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -765,6 +765,44 @@ int qla4xxx_start_firmware(struct scsi_qla_host *ha)
}
return status;
}
/**
* qla4xxx_free_ddb_index - Free DDBs reserved by firmware
* @ha: pointer to adapter structure
*
* Since firmware is not running in autoconnect mode the DDB indices should
* be freed so that when login happens from user space there are free DDB
* indices available.
**/
static void qla4xxx_free_ddb_index(struct scsi_qla_host *ha)
{
int max_ddbs;
int ret;
uint32_t idx = 0, next_idx = 0;
uint32_t state = 0, conn_err = 0;

max_ddbs = is_qla40XX(ha) ? MAX_PRST_DEV_DB_ENTRIES :
MAX_DEV_DB_ENTRIES;

for (idx = 0; idx < max_ddbs; idx = next_idx) {
ret = qla4xxx_get_fwddb_entry(ha, idx, NULL, 0, NULL,
&next_idx, &state, &conn_err,
NULL, NULL);
if (ret == QLA_ERROR)
continue;
if (state == DDB_DS_NO_CONNECTION_ACTIVE ||
state == DDB_DS_SESSION_FAILED) {
DEBUG2(ql4_printk(KERN_INFO, ha,
"Freeing DDB index = 0x%x\n", idx));
ret = qla4xxx_clear_ddb_entry(ha, idx);
if (ret == QLA_ERROR)
ql4_printk(KERN_ERR, ha,
"Unable to clear DDB index = "
"0x%x\n", idx);
}
if (next_idx == 0)
break;
}
}


/**
Expand Down Expand Up @@ -802,6 +840,8 @@ int qla4xxx_initialize_adapter(struct scsi_qla_host *ha)
if (status == QLA_ERROR)
goto exit_init_hba;

qla4xxx_free_ddb_index(ha);

set_bit(AF_ONLINE, &ha->flags);
exit_init_hba:
if (is_qla8022(ha) && (status == QLA_ERROR)) {
Expand Down

0 comments on commit 14019ae

Please sign in to comment.