mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
scsi: pm8001: Introduce pm8001_handle_irq()
Factor out the common code of pm8001_interrupt_handler_msix and of pm8001_interrupt_handler_intx() into the new function pm8001_handle_irq() and use this new helper in these two functions to simplify the code. Signed-off-by: Damien Le Moal <dlemoal@kernel.org> Link: https://lore.kernel.org/r/20230911232745.325149-6-dlemoal@kernel.org Acked-by: Jack Wang <jinpu.wang@ionos.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
80bb942b35
commit
07ca8c1ad0
|
|
@ -257,6 +257,23 @@ static void pm8001_kill_tasklet(struct pm8001_hba_info *pm8001_ha) {}
|
|||
|
||||
#endif
|
||||
|
||||
static irqreturn_t pm8001_handle_irq(struct pm8001_hba_info *pm8001_ha,
|
||||
int irq)
|
||||
{
|
||||
if (unlikely(!pm8001_ha))
|
||||
return IRQ_NONE;
|
||||
|
||||
if (!PM8001_CHIP_DISP->is_our_interrupt(pm8001_ha))
|
||||
return IRQ_NONE;
|
||||
|
||||
#ifdef PM8001_USE_TASKLET
|
||||
tasklet_schedule(&pm8001_ha->tasklet[irq]);
|
||||
return IRQ_HANDLED;
|
||||
#else
|
||||
return PM8001_CHIP_DISP->isr(pm8001_ha, irq);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* pm8001_interrupt_handler_msix - main MSIX interrupt handler.
|
||||
* It obtains the vector number and calls the equivalent bottom
|
||||
|
|
@ -267,22 +284,10 @@ static void pm8001_kill_tasklet(struct pm8001_hba_info *pm8001_ha) {}
|
|||
*/
|
||||
static irqreturn_t pm8001_interrupt_handler_msix(int irq, void *opaque)
|
||||
{
|
||||
struct isr_param *irq_vector;
|
||||
struct pm8001_hba_info *pm8001_ha;
|
||||
irqreturn_t ret = IRQ_HANDLED;
|
||||
irq_vector = (struct isr_param *)opaque;
|
||||
pm8001_ha = irq_vector->drv_inst;
|
||||
struct isr_param *irq_vector = (struct isr_param *)opaque;
|
||||
struct pm8001_hba_info *pm8001_ha = irq_vector->drv_inst;
|
||||
|
||||
if (unlikely(!pm8001_ha))
|
||||
return IRQ_NONE;
|
||||
if (!PM8001_CHIP_DISP->is_our_interrupt(pm8001_ha))
|
||||
return IRQ_NONE;
|
||||
#ifdef PM8001_USE_TASKLET
|
||||
tasklet_schedule(&pm8001_ha->tasklet[irq_vector->irq_id]);
|
||||
#else
|
||||
ret = PM8001_CHIP_DISP->isr(pm8001_ha, irq_vector->irq_id);
|
||||
#endif
|
||||
return ret;
|
||||
return pm8001_handle_irq(pm8001_ha, irq_vector->irq_id);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -293,21 +298,10 @@ static irqreturn_t pm8001_interrupt_handler_msix(int irq, void *opaque)
|
|||
|
||||
static irqreturn_t pm8001_interrupt_handler_intx(int irq, void *dev_id)
|
||||
{
|
||||
struct pm8001_hba_info *pm8001_ha;
|
||||
irqreturn_t ret = IRQ_HANDLED;
|
||||
struct sas_ha_struct *sha = dev_id;
|
||||
pm8001_ha = sha->lldd_ha;
|
||||
if (unlikely(!pm8001_ha))
|
||||
return IRQ_NONE;
|
||||
if (!PM8001_CHIP_DISP->is_our_interrupt(pm8001_ha))
|
||||
return IRQ_NONE;
|
||||
struct pm8001_hba_info *pm8001_ha = sha->lldd_ha;
|
||||
|
||||
#ifdef PM8001_USE_TASKLET
|
||||
tasklet_schedule(&pm8001_ha->tasklet[0]);
|
||||
#else
|
||||
ret = PM8001_CHIP_DISP->isr(pm8001_ha, 0);
|
||||
#endif
|
||||
return ret;
|
||||
return pm8001_handle_irq(pm8001_ha, 0);
|
||||
}
|
||||
|
||||
static u32 pm8001_request_irq(struct pm8001_hba_info *pm8001_ha);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user