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.phill...@freescale.com>
---
 drivers/crypto/caam/jr.c | 17 +++++------------
 1 file changed, 5 insertions(+), 12 deletions(-)

diff --git a/drivers/crypto/caam/jr.c b/drivers/crypto/caam/jr.c
index 11d93f2..7ae5e51 100644
--- a/drivers/crypto/caam/jr.c
+++ b/drivers/crypto/caam/jr.c
@@ -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);
 }
-- 
1.7.11.1


--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to