]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
crypto: talitos - move dma unmapping code in flush_channel() into a standalone dma_un...
authorPaul Louvel <paul.louvel@bootlin.com>
Thu, 7 May 2026 14:41:49 +0000 (16:41 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 15 May 2026 10:08:47 +0000 (18:08 +0800)
Previously added code to flush_channel() in order to unmap an entire
descriptor.

Move that code into a standalone function to improve readability.

Cc: stable@vger.kernel.org
Signed-off-by: Paul Louvel <paul.louvel@bootlin.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/talitos.c

index b26b4672a457eea2c1322685fbb80a8fcc3a8f50..cffd4a2bd5872959bc7e527307ded27b23d1420c 100644 (file)
@@ -372,6 +372,27 @@ static __be32 get_request_hdr(struct device *dev,
        return edesc->desc.hdr1;
 }
 
+static void dma_unmap_request(struct device *dev,
+                             struct talitos_request *request, bool is_sec1)
+{
+       struct talitos_edesc *edesc;
+
+       if (is_sec1) {
+               dma_unmap_single(dev, request->dma_desc, TALITOS_DESC_SIZE,
+                                DMA_BIDIRECTIONAL);
+               edesc = container_of(request->desc, struct talitos_edesc, desc);
+               while (edesc->next_desc) {
+                       dma_unmap_single(dev,
+                                        be32_to_cpu(edesc->desc.next_desc),
+                                        TALITOS_DESC_SIZE, DMA_BIDIRECTIONAL);
+                       edesc = edesc->next_desc;
+               }
+       } else {
+               dma_unmap_single(dev, request->dma_desc, TALITOS_DESC_SIZE,
+                                DMA_BIDIRECTIONAL);
+       }
+}
+
 /*
  * process what was done, notify callback of error if not
  */
@@ -379,7 +400,6 @@ static void flush_channel(struct device *dev, int ch, int error, int reset_ch)
 {
        struct talitos_private *priv = dev_get_drvdata(dev);
        struct talitos_request *request, saved_req;
-       struct talitos_edesc *edesc;
        unsigned long flags;
        int tail, status;
        bool is_sec1 = has_ftr_sec1(priv);
@@ -404,22 +424,7 @@ static void flush_channel(struct device *dev, int ch, int error, int reset_ch)
                        else
                                status = error;
 
-               if (is_sec1) {
-                       dma_unmap_single(dev, request->dma_desc,
-                                        TALITOS_DESC_SIZE, DMA_BIDIRECTIONAL);
-                       edesc = container_of(request->desc,
-                                            struct talitos_edesc, desc);
-                       while (edesc->next_desc) {
-                               dma_unmap_single(
-                                       dev, be32_to_cpu(edesc->desc.next_desc),
-                                       TALITOS_DESC_SIZE, DMA_BIDIRECTIONAL);
-                               edesc = edesc->next_desc;
-                       }
-               } else {
-                       dma_unmap_single(dev, request->dma_desc,
-                                       TALITOS_DESC_SIZE,
-                                       DMA_BIDIRECTIONAL);
-               }
+               dma_unmap_request(dev, request, is_sec1);
 
                /* copy entries so we can call callback outside lock */
                saved_req.desc = request->desc;