scsi: mpt3sas: simplify interrupt handler
Separate out processing of reply descriptor post queue from _base_interrupt to _base_process_reply_queue. Signed-off-by: Suganath Prabu <suganath-prabu.subramani@broadcom.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
2c063507c4
commit
233af108e5
@ -1383,16 +1383,16 @@ union reply_descriptor {
|
||||
};
|
||||
|
||||
/**
|
||||
* _base_interrupt - MPT adapter (IOC) specific interrupt handler.
|
||||
* @irq: irq number (not used)
|
||||
* @bus_id: bus identifier cookie == pointer to MPT_ADAPTER structure
|
||||
* _base_process_reply_queue - Process reply descriptors from reply
|
||||
* descriptor post queue.
|
||||
* @reply_q: per IRQ's reply queue object.
|
||||
*
|
||||
* Return: IRQ_HANDLED if processed, else IRQ_NONE.
|
||||
* Return: number of reply descriptors processed from reply
|
||||
* descriptor queue.
|
||||
*/
|
||||
static irqreturn_t
|
||||
_base_interrupt(int irq, void *bus_id)
|
||||
static int
|
||||
_base_process_reply_queue(struct adapter_reply_queue *reply_q)
|
||||
{
|
||||
struct adapter_reply_queue *reply_q = bus_id;
|
||||
union reply_descriptor rd;
|
||||
u32 completed_cmds;
|
||||
u8 request_descript_type;
|
||||
@ -1404,21 +1404,18 @@ _base_interrupt(int irq, void *bus_id)
|
||||
Mpi2ReplyDescriptorsUnion_t *rpf;
|
||||
u8 rc;
|
||||
|
||||
if (ioc->mask_interrupts)
|
||||
return IRQ_NONE;
|
||||
|
||||
completed_cmds = 0;
|
||||
if (!atomic_add_unless(&reply_q->busy, 1, 1))
|
||||
return IRQ_NONE;
|
||||
return completed_cmds;
|
||||
|
||||
rpf = &reply_q->reply_post_free[reply_q->reply_post_host_index];
|
||||
request_descript_type = rpf->Default.ReplyFlags
|
||||
& MPI2_RPY_DESCRIPT_FLAGS_TYPE_MASK;
|
||||
if (request_descript_type == MPI2_RPY_DESCRIPT_FLAGS_UNUSED) {
|
||||
atomic_dec(&reply_q->busy);
|
||||
return IRQ_NONE;
|
||||
return completed_cmds;
|
||||
}
|
||||
|
||||
completed_cmds = 0;
|
||||
cb_idx = 0xFF;
|
||||
do {
|
||||
rd.word = le64_to_cpu(rpf->Words);
|
||||
@ -1521,14 +1518,14 @@ _base_interrupt(int irq, void *bus_id)
|
||||
|
||||
if (!completed_cmds) {
|
||||
atomic_dec(&reply_q->busy);
|
||||
return IRQ_NONE;
|
||||
return completed_cmds;
|
||||
}
|
||||
|
||||
if (ioc->is_warpdrive) {
|
||||
writel(reply_q->reply_post_host_index,
|
||||
ioc->reply_post_host_index[msix_index]);
|
||||
atomic_dec(&reply_q->busy);
|
||||
return IRQ_HANDLED;
|
||||
return completed_cmds;
|
||||
}
|
||||
|
||||
/* Update Reply Post Host Index.
|
||||
@ -1555,7 +1552,27 @@ _base_interrupt(int irq, void *bus_id)
|
||||
MPI2_RPHI_MSIX_INDEX_SHIFT),
|
||||
&ioc->chip->ReplyPostHostIndex);
|
||||
atomic_dec(&reply_q->busy);
|
||||
return IRQ_HANDLED;
|
||||
return completed_cmds;
|
||||
}
|
||||
|
||||
/**
|
||||
* _base_interrupt - MPT adapter (IOC) specific interrupt handler.
|
||||
* @irq: irq number (not used)
|
||||
* @bus_id: bus identifier cookie == pointer to MPT_ADAPTER structure
|
||||
*
|
||||
* Return: IRQ_HANDLED if processed, else IRQ_NONE.
|
||||
*/
|
||||
static irqreturn_t
|
||||
_base_interrupt(int irq, void *bus_id)
|
||||
{
|
||||
struct adapter_reply_queue *reply_q = bus_id;
|
||||
struct MPT3SAS_ADAPTER *ioc = reply_q->ioc;
|
||||
|
||||
if (ioc->mask_interrupts)
|
||||
return IRQ_NONE;
|
||||
|
||||
return ((_base_process_reply_queue(reply_q) > 0) ?
|
||||
IRQ_HANDLED : IRQ_NONE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user