crypto: caam/jr - Remove spinlock for output job ring
authorVakul Garg <vakul.garg@nxp.com>
Fri, 22 Mar 2019 02:00:34 +0000 (02:00 +0000)
committerHerbert Xu <herbert@gondor.apana.org.au>
Thu, 28 Mar 2019 05:55:34 +0000 (13:55 +0800)
For each job ring pair, the output ring is processed exactly by one cpu
at a time under a tasklet context (one per ring). Therefore, there is no
need to protect a job ring's access & its private data structure using a
lock. Hence the lock can be removed.

Signed-off-by: Vakul Garg <vakul.garg@nxp.com>
Reviewed-by: Horia Geanta <horia.geanta@nxp.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/caam/intern.h
drivers/crypto/caam/jr.c

index 30d5b6c5892f32ca8d61270abba016131278224e..48d62e02059941df44dfc47603dc3e60f189f302 100644 (file)
@@ -56,7 +56,6 @@ struct caam_drv_private_jr {
        u32 inpring_avail;      /* Number of free entries in input ring */
        int head;                       /* entinfo (s/w ring) head index */
        dma_addr_t *inpring;    /* Base of input ring, alloc DMA-safe */
-       spinlock_t outlock ____cacheline_aligned; /* Output ring index lock */
        int out_ring_read_index;        /* Output index "tail" */
        int tail;                       /* entinfo (s/w ring) tail index */
        struct jr_outentry *outring;    /* Base of output ring, DMA-safe */
index b9caa95755d1bc04140343df736363cf47faee50..d1021026f5b2c4067a903bba367b83c19ebeccbf 100644 (file)
@@ -177,8 +177,6 @@ static void caam_jr_dequeue(unsigned long devarg)
 
                head = READ_ONCE(jrp->head);
 
-               spin_lock(&jrp->outlock);
-
                sw_idx = tail = jrp->tail;
                hw_idx = jrp->out_ring_read_index;
 
@@ -201,7 +199,7 @@ static void caam_jr_dequeue(unsigned long devarg)
                /* mark completed, avoid matching on a recycled desc addr */
                jrp->entinfo[sw_idx].desc_addr_dma = 0;
 
-               /* Stash callback params for use outside of lock */
+               /* Stash callback params */
                usercall = jrp->entinfo[sw_idx].callbk;
                userarg = jrp->entinfo[sw_idx].cbkarg;
                userdesc = jrp->entinfo[sw_idx].desc_addr_virt;
@@ -234,8 +232,6 @@ static void caam_jr_dequeue(unsigned long devarg)
                        jrp->tail = tail;
                }
 
-               spin_unlock(&jrp->outlock);
-
                /* Finally, execute user's callback */
                usercall(dev, userdesc, userstatus, userarg);
                outring_used--;
@@ -452,7 +448,6 @@ static int caam_jr_init(struct device *dev)
        jrp->inpring_avail = JOBR_DEPTH;
 
        spin_lock_init(&jrp->inplock);
-       spin_lock_init(&jrp->outlock);
 
        /* Select interrupt coalescing parameters */
        clrsetbits_32(&jrp->rregs->rconfig_lo, 0, JOBR_INTC |