* [PATCH RESEND 4/7] megaraid_sas : Online Firmware upgrade support for Extended VD feature
@ 2014-11-17 9:54 Sumit.Saxena
2014-11-21 13:51 ` Tomas Henzl
0 siblings, 1 reply; 2+ messages in thread
From: Sumit.Saxena @ 2014-11-17 9:54 UTC (permalink / raw)
To: linux-scsi; +Cc: martin.petersen, hch, jbottomley, kashyap.desai
In OCR(Online Controller Reset) path, driver sets adapter state to MEGASAS_HBA_OPERATIONAL before getting new RAID map.
There will be a small window where IO will come from OS with old RAID map.
This patch will update adapter state to MEGASAS_HBA_OPERATIONAL, only after driver has new RAID map to avoid
any IOs getting build using old RAID map.
Signed-off-by: Sumit Saxena <sumit.saxena@avagotech.com>
Signed-off-by: Kashyap Desai <kashyap.desai@avagotech.com>
---
drivers/scsi/megaraid/megaraid_sas.h | 3 +-
drivers/scsi/megaraid/megaraid_sas_base.c | 82 +++++++++++++++++++++++----
drivers/scsi/megaraid/megaraid_sas_fusion.c | 55 +++++-------------
drivers/scsi/megaraid/megaraid_sas_fusion.h | 2 -
4 files changed, 85 insertions(+), 57 deletions(-)
diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h
index 401f4a2..0d44d91 100644
--- a/drivers/scsi/megaraid/megaraid_sas.h
+++ b/drivers/scsi/megaraid/megaraid_sas.h
@@ -1931,8 +1931,7 @@ u16 get_updated_dev_handle(struct megasas_instance *instance,
struct LD_LOAD_BALANCE_INFO *lbInfo, struct IO_REQUEST_INFO *in_info);
void mr_update_load_balance_params(struct MR_DRV_RAID_MAP_ALL *map,
struct LD_LOAD_BALANCE_INFO *lbInfo);
-int megasas_get_ctrl_info(struct megasas_instance *instance,
- struct megasas_ctrl_info *ctrl_info);
+int megasas_get_ctrl_info(struct megasas_instance *instance);
int megasas_set_crash_dump_params(struct megasas_instance *instance,
u8 crash_buf_state);
void megasas_free_host_crash_buffer(struct megasas_instance *instance);
diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index 3781920..8262067 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -4033,25 +4033,83 @@ megasas_ld_list_query(struct megasas_instance *instance, u8 query_type)
return ret;
}
+/*
+ * megasas_update_ext_vd_details : Update details w.r.t Extended VD
+ * instance : Controller's instance
+*/
+static void megasas_update_ext_vd_details(struct megasas_instance *instance)
+{
+ struct fusion_context *fusion;
+ u32 old_map_sz;
+ u32 new_map_sz;
+
+ fusion = instance->ctrl_context;
+ /* For MFI based controllers return dummy success */
+ if (!fusion)
+ return;
+
+ instance->supportmax256vd =
+ instance->ctrl_info->adapterOperations3.supportMaxExtLDs;
+ /* Below is additional check to address future FW enhancement */
+ if (instance->ctrl_info->max_lds > 64)
+ instance->supportmax256vd = 1;
+
+ instance->drv_supported_vd_count = MEGASAS_MAX_LD_CHANNELS
+ * MEGASAS_MAX_DEV_PER_CHANNEL;
+ instance->drv_supported_pd_count = MEGASAS_MAX_PD_CHANNELS
+ * MEGASAS_MAX_DEV_PER_CHANNEL;
+ if (instance->supportmax256vd) {
+ instance->fw_supported_vd_count = MAX_LOGICAL_DRIVES_EXT;
+ instance->fw_supported_pd_count = MAX_PHYSICAL_DEVICES;
+ } else {
+ instance->fw_supported_vd_count = MAX_LOGICAL_DRIVES;
+ instance->fw_supported_pd_count = MAX_PHYSICAL_DEVICES;
+ }
+ dev_info(&instance->pdev->dev, "Firmware supports %d VD %d PD\n",
+ instance->fw_supported_vd_count,
+ instance->fw_supported_pd_count);
+ dev_info(&instance->pdev->dev, "Driver supports %d VD %d PD\n",
+ instance->drv_supported_vd_count,
+ instance->drv_supported_pd_count);
+
+ old_map_sz = sizeof(struct MR_FW_RAID_MAP) +
+ (sizeof(struct MR_LD_SPAN_MAP) *
+ (instance->fw_supported_vd_count - 1));
+ new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT);
+ fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP) +
+ (sizeof(struct MR_LD_SPAN_MAP) *
+ (instance->drv_supported_vd_count - 1));
+
+ fusion->max_map_sz = max(old_map_sz, new_map_sz);
+
+
+ if (instance->supportmax256vd)
+ fusion->current_map_sz = new_map_sz;
+ else
+ fusion->current_map_sz = old_map_sz;
+
+}
+
/**
* megasas_get_controller_info - Returns FW's controller structure
* @instance: Adapter soft state
- * @ctrl_info: Controller information structure
*
* Issues an internal command (DCMD) to get the FW's controller structure.
* This information is mainly used to find out the maximum IO transfer per
* command supported by the FW.
*/
int
-megasas_get_ctrl_info(struct megasas_instance *instance,
- struct megasas_ctrl_info *ctrl_info)
+megasas_get_ctrl_info(struct megasas_instance *instance)
{
int ret = 0;
struct megasas_cmd *cmd;
struct megasas_dcmd_frame *dcmd;
struct megasas_ctrl_info *ci;
+ struct megasas_ctrl_info *ctrl_info;
dma_addr_t ci_h = 0;
+ ctrl_info = instance->ctrl_info;
+
cmd = megasas_get_cmd(instance);
if (!cmd) {
@@ -4091,8 +4149,13 @@ megasas_get_ctrl_info(struct megasas_instance *instance,
else
ret = megasas_issue_polled(instance, cmd);
- if (!ret)
+ if (!ret) {
memcpy(ctrl_info, ci, sizeof(struct megasas_ctrl_info));
+ le32_to_cpus((u32 *)&ctrl_info->properties.OnOffProperties);
+ le32_to_cpus((u32 *)&ctrl_info->adapterOperations2);
+ le32_to_cpus((u32 *)&ctrl_info->adapterOperations3);
+ megasas_update_ext_vd_details(instance);
+ }
pci_free_consistent(instance->pdev, sizeof(struct megasas_ctrl_info),
ci, ci_h);
@@ -4294,7 +4357,7 @@ megasas_init_adapter_mfi(struct megasas_instance *instance)
if (megasas_issue_init_mfi(instance))
goto fail_fw_init;
- if (megasas_get_ctrl_info(instance, instance->ctrl_info)) {
+ if (megasas_get_ctrl_info(instance)) {
dev_err(&instance->pdev->dev, "(%d): Could get controller info "
"Fail from %s %d\n", instance->unique_id,
__func__, __LINE__);
@@ -4532,12 +4595,8 @@ static int megasas_init_fw(struct megasas_instance *instance)
dev_info(&instance->pdev->dev,
"Controller type: iMR\n");
}
- /* OnOffProperties are converted into CPU arch*/
- le32_to_cpus((u32 *)&ctrl_info->properties.OnOffProperties);
instance->disableOnlineCtrlReset =
ctrl_info->properties.OnOffProperties.disableOnlineCtrlReset;
- /* adapterOperations2 are converted into CPU arch*/
- le32_to_cpus((u32 *)&ctrl_info->adapterOperations2);
instance->mpio = ctrl_info->adapterOperations2.mpio;
instance->UnevenSpanSupport =
ctrl_info->adapterOperations2.supportUnevenSpans;
@@ -4567,7 +4626,6 @@ static int megasas_init_fw(struct megasas_instance *instance)
"requestorId %d\n", instance->requestorId);
}
- le32_to_cpus((u32 *)&ctrl_info->adapterOperations3);
instance->crash_dump_fw_support =
ctrl_info->adapterOperations3.supportCrashDump;
instance->crash_dump_drv_support =
@@ -4592,8 +4650,6 @@ static int megasas_init_fw(struct megasas_instance *instance)
if (tmp_sectors && (instance->max_sectors_per_req > tmp_sectors))
instance->max_sectors_per_req = tmp_sectors;
- kfree(ctrl_info);
-
/* Check for valid throttlequeuedepth module parameter */
if (instance->is_imr) {
if (throttlequeuedepth > (instance->max_fw_cmds -
@@ -5084,6 +5140,8 @@ static int megasas_probe_one(struct pci_dev *pdev,
goto fail_alloc_dma_buf;
}
fusion = instance->ctrl_context;
+ memset(fusion, 0,
+ ((1 << PAGE_SHIFT) << instance->ctrl_context_pages));
INIT_LIST_HEAD(&fusion->cmd_pool);
spin_lock_init(&fusion->mpt_pool_lock);
memset(fusion->load_balance_info, 0,
diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
index 92f3354..98dfc1d 100644
--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
+++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
@@ -1067,48 +1067,16 @@ megasas_init_adapter_fusion(struct megasas_instance *instance)
goto fail_ioc_init;
megasas_display_intel_branding(instance);
- if (megasas_get_ctrl_info(instance, instance->ctrl_info)) {
+ if (megasas_get_ctrl_info(instance)) {
dev_err(&instance->pdev->dev,
"Could not get controller info. Fail from %s %d\n",
__func__, __LINE__);
goto fail_ioc_init;
}
- instance->supportmax256vd =
- instance->ctrl_info->adapterOperations3.supportMaxExtLDs;
- /* Below is additional check to address future FW enhancement */
- if (instance->ctrl_info->max_lds > 64)
- instance->supportmax256vd = 1;
- instance->drv_supported_vd_count = MEGASAS_MAX_LD_CHANNELS
- * MEGASAS_MAX_DEV_PER_CHANNEL;
- instance->drv_supported_pd_count = MEGASAS_MAX_PD_CHANNELS
- * MEGASAS_MAX_DEV_PER_CHANNEL;
- if (instance->supportmax256vd) {
- instance->fw_supported_vd_count = MAX_LOGICAL_DRIVES_EXT;
- instance->fw_supported_pd_count = MAX_PHYSICAL_DEVICES;
- } else {
- instance->fw_supported_vd_count = MAX_LOGICAL_DRIVES;
- instance->fw_supported_pd_count = MAX_PHYSICAL_DEVICES;
- }
- dev_info(&instance->pdev->dev, "Firmware supports %d VDs %d PDs\n"
- "Driver supports %d VDs %d PDs\n",
- instance->fw_supported_vd_count,
- instance->fw_supported_pd_count,
- instance->drv_supported_vd_count,
- instance->drv_supported_pd_count);
-
instance->flag_ieee = 1;
fusion->fast_path_io = 0;
- fusion->old_map_sz =
- sizeof(struct MR_FW_RAID_MAP) + (sizeof(struct MR_LD_SPAN_MAP) *
- (instance->fw_supported_vd_count - 1));
- fusion->new_map_sz =
- sizeof(struct MR_FW_RAID_MAP_EXT);
- fusion->drv_map_sz =
- sizeof(struct MR_DRV_RAID_MAP) + (sizeof(struct MR_LD_SPAN_MAP) *
- (instance->drv_supported_vd_count - 1));
-
fusion->drv_map_pages = get_order(fusion->drv_map_sz);
for (i = 0; i < 2; i++) {
fusion->ld_map[i] = NULL;
@@ -1123,16 +1091,10 @@ megasas_init_adapter_fusion(struct megasas_instance *instance)
fusion->drv_map_pages);
goto fail_ioc_init;
}
+ memset(fusion->ld_drv_map[i], 0,
+ ((1 << PAGE_SHIFT) << fusion->drv_map_pages));
}
- fusion->max_map_sz = max(fusion->old_map_sz, fusion->new_map_sz);
-
- if (instance->supportmax256vd)
- fusion->current_map_sz = fusion->new_map_sz;
- else
- fusion->current_map_sz = fusion->old_map_sz;
-
-
for (i = 0; i < 2; i++) {
fusion->ld_map[i] = dma_alloc_coherent(&instance->pdev->dev,
fusion->max_map_sz,
@@ -2387,6 +2349,8 @@ megasas_alloc_host_crash_buffer(struct megasas_instance *instance)
"memory allocation failed at index %d\n", i);
break;
}
+ memset(instance->crash_buf[i], 0,
+ ((1 << PAGE_SHIFT) << instance->crash_buf_pages));
}
instance->drv_buf_alloc = i;
}
@@ -2844,6 +2808,15 @@ int megasas_reset_fusion(struct Scsi_Host *shost, int iotimeout)
instance->instancet->enable_intr(instance);
instance->adprecovery = MEGASAS_HBA_OPERATIONAL;
+ if (megasas_get_ctrl_info(instance)) {
+ dev_info(&instance->pdev->dev,
+ "Failed from %s %d\n",
+ __func__, __LINE__);
+ instance->adprecovery =
+ MEGASAS_HW_CRITICAL_ERROR;
+ megaraid_sas_kill_hba(instance);
+ retval = FAILED;
+ }
/* Reset load balance info */
memset(fusion->load_balance_info, 0,
sizeof(struct LD_LOAD_BALANCE_INFO)
diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.h b/drivers/scsi/megaraid/megaraid_sas_fusion.h
index 92ecd39..5ab7dae 100644
--- a/drivers/scsi/megaraid/megaraid_sas_fusion.h
+++ b/drivers/scsi/megaraid/megaraid_sas_fusion.h
@@ -836,8 +836,6 @@ struct fusion_context {
u32 max_map_sz;
u32 current_map_sz;
- u32 old_map_sz;
- u32 new_map_sz;
u32 drv_map_sz;
u32 drv_map_pages;
u8 fast_path_io;
--
1.7.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH RESEND 4/7] megaraid_sas : Online Firmware upgrade support for Extended VD feature
2014-11-17 9:54 [PATCH RESEND 4/7] megaraid_sas : Online Firmware upgrade support for Extended VD feature Sumit.Saxena
@ 2014-11-21 13:51 ` Tomas Henzl
0 siblings, 0 replies; 2+ messages in thread
From: Tomas Henzl @ 2014-11-21 13:51 UTC (permalink / raw)
To: Sumit.Saxena, linux-scsi; +Cc: martin.petersen, hch, jbottomley, kashyap.desai
On 11/17/2014 10:54 AM, Sumit.Saxena@avagotech.com wrote:
> In OCR(Online Controller Reset) path, driver sets adapter state to MEGASAS_HBA_OPERATIONAL before getting new RAID map.
> There will be a small window where IO will come from OS with old RAID map.
> This patch will update adapter state to MEGASAS_HBA_OPERATIONAL, only after driver has new RAID map to avoid
> any IOs getting build using old RAID map.
>
> Signed-off-by: Sumit Saxena <sumit.saxena@avagotech.com>
> Signed-off-by: Kashyap Desai <kashyap.desai@avagotech.com>
> ---
> drivers/scsi/megaraid/megaraid_sas.h | 3 +-
> drivers/scsi/megaraid/megaraid_sas_base.c | 82 +++++++++++++++++++++++----
> drivers/scsi/megaraid/megaraid_sas_fusion.c | 55 +++++-------------
> drivers/scsi/megaraid/megaraid_sas_fusion.h | 2 -
> 4 files changed, 85 insertions(+), 57 deletions(-)
>
> diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h
> index 401f4a2..0d44d91 100644
> --- a/drivers/scsi/megaraid/megaraid_sas.h
> +++ b/drivers/scsi/megaraid/megaraid_sas.h
> @@ -1931,8 +1931,7 @@ u16 get_updated_dev_handle(struct megasas_instance *instance,
> struct LD_LOAD_BALANCE_INFO *lbInfo, struct IO_REQUEST_INFO *in_info);
> void mr_update_load_balance_params(struct MR_DRV_RAID_MAP_ALL *map,
> struct LD_LOAD_BALANCE_INFO *lbInfo);
> -int megasas_get_ctrl_info(struct megasas_instance *instance,
> - struct megasas_ctrl_info *ctrl_info);
> +int megasas_get_ctrl_info(struct megasas_instance *instance);
> int megasas_set_crash_dump_params(struct megasas_instance *instance,
> u8 crash_buf_state);
> void megasas_free_host_crash_buffer(struct megasas_instance *instance);
> diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
> index 3781920..8262067 100644
> --- a/drivers/scsi/megaraid/megaraid_sas_base.c
> +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
> @@ -4033,25 +4033,83 @@ megasas_ld_list_query(struct megasas_instance *instance, u8 query_type)
> return ret;
> }
>
> +/*
> + * megasas_update_ext_vd_details : Update details w.r.t Extended VD
> + * instance : Controller's instance
> +*/
> +static void megasas_update_ext_vd_details(struct megasas_instance *instance)
> +{
> + struct fusion_context *fusion;
> + u32 old_map_sz;
> + u32 new_map_sz;
> +
> + fusion = instance->ctrl_context;
> + /* For MFI based controllers return dummy success */
> + if (!fusion)
> + return;
> +
> + instance->supportmax256vd =
> + instance->ctrl_info->adapterOperations3.supportMaxExtLDs;
> + /* Below is additional check to address future FW enhancement */
> + if (instance->ctrl_info->max_lds > 64)
> + instance->supportmax256vd = 1;
> +
> + instance->drv_supported_vd_count = MEGASAS_MAX_LD_CHANNELS
> + * MEGASAS_MAX_DEV_PER_CHANNEL;
> + instance->drv_supported_pd_count = MEGASAS_MAX_PD_CHANNELS
> + * MEGASAS_MAX_DEV_PER_CHANNEL;
> + if (instance->supportmax256vd) {
> + instance->fw_supported_vd_count = MAX_LOGICAL_DRIVES_EXT;
> + instance->fw_supported_pd_count = MAX_PHYSICAL_DEVICES;
> + } else {
> + instance->fw_supported_vd_count = MAX_LOGICAL_DRIVES;
> + instance->fw_supported_pd_count = MAX_PHYSICAL_DEVICES;
> + }
> + dev_info(&instance->pdev->dev, "Firmware supports %d VD %d PD\n",
> + instance->fw_supported_vd_count,
> + instance->fw_supported_pd_count);
> + dev_info(&instance->pdev->dev, "Driver supports %d VD %d PD\n",
> + instance->drv_supported_vd_count,
> + instance->drv_supported_pd_count);
> +
> + old_map_sz = sizeof(struct MR_FW_RAID_MAP) +
> + (sizeof(struct MR_LD_SPAN_MAP) *
> + (instance->fw_supported_vd_count - 1));
> + new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT);
> + fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP) +
> + (sizeof(struct MR_LD_SPAN_MAP) *
> + (instance->drv_supported_vd_count - 1));
> +
> + fusion->max_map_sz = max(old_map_sz, new_map_sz);
> +
> +
> + if (instance->supportmax256vd)
> + fusion->current_map_sz = new_map_sz;
> + else
> + fusion->current_map_sz = old_map_sz;
> +
> +}
> +
> /**
> * megasas_get_controller_info - Returns FW's controller structure
> * @instance: Adapter soft state
> - * @ctrl_info: Controller information structure
> *
> * Issues an internal command (DCMD) to get the FW's controller structure.
> * This information is mainly used to find out the maximum IO transfer per
> * command supported by the FW.
> */
> int
> -megasas_get_ctrl_info(struct megasas_instance *instance,
> - struct megasas_ctrl_info *ctrl_info)
> +megasas_get_ctrl_info(struct megasas_instance *instance)
> {
> int ret = 0;
> struct megasas_cmd *cmd;
> struct megasas_dcmd_frame *dcmd;
> struct megasas_ctrl_info *ci;
> + struct megasas_ctrl_info *ctrl_info;
> dma_addr_t ci_h = 0;
>
> + ctrl_info = instance->ctrl_info;
> +
> cmd = megasas_get_cmd(instance);
>
> if (!cmd) {
> @@ -4091,8 +4149,13 @@ megasas_get_ctrl_info(struct megasas_instance *instance,
> else
> ret = megasas_issue_polled(instance, cmd);
>
> - if (!ret)
> + if (!ret) {
> memcpy(ctrl_info, ci, sizeof(struct megasas_ctrl_info));
> + le32_to_cpus((u32 *)&ctrl_info->properties.OnOffProperties);
> + le32_to_cpus((u32 *)&ctrl_info->adapterOperations2);
> + le32_to_cpus((u32 *)&ctrl_info->adapterOperations3);
> + megasas_update_ext_vd_details(instance);
> + }
>
> pci_free_consistent(instance->pdev, sizeof(struct megasas_ctrl_info),
> ci, ci_h);
> @@ -4294,7 +4357,7 @@ megasas_init_adapter_mfi(struct megasas_instance *instance)
> if (megasas_issue_init_mfi(instance))
> goto fail_fw_init;
>
> - if (megasas_get_ctrl_info(instance, instance->ctrl_info)) {
> + if (megasas_get_ctrl_info(instance)) {
> dev_err(&instance->pdev->dev, "(%d): Could get controller info "
> "Fail from %s %d\n", instance->unique_id,
> __func__, __LINE__);
> @@ -4532,12 +4595,8 @@ static int megasas_init_fw(struct megasas_instance *instance)
> dev_info(&instance->pdev->dev,
> "Controller type: iMR\n");
> }
> - /* OnOffProperties are converted into CPU arch*/
> - le32_to_cpus((u32 *)&ctrl_info->properties.OnOffProperties);
> instance->disableOnlineCtrlReset =
> ctrl_info->properties.OnOffProperties.disableOnlineCtrlReset;
> - /* adapterOperations2 are converted into CPU arch*/
> - le32_to_cpus((u32 *)&ctrl_info->adapterOperations2);
> instance->mpio = ctrl_info->adapterOperations2.mpio;
> instance->UnevenSpanSupport =
> ctrl_info->adapterOperations2.supportUnevenSpans;
> @@ -4567,7 +4626,6 @@ static int megasas_init_fw(struct megasas_instance *instance)
> "requestorId %d\n", instance->requestorId);
> }
>
> - le32_to_cpus((u32 *)&ctrl_info->adapterOperations3);
> instance->crash_dump_fw_support =
> ctrl_info->adapterOperations3.supportCrashDump;
> instance->crash_dump_drv_support =
> @@ -4592,8 +4650,6 @@ static int megasas_init_fw(struct megasas_instance *instance)
> if (tmp_sectors && (instance->max_sectors_per_req > tmp_sectors))
> instance->max_sectors_per_req = tmp_sectors;
>
> - kfree(ctrl_info);
> -
> /* Check for valid throttlequeuedepth module parameter */
> if (instance->is_imr) {
> if (throttlequeuedepth > (instance->max_fw_cmds -
> @@ -5084,6 +5140,8 @@ static int megasas_probe_one(struct pci_dev *pdev,
> goto fail_alloc_dma_buf;
> }
> fusion = instance->ctrl_context;
> + memset(fusion, 0,
> + ((1 << PAGE_SHIFT) << instance->ctrl_context_pages));
> INIT_LIST_HEAD(&fusion->cmd_pool);
> spin_lock_init(&fusion->mpt_pool_lock);
> memset(fusion->load_balance_info, 0,
> diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
> index 92f3354..98dfc1d 100644
> --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
> +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
> @@ -1067,48 +1067,16 @@ megasas_init_adapter_fusion(struct megasas_instance *instance)
> goto fail_ioc_init;
>
> megasas_display_intel_branding(instance);
> - if (megasas_get_ctrl_info(instance, instance->ctrl_info)) {
> + if (megasas_get_ctrl_info(instance)) {
> dev_err(&instance->pdev->dev,
> "Could not get controller info. Fail from %s %d\n",
> __func__, __LINE__);
> goto fail_ioc_init;
> }
>
> - instance->supportmax256vd =
> - instance->ctrl_info->adapterOperations3.supportMaxExtLDs;
> - /* Below is additional check to address future FW enhancement */
> - if (instance->ctrl_info->max_lds > 64)
> - instance->supportmax256vd = 1;
> - instance->drv_supported_vd_count = MEGASAS_MAX_LD_CHANNELS
> - * MEGASAS_MAX_DEV_PER_CHANNEL;
> - instance->drv_supported_pd_count = MEGASAS_MAX_PD_CHANNELS
> - * MEGASAS_MAX_DEV_PER_CHANNEL;
> - if (instance->supportmax256vd) {
> - instance->fw_supported_vd_count = MAX_LOGICAL_DRIVES_EXT;
> - instance->fw_supported_pd_count = MAX_PHYSICAL_DEVICES;
> - } else {
> - instance->fw_supported_vd_count = MAX_LOGICAL_DRIVES;
> - instance->fw_supported_pd_count = MAX_PHYSICAL_DEVICES;
> - }
> - dev_info(&instance->pdev->dev, "Firmware supports %d VDs %d PDs\n"
> - "Driver supports %d VDs %d PDs\n",
> - instance->fw_supported_vd_count,
> - instance->fw_supported_pd_count,
> - instance->drv_supported_vd_count,
> - instance->drv_supported_pd_count);
> -
> instance->flag_ieee = 1;
> fusion->fast_path_io = 0;
>
> - fusion->old_map_sz =
> - sizeof(struct MR_FW_RAID_MAP) + (sizeof(struct MR_LD_SPAN_MAP) *
> - (instance->fw_supported_vd_count - 1));
> - fusion->new_map_sz =
> - sizeof(struct MR_FW_RAID_MAP_EXT);
> - fusion->drv_map_sz =
> - sizeof(struct MR_DRV_RAID_MAP) + (sizeof(struct MR_LD_SPAN_MAP) *
> - (instance->drv_supported_vd_count - 1));
> -
> fusion->drv_map_pages = get_order(fusion->drv_map_sz);
> for (i = 0; i < 2; i++) {
> fusion->ld_map[i] = NULL;
> @@ -1123,16 +1091,10 @@ megasas_init_adapter_fusion(struct megasas_instance *instance)
> fusion->drv_map_pages);
> goto fail_ioc_init;
> }
> + memset(fusion->ld_drv_map[i], 0,
> + ((1 << PAGE_SHIFT) << fusion->drv_map_pages));
> }
>
> - fusion->max_map_sz = max(fusion->old_map_sz, fusion->new_map_sz);
> -
> - if (instance->supportmax256vd)
> - fusion->current_map_sz = fusion->new_map_sz;
> - else
> - fusion->current_map_sz = fusion->old_map_sz;
> -
> -
> for (i = 0; i < 2; i++) {
> fusion->ld_map[i] = dma_alloc_coherent(&instance->pdev->dev,
> fusion->max_map_sz,
> @@ -2387,6 +2349,8 @@ megasas_alloc_host_crash_buffer(struct megasas_instance *instance)
> "memory allocation failed at index %d\n", i);
> break;
> }
> + memset(instance->crash_buf[i], 0,
> + ((1 << PAGE_SHIFT) << instance->crash_buf_pages));
> }
> instance->drv_buf_alloc = i;
> }
> @@ -2844,6 +2808,15 @@ int megasas_reset_fusion(struct Scsi_Host *shost, int iotimeout)
> instance->instancet->enable_intr(instance);
> instance->adprecovery = MEGASAS_HBA_OPERATIONAL;
>
> + if (megasas_get_ctrl_info(instance)) {
> + dev_info(&instance->pdev->dev,
> + "Failed from %s %d\n",
> + __func__, __LINE__);
> + instance->adprecovery =
> + MEGASAS_HW_CRITICAL_ERROR;
> + megaraid_sas_kill_hba(instance);
> + retval = FAILED;
> + }
> /* Reset load balance info */
> memset(fusion->load_balance_info, 0,
> sizeof(struct LD_LOAD_BALANCE_INFO)
> diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.h b/drivers/scsi/megaraid/megaraid_sas_fusion.h
> index 92ecd39..5ab7dae 100644
> --- a/drivers/scsi/megaraid/megaraid_sas_fusion.h
> +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.h
> @@ -836,8 +836,6 @@ struct fusion_context {
>
> u32 max_map_sz;
> u32 current_map_sz;
> - u32 old_map_sz;
> - u32 new_map_sz;
> u32 drv_map_sz;
> u32 drv_map_pages;
> u8 fast_path_io;
Reviewed-by: Tomas Henzl <thenzl@redhat.com>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-11-21 13:52 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-17 9:54 [PATCH RESEND 4/7] megaraid_sas : Online Firmware upgrade support for Extended VD feature Sumit.Saxena
2014-11-21 13:51 ` Tomas Henzl
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).