Commit ea51190c authored by Christoph Hellwig's avatar Christoph Hellwig

irq_poll: fold irq_poll_sched_prep into irq_poll_sched

There is no good reason to keep them apart, and this makes using the API
a bit simpler.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarBart Van Assche <bart.vanassche@sandisk.com>
parent 78d0264e
...@@ -910,8 +910,7 @@ static irqreturn_t be_isr_msix(int irq, void *dev_id) ...@@ -910,8 +910,7 @@ static irqreturn_t be_isr_msix(int irq, void *dev_id)
num_eq_processed = 0; num_eq_processed = 0;
while (eqe->dw[offsetof(struct amap_eq_entry, valid) / 32] while (eqe->dw[offsetof(struct amap_eq_entry, valid) / 32]
& EQE_VALID_MASK) { & EQE_VALID_MASK) {
if (!irq_poll_sched_prep(&pbe_eq->iopoll)) irq_poll_sched(&pbe_eq->iopoll);
irq_poll_sched(&pbe_eq->iopoll);
AMAP_SET_BITS(struct amap_eq_entry, valid, eqe, 0); AMAP_SET_BITS(struct amap_eq_entry, valid, eqe, 0);
queue_tail_inc(eq); queue_tail_inc(eq);
...@@ -972,8 +971,7 @@ static irqreturn_t be_isr(int irq, void *dev_id) ...@@ -972,8 +971,7 @@ static irqreturn_t be_isr(int irq, void *dev_id)
spin_unlock_irqrestore(&phba->isr_lock, flags); spin_unlock_irqrestore(&phba->isr_lock, flags);
num_mcceq_processed++; num_mcceq_processed++;
} else { } else {
if (!irq_poll_sched_prep(&pbe_eq->iopoll)) irq_poll_sched(&pbe_eq->iopoll);
irq_poll_sched(&pbe_eq->iopoll);
num_ioeq_processed++; num_ioeq_processed++;
} }
AMAP_SET_BITS(struct amap_eq_entry, valid, eqe, 0); AMAP_SET_BITS(struct amap_eq_entry, valid, eqe, 0);
......
...@@ -5692,8 +5692,7 @@ static irqreturn_t ipr_isr_mhrrq(int irq, void *devp) ...@@ -5692,8 +5692,7 @@ static irqreturn_t ipr_isr_mhrrq(int irq, void *devp)
if (ioa_cfg->iopoll_weight && ioa_cfg->sis64 && ioa_cfg->nvectors > 1) { if (ioa_cfg->iopoll_weight && ioa_cfg->sis64 && ioa_cfg->nvectors > 1) {
if ((be32_to_cpu(*hrrq->hrrq_curr) & IPR_HRRQ_TOGGLE_BIT) == if ((be32_to_cpu(*hrrq->hrrq_curr) & IPR_HRRQ_TOGGLE_BIT) ==
hrrq->toggle_bit) { hrrq->toggle_bit) {
if (!irq_poll_sched_prep(&hrrq->iopoll)) irq_poll_sched(&hrrq->iopoll);
irq_poll_sched(&hrrq->iopoll);
spin_unlock_irqrestore(hrrq->lock, hrrq_flags); spin_unlock_irqrestore(hrrq->lock, hrrq_flags);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
......
...@@ -18,19 +18,6 @@ enum { ...@@ -18,19 +18,6 @@ enum {
IRQ_POLL_F_DISABLE = 1, IRQ_POLL_F_DISABLE = 1,
}; };
/*
* Returns 0 if we successfully set the IRQ_POLL_F_SCHED bit, indicating
* that we were the first to acquire this iop for scheduling. If this iop
* is currently disabled, return "failure".
*/
static inline int irq_poll_sched_prep(struct irq_poll *iop)
{
if (!test_bit(IRQ_POLL_F_DISABLE, &iop->state))
return test_and_set_bit(IRQ_POLL_F_SCHED, &iop->state);
return 1;
}
static inline int irq_poll_disable_pending(struct irq_poll *iop) static inline int irq_poll_disable_pending(struct irq_poll *iop)
{ {
return test_bit(IRQ_POLL_F_DISABLE, &iop->state); return test_bit(IRQ_POLL_F_DISABLE, &iop->state);
......
...@@ -21,13 +21,17 @@ static DEFINE_PER_CPU(struct list_head, blk_cpu_iopoll); ...@@ -21,13 +21,17 @@ static DEFINE_PER_CPU(struct list_head, blk_cpu_iopoll);
* *
* Description: * Description:
* Add this irq_poll structure to the pending poll list and trigger the * Add this irq_poll structure to the pending poll list and trigger the
* raise of the blk iopoll softirq. The driver must already have gotten a * raise of the blk iopoll softirq.
* successful return from irq_poll_sched_prep() before calling this.
**/ **/
void irq_poll_sched(struct irq_poll *iop) void irq_poll_sched(struct irq_poll *iop)
{ {
unsigned long flags; unsigned long flags;
if (test_bit(IRQ_POLL_F_DISABLE, &iop->state))
return;
if (!test_and_set_bit(IRQ_POLL_F_SCHED, &iop->state))
return;
local_irq_save(flags); local_irq_save(flags);
list_add_tail(&iop->list, this_cpu_ptr(&blk_cpu_iopoll)); list_add_tail(&iop->list, this_cpu_ptr(&blk_cpu_iopoll));
__raise_softirq_irqoff(IRQ_POLL_SOFTIRQ); __raise_softirq_irqoff(IRQ_POLL_SOFTIRQ);
...@@ -58,7 +62,7 @@ EXPORT_SYMBOL(__irq_poll_complete); ...@@ -58,7 +62,7 @@ EXPORT_SYMBOL(__irq_poll_complete);
* Description: * Description:
* If a driver consumes less than the assigned budget in its run of the * If a driver consumes less than the assigned budget in its run of the
* iopoll handler, it'll end the polled mode by calling this function. The * iopoll handler, it'll end the polled mode by calling this function. The
* iopoll handler will not be invoked again before irq_poll_sched_prep() * iopoll handler will not be invoked again before irq_poll_sched()
* is called. * is called.
**/ **/
void irq_poll_complete(struct irq_poll *iop) void irq_poll_complete(struct irq_poll *iop)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment