提交 4c32edc3 编写于 作者: S Sumit Saxena 提交者: Martin K. Petersen

scsi: megaraid_sas: Add helper functions for irq_context

Adding helper functions for ISR access and release to improve readability.

Link: https://lore.kernel.org/r/20210929124022.24605-3-sumit.saxena@broadcom.comSigned-off-by: NSumit Saxena <sumit.saxena@broadcom.com>
Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
上级 e7dcc514
...@@ -3497,6 +3497,41 @@ megasas_complete_r1_command(struct megasas_instance *instance, ...@@ -3497,6 +3497,41 @@ megasas_complete_r1_command(struct megasas_instance *instance,
} }
} }
/**
* access_irq_context: Access to reply processing
* @irq_context: IRQ context
*
* Synchronize access to reply processing.
*
* Return: true on success, false on failure.
*/
static inline
bool access_irq_context(struct megasas_irq_context *irq_context)
{
if (!irq_context)
return true;
if (atomic_add_unless(&irq_context->in_used, 1, 1))
return true;
return false;
}
/**
* release_irq_context: Release reply processing
* @irq_context: IRQ context
*
* Release access of reply processing.
*
* Return: Nothing.
*/
static inline
void release_irq_context(struct megasas_irq_context *irq_context)
{
if (irq_context)
atomic_dec(&irq_context->in_used);
}
/** /**
* complete_cmd_fusion - Completes command * complete_cmd_fusion - Completes command
* @instance: Adapter soft state * @instance: Adapter soft state
...@@ -3530,7 +3565,7 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex, ...@@ -3530,7 +3565,7 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex,
if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR)
return IRQ_HANDLED; return IRQ_HANDLED;
if (irq_context && !atomic_add_unless(&irq_context->in_used, 1, 1)) if (!access_irq_context(irq_context))
return 0; return 0;
desc = fusion->reply_frames_desc[MSIxIndex] + desc = fusion->reply_frames_desc[MSIxIndex] +
...@@ -3544,8 +3579,7 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex, ...@@ -3544,8 +3579,7 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex,
MPI2_RPY_DESCRIPT_FLAGS_TYPE_MASK; MPI2_RPY_DESCRIPT_FLAGS_TYPE_MASK;
if (reply_descript_type == MPI2_RPY_DESCRIPT_FLAGS_UNUSED) { if (reply_descript_type == MPI2_RPY_DESCRIPT_FLAGS_UNUSED) {
if (irq_context) release_irq_context(irq_context);
atomic_dec(&irq_context->in_used);
return IRQ_NONE; return IRQ_NONE;
} }
...@@ -3663,7 +3697,7 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex, ...@@ -3663,7 +3697,7 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex,
irq_context->irq_line_enable = true; irq_context->irq_line_enable = true;
irq_poll_sched(&irq_context->irqpoll); irq_poll_sched(&irq_context->irqpoll);
} }
atomic_dec(&irq_context->in_used); release_irq_context(irq_context);
return num_completed; return num_completed;
} }
} }
...@@ -3682,8 +3716,7 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex, ...@@ -3682,8 +3716,7 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex,
megasas_check_and_restore_queue_depth(instance); megasas_check_and_restore_queue_depth(instance);
} }
if (irq_context) release_irq_context(irq_context);
atomic_dec(&irq_context->in_used);
return num_completed; return num_completed;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册