]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
crypto: sun8i-ce - remove channel timeout field
authorOvidiu Panait <ovidiu.panait.oss@gmail.com>
Tue, 2 Sep 2025 13:21:26 +0000 (16:21 +0300)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sat, 13 Sep 2025 04:11:05 +0000 (12:11 +0800)
Using the number of bytes in the request as DMA timeout is really
inconsistent, as large requests could possibly set a timeout of
hundreds of seconds.

Remove the per-channel timeout field and use a single, static DMA
timeout of 3 seconds for all requests.

Signed-off-by: Ovidiu Panait <ovidiu.panait.oss@gmail.com>
Tested-by: Corentin LABBE <clabbe.montjoie@gmail.com>
Reviewed-by: Corentin LABBE <clabbe.montjoie@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/allwinner/sun8i-ce/sun8i-ce-cipher.c
drivers/crypto/allwinner/sun8i-ce/sun8i-ce-core.c
drivers/crypto/allwinner/sun8i-ce/sun8i-ce-hash.c
drivers/crypto/allwinner/sun8i-ce/sun8i-ce-prng.c
drivers/crypto/allwinner/sun8i-ce/sun8i-ce-trng.c
drivers/crypto/allwinner/sun8i-ce/sun8i-ce.h

index 5663df49dd8176148dc2a23c5688da3ddb1342e5..113a1100f2aeb9cacb4ef167ad6fdf5495a562f1 100644 (file)
@@ -276,7 +276,6 @@ static int sun8i_ce_cipher_prepare(struct crypto_engine *engine, void *async_req
                goto theend_sgs;
        }
 
-       chan->timeout = areq->cryptlen;
        rctx->nr_sgs = ns;
        rctx->nr_sgd = nd;
        return 0;
index 658f520cee0caaac77359196616eec5e6daa5ec0..79ec172e5c995d62c7dae99b25105242c7699a4f 100644 (file)
@@ -210,11 +210,10 @@ int sun8i_ce_run_task(struct sun8i_ce_dev *ce, int flow, const char *name)
        mutex_unlock(&ce->mlock);
 
        wait_for_completion_interruptible_timeout(&ce->chanlist[flow].complete,
-                       msecs_to_jiffies(ce->chanlist[flow].timeout));
+                       msecs_to_jiffies(CE_DMA_TIMEOUT_MS));
 
        if (ce->chanlist[flow].status == 0) {
-               dev_err(ce->dev, "DMA timeout for %s (tm=%d) on flow %d\n", name,
-                       ce->chanlist[flow].timeout, flow);
+               dev_err(ce->dev, "DMA timeout for %s on flow %d\n", name, flow);
                err = -EFAULT;
        }
        /* No need to lock for this read, the channel is locked so
index 13bdfb8a2c62754688921effddec7302694e3a66..b26f5427c1e061275c1240f1da3a362e16f947a9 100644 (file)
@@ -446,8 +446,6 @@ int sun8i_ce_hash_run(struct crypto_engine *engine, void *breq)
        else
                cet->t_dlen = cpu_to_le32(areq->nbytes / 4 + j);
 
-       chan->timeout = areq->nbytes;
-
        err = sun8i_ce_run_task(ce, flow, crypto_ahash_alg_name(tfm));
 
        dma_unmap_single(ce->dev, addr_pad, j * 4, DMA_TO_DEVICE);
index 762459867b6c55c245f196bf256d4039d1a6ecb1..d0a1ac66738bfb48e9d42d35ca1366e6337ec278 100644 (file)
@@ -137,7 +137,6 @@ int sun8i_ce_prng_generate(struct crypto_rng *tfm, const u8 *src,
 
        cet->t_dst[0].addr = desc_addr_val_le32(ce, dma_dst);
        cet->t_dst[0].len = cpu_to_le32(todo / 4);
-       ce->chanlist[flow].timeout = 2000;
 
        err = sun8i_ce_run_task(ce, 3, "PRNG");
        mutex_unlock(&ce->rnglock);
index e1e8bc15202e0381a238f2d1f449f887cf10b5d0..244529bf06162275f53a858869a0c380a47fb102 100644 (file)
@@ -79,7 +79,6 @@ static int sun8i_ce_trng_read(struct hwrng *rng, void *data, size_t max, bool wa
 
        cet->t_dst[0].addr = desc_addr_val_le32(ce, dma_dst);
        cet->t_dst[0].len = cpu_to_le32(todo / 4);
-       ce->chanlist[flow].timeout = todo;
 
        err = sun8i_ce_run_task(ce, 3, "TRNG");
        mutex_unlock(&ce->rnglock);
index 0f9a890670167088dd95a27038b2aba2fe4c66c0..f12c32d1843f2d4eb60047c75a19af5befe66676 100644 (file)
 #define MAX_SG 8
 
 #define CE_MAX_CLOCKS 4
+#define CE_DMA_TIMEOUT_MS      3000
 
 #define MAXFLOW 4
 
@@ -196,7 +197,6 @@ struct sun8i_ce_flow {
        struct completion complete;
        int status;
        dma_addr_t t_phy;
-       int timeout;
        struct ce_task *tl;
        void *backup_iv;
        void *bounce_iv;