[PATCH 2/2] scsi: megaraid_sas: Add megasas_dcmd_timeout helper

From: mengfanhui
Date: Thu May 30 2024 - 05:46:18 EST


DCMD timeout is handled in many places, it makes sense to
add a hepler to handle it. This patch adds a new helper
named megasas_dcmd_timeout() to reduce duplicate code.

Co-developed-by: Jackie Liu <liuyun01@xxxxxxxxxx>
Signed-off-by: Jackie Liu <liuyun01@xxxxxxxxxx>
Signed-off-by: mengfanhui <mengfanhui@xxxxxxxxxx>
Suggested-by: Geliang Tang <geliang@xxxxxxxxxx>
---
drivers/scsi/megaraid/megaraid_sas.h | 2 +
drivers/scsi/megaraid/megaraid_sas_base.c | 199 ++++----------------
drivers/scsi/megaraid/megaraid_sas_fusion.c | 34 +---
3 files changed, 38 insertions(+), 197 deletions(-)

diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h
index 91570c5e8456..d96dc446c3aa 100644
--- a/drivers/scsi/megaraid/megaraid_sas.h
+++ b/drivers/scsi/megaraid/megaraid_sas.h
@@ -2761,5 +2761,7 @@ void megasas_setup_debugfs(struct megasas_instance *instance);
void megasas_destroy_debugfs(struct megasas_instance *instance);
int megasas_blk_mq_poll(struct Scsi_Host *shost, unsigned int queue_num);
int dcmd_timeout_ocr_possible(struct megasas_instance *instance);
+void megasas_dcmd_timeout(struct megasas_instance *instance,
+ struct megasas_cmd *cmd);

#endif /*LSI_MEGARAID_SAS_H */
diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index ba8061ea2078..9325a011746d 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -4531,6 +4531,30 @@ int dcmd_timeout_ocr_possible(struct megasas_instance *instance)
return INITIATE_OCR;
}

+/*
+ * megasas_dcmd_timeout - Classification processing dcmd timeout.
+ * @instance: Adapter soft state
+ */
+void megasas_dcmd_timeout(struct megasas_instance *instance, struct megasas_cmd *cmd)
+{
+ switch (dcmd_timeout_ocr_possible(instance)) {
+ case INITIATE_OCR:
+ cmd->flags |= DRV_DCMD_SKIP_REFIRE;
+ mutex_unlock(&instance->reset_mutex);
+ megasas_reset_fusion(instance->host,
+ MFI_IO_TIMEOUT_OCR);
+ mutex_lock(&instance->reset_mutex);
+ break;
+ case KILL_ADAPTER:
+ megaraid_sas_kill_hba(instance);
+ break;
+ case IGNORE_TIMEOUT:
+ dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n",
+ __func__, __LINE__);
+ break;
+ }
+}
+
static void
megasas_get_pd_info(struct megasas_instance *instance, struct scsi_device *sdev)
{
@@ -4582,24 +4606,7 @@ megasas_get_pd_info(struct megasas_instance *instance, struct scsi_device *sdev)
break;

case DCMD_TIMEOUT:
-
- switch (dcmd_timeout_ocr_possible(instance)) {
- case INITIATE_OCR:
- cmd->flags |= DRV_DCMD_SKIP_REFIRE;
- mutex_unlock(&instance->reset_mutex);
- megasas_reset_fusion(instance->host,
- MFI_IO_TIMEOUT_OCR);
- mutex_lock(&instance->reset_mutex);
- break;
- case KILL_ADAPTER:
- megaraid_sas_kill_hba(instance);
- break;
- case IGNORE_TIMEOUT:
- dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n",
- __func__, __LINE__);
- break;
- }
-
+ megasas_dcmd_timeout(instance, cmd);
break;
}

@@ -4678,29 +4685,7 @@ megasas_get_pd_list(struct megasas_instance *instance)
instance->pd_list_not_supported = 1;
break;
case DCMD_TIMEOUT:
-
- switch (dcmd_timeout_ocr_possible(instance)) {
- case INITIATE_OCR:
- cmd->flags |= DRV_DCMD_SKIP_REFIRE;
- /*
- * DCMD failed from AEN path.
- * AEN path already hold reset_mutex to avoid PCI access
- * while OCR is in progress.
- */
- mutex_unlock(&instance->reset_mutex);
- megasas_reset_fusion(instance->host,
- MFI_IO_TIMEOUT_OCR);
- mutex_lock(&instance->reset_mutex);
- break;
- case KILL_ADAPTER:
- megaraid_sas_kill_hba(instance);
- break;
- case IGNORE_TIMEOUT:
- dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d \n",
- __func__, __LINE__);
- break;
- }
-
+ megasas_dcmd_timeout(instance, cmd);
break;

case DCMD_SUCCESS:
@@ -4805,29 +4790,7 @@ megasas_get_ld_list(struct megasas_instance *instance)
megaraid_sas_kill_hba(instance);
break;
case DCMD_TIMEOUT:
-
- switch (dcmd_timeout_ocr_possible(instance)) {
- case INITIATE_OCR:
- cmd->flags |= DRV_DCMD_SKIP_REFIRE;
- /*
- * DCMD failed from AEN path.
- * AEN path already hold reset_mutex to avoid PCI access
- * while OCR is in progress.
- */
- mutex_unlock(&instance->reset_mutex);
- megasas_reset_fusion(instance->host,
- MFI_IO_TIMEOUT_OCR);
- mutex_lock(&instance->reset_mutex);
- break;
- case KILL_ADAPTER:
- megaraid_sas_kill_hba(instance);
- break;
- case IGNORE_TIMEOUT:
- dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n",
- __func__, __LINE__);
- break;
- }
-
+ megasas_dcmd_timeout(instance, cmd);
break;

case DCMD_SUCCESS:
@@ -4925,28 +4888,7 @@ megasas_ld_list_query(struct megasas_instance *instance, u8 query_type)
ret = megasas_get_ld_list(instance);
break;
case DCMD_TIMEOUT:
- switch (dcmd_timeout_ocr_possible(instance)) {
- case INITIATE_OCR:
- cmd->flags |= DRV_DCMD_SKIP_REFIRE;
- /*
- * DCMD failed from AEN path.
- * AEN path already hold reset_mutex to avoid PCI access
- * while OCR is in progress.
- */
- mutex_unlock(&instance->reset_mutex);
- megasas_reset_fusion(instance->host,
- MFI_IO_TIMEOUT_OCR);
- mutex_lock(&instance->reset_mutex);
- break;
- case KILL_ADAPTER:
- megaraid_sas_kill_hba(instance);
- break;
- case IGNORE_TIMEOUT:
- dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n",
- __func__, __LINE__);
- break;
- }
-
+ megasas_dcmd_timeout(instance, cmd);
break;
case DCMD_SUCCESS:
tgtid_count = le32_to_cpu(ci->count);
@@ -5081,22 +5023,7 @@ megasas_host_device_list_query(struct megasas_instance *instance,
break;

case DCMD_TIMEOUT:
- switch (dcmd_timeout_ocr_possible(instance)) {
- case INITIATE_OCR:
- cmd->flags |= DRV_DCMD_SKIP_REFIRE;
- mutex_unlock(&instance->reset_mutex);
- megasas_reset_fusion(instance->host,
- MFI_IO_TIMEOUT_OCR);
- mutex_lock(&instance->reset_mutex);
- break;
- case KILL_ADAPTER:
- megaraid_sas_kill_hba(instance);
- break;
- case IGNORE_TIMEOUT:
- dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n",
- __func__, __LINE__);
- break;
- }
+ megasas_dcmd_timeout(instance, cmd);
break;
case DCMD_FAILED:
dev_err(&instance->pdev->dev,
@@ -5232,22 +5159,7 @@ void megasas_get_snapdump_properties(struct megasas_instance *instance)
break;

case DCMD_TIMEOUT:
- switch (dcmd_timeout_ocr_possible(instance)) {
- case INITIATE_OCR:
- cmd->flags |= DRV_DCMD_SKIP_REFIRE;
- mutex_unlock(&instance->reset_mutex);
- megasas_reset_fusion(instance->host,
- MFI_IO_TIMEOUT_OCR);
- mutex_lock(&instance->reset_mutex);
- break;
- case KILL_ADAPTER:
- megaraid_sas_kill_hba(instance);
- break;
- case IGNORE_TIMEOUT:
- dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n",
- __func__, __LINE__);
- break;
- }
+ megasas_dcmd_timeout(instance, cmd);
}

if (ret != DCMD_TIMEOUT)
@@ -5372,22 +5284,7 @@ megasas_get_ctrl_info(struct megasas_instance *instance)
break;

case DCMD_TIMEOUT:
- switch (dcmd_timeout_ocr_possible(instance)) {
- case INITIATE_OCR:
- cmd->flags |= DRV_DCMD_SKIP_REFIRE;
- mutex_unlock(&instance->reset_mutex);
- megasas_reset_fusion(instance->host,
- MFI_IO_TIMEOUT_OCR);
- mutex_lock(&instance->reset_mutex);
- break;
- case KILL_ADAPTER:
- megaraid_sas_kill_hba(instance);
- break;
- case IGNORE_TIMEOUT:
- dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n",
- __func__, __LINE__);
- break;
- }
+ megasas_dcmd_timeout(instance, cmd);
break;
case DCMD_FAILED:
megaraid_sas_kill_hba(instance);
@@ -5454,20 +5351,8 @@ int megasas_set_crash_dump_params(struct megasas_instance *instance,
ret = megasas_issue_polled(instance, cmd);

if (ret == DCMD_TIMEOUT) {
- switch (dcmd_timeout_ocr_possible(instance)) {
- case INITIATE_OCR:
- cmd->flags |= DRV_DCMD_SKIP_REFIRE;
- megasas_reset_fusion(instance->host,
- MFI_IO_TIMEOUT_OCR);
- break;
- case KILL_ADAPTER:
- megaraid_sas_kill_hba(instance);
- break;
- case IGNORE_TIMEOUT:
- dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n",
- __func__, __LINE__);
- break;
- }
+ megasas_dcmd_timeout(instance, cmd);
+
} else
megasas_return_cmd(instance, cmd);

@@ -6840,23 +6725,7 @@ megasas_get_target_prop(struct megasas_instance *instance,

switch (ret) {
case DCMD_TIMEOUT:
- switch (dcmd_timeout_ocr_possible(instance)) {
- case INITIATE_OCR:
- cmd->flags |= DRV_DCMD_SKIP_REFIRE;
- mutex_unlock(&instance->reset_mutex);
- megasas_reset_fusion(instance->host,
- MFI_IO_TIMEOUT_OCR);
- mutex_lock(&instance->reset_mutex);
- break;
- case KILL_ADAPTER:
- megaraid_sas_kill_hba(instance);
- break;
- case IGNORE_TIMEOUT:
- dev_info(&instance->pdev->dev,
- "Ignore DCMD timeout: %s %d\n",
- __func__, __LINE__);
- break;
- }
+ megasas_dcmd_timeout(instance, cmd);
break;

default:
diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
index f0aeb1ee83a2..1d0991650062 100644
--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
+++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
@@ -1371,22 +1371,7 @@ megasas_sync_pd_seq_num(struct megasas_instance *instance, bool pend) {
instance->pd_seq_map_id++;
break;
case DCMD_TIMEOUT:
- switch (dcmd_timeout_ocr_possible(instance)) {
- case INITIATE_OCR:
- cmd->flags |= DRV_DCMD_SKIP_REFIRE;
- mutex_unlock(&instance->reset_mutex);
- megasas_reset_fusion(instance->host,
- MFI_IO_TIMEOUT_OCR);
- mutex_lock(&instance->reset_mutex);
- break;
- case KILL_ADAPTER:
- megaraid_sas_kill_hba(instance);
- break;
- case IGNORE_TIMEOUT:
- dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n",
- __func__, __LINE__);
- break;
- }
+ megasas_dcmd_timeout(instance, cmd);
break;
case DCMD_FAILED:
dev_err(&instance->pdev->dev,
@@ -1476,22 +1461,7 @@ megasas_get_ld_map_info(struct megasas_instance *instance)

switch (ret) {
case DCMD_TIMEOUT:
- switch (dcmd_timeout_ocr_possible(instance)) {
- case INITIATE_OCR:
- cmd->flags |= DRV_DCMD_SKIP_REFIRE;
- mutex_unlock(&instance->reset_mutex);
- megasas_reset_fusion(instance->host,
- MFI_IO_TIMEOUT_OCR);
- mutex_lock(&instance->reset_mutex);
- break;
- case KILL_ADAPTER:
- megaraid_sas_kill_hba(instance);
- break;
- case IGNORE_TIMEOUT:
- dev_info(&instance->pdev->dev, "Ignore DCMD timeout: %s %d\n",
- __func__, __LINE__);
- break;
- }
+ megasas_dcmd_timeout(instance, cmd);
break;
case DCMD_FAILED:
dev_err(&instance->pdev->dev,
--
2.25.1