Commit 4c32edc3 authored by Sumit Saxena's avatar Sumit Saxena Committed by Martin K. Petersen
Browse files

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.com


Signed-off-by: default avatarSumit Saxena <sumit.saxena@broadcom.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent e7dcc514
Loading
Loading
Loading
Loading
+39 −6
Original line number Diff line number Diff line
@@ -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
 * @instance:			Adapter soft state
@@ -3530,7 +3565,7 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex,
	if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR)
		return IRQ_HANDLED;

	if (irq_context && !atomic_add_unless(&irq_context->in_used, 1, 1))
	if (!access_irq_context(irq_context))
		return 0;

	desc = fusion->reply_frames_desc[MSIxIndex] +
@@ -3544,8 +3579,7 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex,
		MPI2_RPY_DESCRIPT_FLAGS_TYPE_MASK;

	if (reply_descript_type == MPI2_RPY_DESCRIPT_FLAGS_UNUSED) {
		if (irq_context)
			atomic_dec(&irq_context->in_used);
		release_irq_context(irq_context);
		return IRQ_NONE;
	}

@@ -3663,7 +3697,7 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex,
					irq_context->irq_line_enable = true;
					irq_poll_sched(&irq_context->irqpoll);
				}
				atomic_dec(&irq_context->in_used);
				release_irq_context(irq_context);
				return num_completed;
			}
		}
@@ -3682,8 +3716,7 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex,
		megasas_check_and_restore_queue_depth(instance);
	}

	if (irq_context)
		atomic_dec(&irq_context->in_used);
	release_irq_context(irq_context);

	return num_completed;
}