Skip to content

Commit

Permalink
crypto: caam - only query h/w in job ring dequeue path
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Kim Phillips authored and Herbert Xu committed Jun 27, 2012
1 parent 4bba1e9 commit a8ea07c
Showing 1 changed file with 5 additions and 12 deletions.
17 changes: 5 additions & 12 deletions drivers/crypto/caam/jr.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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);
}
Expand Down

0 comments on commit a8ea07c

Please sign in to comment.