Commit b051cc66 authored by Shivasharan S's avatar Shivasharan S Committed by Martin K. Petersen

scsi: megaraid_sas: Return the DCMD status from megasas_get_seq_num

In megasas_get_seq_num, the status of the DCMD fired to FW is not
returned, it always returns success.  We could end up registering AEN
request with incorrect sequence number if the DCMD failed.  Return the
DCMD status back to caller.  This was discovered during code review and
very rare to see issue in field to see AEN request failed bt FW.
Signed-off-by: default avatarShivasharan S <shivasharan.srikanteshwara@broadcom.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent cb51efeb
...@@ -5581,6 +5581,7 @@ megasas_get_seq_num(struct megasas_instance *instance, ...@@ -5581,6 +5581,7 @@ megasas_get_seq_num(struct megasas_instance *instance,
struct megasas_dcmd_frame *dcmd; struct megasas_dcmd_frame *dcmd;
struct megasas_evt_log_info *el_info; struct megasas_evt_log_info *el_info;
dma_addr_t el_info_h = 0; dma_addr_t el_info_h = 0;
int ret;
cmd = megasas_get_cmd(instance); cmd = megasas_get_cmd(instance);
...@@ -5613,26 +5614,29 @@ megasas_get_seq_num(struct megasas_instance *instance, ...@@ -5613,26 +5614,29 @@ megasas_get_seq_num(struct megasas_instance *instance,
megasas_set_dma_settings(instance, dcmd, el_info_h, megasas_set_dma_settings(instance, dcmd, el_info_h,
sizeof(struct megasas_evt_log_info)); sizeof(struct megasas_evt_log_info));
if (megasas_issue_blocked_cmd(instance, cmd, MFI_IO_TIMEOUT_SECS) == ret = megasas_issue_blocked_cmd(instance, cmd, MFI_IO_TIMEOUT_SECS);
DCMD_SUCCESS) { if (ret != DCMD_SUCCESS) {
/* dev_err(&instance->pdev->dev, "Failed from %s %d\n",
* Copy the data back into callers buffer __func__, __LINE__);
*/ goto dcmd_failed;
eli->newest_seq_num = el_info->newest_seq_num; }
eli->oldest_seq_num = el_info->oldest_seq_num;
eli->clear_seq_num = el_info->clear_seq_num; /*
eli->shutdown_seq_num = el_info->shutdown_seq_num; * Copy the data back into callers buffer
eli->boot_seq_num = el_info->boot_seq_num; */
} else eli->newest_seq_num = el_info->newest_seq_num;
dev_err(&instance->pdev->dev, "DCMD failed " eli->oldest_seq_num = el_info->oldest_seq_num;
"from %s\n", __func__); eli->clear_seq_num = el_info->clear_seq_num;
eli->shutdown_seq_num = el_info->shutdown_seq_num;
eli->boot_seq_num = el_info->boot_seq_num;
dcmd_failed:
pci_free_consistent(instance->pdev, sizeof(struct megasas_evt_log_info), pci_free_consistent(instance->pdev, sizeof(struct megasas_evt_log_info),
el_info, el_info_h); el_info, el_info_h);
megasas_return_cmd(instance, cmd); megasas_return_cmd(instance, cmd);
return 0; return ret;
} }
/** /**
......
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