Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 367412
b: refs/heads/master
c: 039acc1
h: refs/heads/master
v: v3
  • Loading branch information
Adheer Chandravanshi authored and James Bottomley committed Apr 11, 2013
1 parent 14cfd9a commit d3b6598
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 22 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4eeb587e4b62749c544e0e3bf62c0934d1b3852b
refs/heads/master: 039acc1e70ba354a430023c3c997f680d7c098b9
7 changes: 5 additions & 2 deletions trunk/drivers/scsi/qla4xxx/ql4_mbx.c
Original file line number Diff line number Diff line change
Expand Up @@ -1421,14 +1421,15 @@ int qla4xxx_flashdb_by_index(struct scsi_qla_host *ha,
struct dev_db_entry *fw_ddb_entry,
dma_addr_t fw_ddb_entry_dma, uint16_t ddb_index)
{
uint32_t dev_db_start_offset = FLASH_OFFSET_DB_INFO;
uint32_t dev_db_start_offset;
uint32_t dev_db_end_offset;
int status = QLA_ERROR;

memset(fw_ddb_entry, 0, sizeof(*fw_ddb_entry));

if (is_qla40XX(ha)) {
dev_db_start_offset = FLASH_OFFSET_DB_INFO;
dev_db_end_offset = FLASH_OFFSET_DB_END;
} else {
dev_db_start_offset = FLASH_RAW_ACCESS_ADDR +
(ha->hw.flt_region_ddb << 2);
Expand All @@ -1437,9 +1438,11 @@ int qla4xxx_flashdb_by_index(struct scsi_qla_host *ha,
*/
if (ha->port_num == 1)
dev_db_start_offset += (ha->hw.flt_ddb_size / 2);

dev_db_end_offset = dev_db_start_offset +
(ha->hw.flt_ddb_size / 2);
}

dev_db_end_offset = dev_db_start_offset + (ha->hw.flt_ddb_size / 2);
dev_db_start_offset += (ddb_index * sizeof(*fw_ddb_entry));

if (dev_db_start_offset > dev_db_end_offset) {
Expand Down
57 changes: 38 additions & 19 deletions trunk/drivers/scsi/qla4xxx/ql4_os.c
Original file line number Diff line number Diff line change
Expand Up @@ -6582,6 +6582,8 @@ static int qla4xxx_sysfs_ddb_delete(struct iscsi_bus_flash_session *fnode_sess)
struct dev_db_entry *fw_ddb_entry = NULL;
dma_addr_t fw_ddb_entry_dma;
uint16_t *ddb_cookie = NULL;
size_t ddb_size;
void *pddb = NULL;
int target_id;
int rc = 0;

Expand All @@ -6601,18 +6603,12 @@ static int qla4xxx_sysfs_ddb_delete(struct iscsi_bus_flash_session *fnode_sess)
if (fnode_sess->flash_state == DEV_DB_NON_PERSISTENT)
goto sysfs_ddb_del;

ddb_cookie = dma_alloc_coherent(&ha->pdev->dev, sizeof(*ddb_cookie),
&fw_ddb_entry_dma, GFP_KERNEL);
if (!ddb_cookie) {
rc = -ENOMEM;
DEBUG2(ql4_printk(KERN_ERR, ha,
"%s: Unable to allocate dma buffer\n",
__func__));
goto exit_ddb_del;
}

if (is_qla40XX(ha)) {
dev_db_start_offset = FLASH_OFFSET_DB_INFO;
dev_db_end_offset = FLASH_OFFSET_DB_END;
dev_db_start_offset += (fnode_sess->target_id *
sizeof(*fw_ddb_entry));
ddb_size = sizeof(*fw_ddb_entry);
} else {
dev_db_start_offset = FLASH_RAW_ACCESS_ADDR +
(ha->hw.flt_region_ddb << 2);
Expand All @@ -6621,12 +6617,17 @@ static int qla4xxx_sysfs_ddb_delete(struct iscsi_bus_flash_session *fnode_sess)
*/
if (ha->port_num == 1)
dev_db_start_offset += (ha->hw.flt_ddb_size / 2);
}

dev_db_end_offset = dev_db_start_offset + (ha->hw.flt_ddb_size / 2);
dev_db_start_offset += (fnode_sess->target_id * sizeof(*fw_ddb_entry));
dev_db_start_offset += (void *)&(fw_ddb_entry->cookie) -
(void *)fw_ddb_entry;
dev_db_end_offset = dev_db_start_offset +
(ha->hw.flt_ddb_size / 2);

dev_db_start_offset += (fnode_sess->target_id *
sizeof(*fw_ddb_entry));
dev_db_start_offset += (void *)&(fw_ddb_entry->cookie) -
(void *)fw_ddb_entry;

ddb_size = sizeof(*ddb_cookie);
}

DEBUG2(ql4_printk(KERN_ERR, ha, "%s: start offset=%u, end offset=%u\n",
__func__, dev_db_start_offset, dev_db_end_offset));
Expand All @@ -6638,10 +6639,28 @@ static int qla4xxx_sysfs_ddb_delete(struct iscsi_bus_flash_session *fnode_sess)
goto exit_ddb_del;
}

pddb = dma_alloc_coherent(&ha->pdev->dev, ddb_size,
&fw_ddb_entry_dma, GFP_KERNEL);
if (!pddb) {
rc = -ENOMEM;
DEBUG2(ql4_printk(KERN_ERR, ha,
"%s: Unable to allocate dma buffer\n",
__func__));
goto exit_ddb_del;
}

if (is_qla40XX(ha)) {
fw_ddb_entry = pddb;
memset(fw_ddb_entry, 0, ddb_size);
ddb_cookie = &fw_ddb_entry->cookie;
} else {
ddb_cookie = pddb;
}

/* invalidate the cookie */
*ddb_cookie = 0xFFEE;
qla4xxx_set_flash(ha, fw_ddb_entry_dma, dev_db_start_offset,
sizeof(*ddb_cookie), FLASH_OPT_RMW_COMMIT);
ddb_size, FLASH_OPT_RMW_COMMIT);

sysfs_ddb_del:
target_id = fnode_sess->target_id;
Expand All @@ -6650,9 +6669,9 @@ static int qla4xxx_sysfs_ddb_delete(struct iscsi_bus_flash_session *fnode_sess)
"%s: session and conn entries for flashnode %u of host %lu deleted\n",
__func__, target_id, ha->host_no);
exit_ddb_del:
if (ddb_cookie)
dma_free_coherent(&ha->pdev->dev, sizeof(*ddb_cookie),
ddb_cookie, fw_ddb_entry_dma);
if (pddb)
dma_free_coherent(&ha->pdev->dev, ddb_size, pddb,
fw_ddb_entry_dma);
return rc;
}

Expand Down

0 comments on commit d3b6598

Please sign in to comment.