Commit 3edfb8b2 authored by Raghava Aditya Renukunta's avatar Raghava Aditya Renukunta Committed by Martin K. Petersen

scsi: aacraid: Untangle targets setup from report phy luns

Remove function call to process targets from the report phy luns function
and make it a function in its own right. This will help understand the
flow of the code.
Signed-off-by: default avatarRaghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent fc0fdd9a
...@@ -1799,14 +1799,16 @@ static int aac_issue_safw_bmic_identify(struct aac_dev *dev, ...@@ -1799,14 +1799,16 @@ static int aac_issue_safw_bmic_identify(struct aac_dev *dev,
* *
* Update our hba map with the information gathered from the FW * Update our hba map with the information gathered from the FW
*/ */
static void aac_set_safw_attr_all_targets(struct aac_dev *dev, static void aac_set_safw_attr_all_targets(struct aac_dev *dev, int rescan)
struct aac_ciss_phys_luns_resp *phys_luns, int rescan)
{ {
/* ok and extended reporting */ /* ok and extended reporting */
u32 lun_count, nexus; u32 lun_count, nexus;
u32 i, bus, target; u32 i, bus, target;
u8 expose_flag, attribs; u8 expose_flag, attribs;
u8 devtype; u8 devtype;
struct aac_ciss_phys_luns_resp *phys_luns;
phys_luns = dev->safw_phys_luns;
lun_count = ((phys_luns->list_length[0] << 24) lun_count = ((phys_luns->list_length[0] << 24)
+ (phys_luns->list_length[1] << 16) + (phys_luns->list_length[1] << 16)
...@@ -1852,6 +1854,12 @@ static void aac_set_safw_attr_all_targets(struct aac_dev *dev, ...@@ -1852,6 +1854,12 @@ static void aac_set_safw_attr_all_targets(struct aac_dev *dev,
} }
} }
static inline void aac_free_safw_ciss_luns(struct aac_dev *dev)
{
kfree(dev->safw_phys_luns);
dev->safw_phys_luns = NULL;
}
/** /**
* aac_get_safw_ciss_luns() Process topology change * aac_get_safw_ciss_luns() Process topology change
* @dev: aac_dev structure * @dev: aac_dev structure
...@@ -1872,7 +1880,7 @@ static int aac_get_safw_ciss_luns(struct aac_dev *dev, int rescan) ...@@ -1872,7 +1880,7 @@ static int aac_get_safw_ciss_luns(struct aac_dev *dev, int rescan)
(AAC_MAX_TARGETS - 1) * sizeof(struct _ciss_lun); (AAC_MAX_TARGETS - 1) * sizeof(struct _ciss_lun);
phys_luns = kmalloc(datasize, GFP_KERNEL); phys_luns = kmalloc(datasize, GFP_KERNEL);
if (phys_luns == NULL) if (phys_luns == NULL)
goto err_out; goto out;
memset(&srbu, 0, sizeof(struct aac_srb_unit)); memset(&srbu, 0, sizeof(struct aac_srb_unit));
...@@ -1885,22 +1893,36 @@ static int aac_get_safw_ciss_luns(struct aac_dev *dev, int rescan) ...@@ -1885,22 +1893,36 @@ static int aac_get_safw_ciss_luns(struct aac_dev *dev, int rescan)
rcode = aac_send_safw_bmic_cmd(dev, &srbu, phys_luns, datasize); rcode = aac_send_safw_bmic_cmd(dev, &srbu, phys_luns, datasize);
if (unlikely(rcode < 0)) if (unlikely(rcode < 0))
goto err_out; goto mem_free_all;
/* analyse data */ if (phys_luns->resp_flag != 2) {
if (rcode >= 0 && phys_luns->resp_flag == 2) { rcode = -ENOMSG;
/* ok and extended reporting */ goto mem_free_all;
aac_set_safw_attr_all_targets(dev, phys_luns, rescan);
} }
kfree(phys_luns); dev->safw_phys_luns = phys_luns;
err_out:
out:
return rcode; return rcode;
mem_free_all:
kfree(phys_luns);
goto out;
} }
static int aac_setup_safw_targets(struct aac_dev *dev, int rescan) static int aac_setup_safw_targets(struct aac_dev *dev, int rescan)
{ {
return aac_get_safw_ciss_luns(dev, rescan); int rcode = 0;
rcode = aac_get_safw_ciss_luns(dev, rescan);
if (unlikely(rcode < 0))
goto out;
aac_set_safw_attr_all_targets(dev, rescan);
aac_free_safw_ciss_luns(dev);
out:
return rcode;
} }
int aac_setup_safw_adapter(struct aac_dev *dev, int rescan) int aac_setup_safw_adapter(struct aac_dev *dev, int rescan)
......
...@@ -1671,6 +1671,7 @@ struct aac_dev ...@@ -1671,6 +1671,7 @@ struct aac_dev
struct msix_entry msixentry[AAC_MAX_MSIX]; struct msix_entry msixentry[AAC_MAX_MSIX];
struct aac_msix_ctx aac_msix[AAC_MAX_MSIX]; /* context */ struct aac_msix_ctx aac_msix[AAC_MAX_MSIX]; /* context */
struct aac_hba_map_info hba_map[AAC_MAX_BUSES][AAC_MAX_TARGETS]; struct aac_hba_map_info hba_map[AAC_MAX_BUSES][AAC_MAX_TARGETS];
struct aac_ciss_phys_luns_resp *safw_phys_luns;
u8 adapter_shutdown; u8 adapter_shutdown;
u32 handle_pci_error; u32 handle_pci_error;
}; };
......
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