mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 10:49:33 +00:00
crypto: caam - only query h/w in job ring dequeue path
Code was needlessly checking the s/w job ring when there would be nothing to process if the h/w's output completion ring were empty anyway. Signed-off-by: Kim Phillips <kim.phillips@freescale.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
4bba1e9f41
commit
a8ea07c21d
1 changed files with 5 additions and 12 deletions
|
@ -59,15 +59,15 @@ static void caam_jr_dequeue(unsigned long devarg)
|
|||
u32 *userdesc, userstatus;
|
||||
void *userarg;
|
||||
|
||||
spin_lock_bh(&jrp->outlock);
|
||||
while (rd_reg32(&jrp->rregs->outring_used)) {
|
||||
|
||||
head = ACCESS_ONCE(jrp->head);
|
||||
sw_idx = tail = jrp->tail;
|
||||
head = ACCESS_ONCE(jrp->head);
|
||||
|
||||
while (CIRC_CNT(head, tail, JOBR_DEPTH) >= 1 &&
|
||||
rd_reg32(&jrp->rregs->outring_used)) {
|
||||
spin_lock_bh(&jrp->outlock);
|
||||
|
||||
sw_idx = tail = jrp->tail;
|
||||
hw_idx = jrp->out_ring_read_index;
|
||||
|
||||
for (i = 0; CIRC_CNT(head, tail + i, JOBR_DEPTH) >= 1; i++) {
|
||||
sw_idx = (tail + i) & (JOBR_DEPTH - 1);
|
||||
|
||||
|
@ -121,15 +121,8 @@ static void caam_jr_dequeue(unsigned long devarg)
|
|||
|
||||
/* Finally, execute user's callback */
|
||||
usercall(dev, userdesc, userstatus, userarg);
|
||||
|
||||
spin_lock_bh(&jrp->outlock);
|
||||
|
||||
head = ACCESS_ONCE(jrp->head);
|
||||
sw_idx = tail = jrp->tail;
|
||||
}
|
||||
|
||||
spin_unlock_bh(&jrp->outlock);
|
||||
|
||||
/* reenable / unmask IRQs */
|
||||
clrbits32(&jrp->rregs->rconfig_lo, JRCFG_IMSK);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue