]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
crypto: api - Remove per-tfm refcount
authorEric Biggers <ebiggers@kernel.org>
Fri, 22 May 2026 05:30:26 +0000 (00:30 -0500)
committerJakub Kicinski <kuba@kernel.org>
Fri, 29 May 2026 00:45:46 +0000 (17:45 -0700)
This reverts commit ae131f4970f0 ("crypto: api - Add crypto_tfm_get").

The refcount in struct crypto_tfm was added solely to support
crypto_clone_tfm().  Before then it was a simple non-refcounted object.

Since crypto_clone_tfm() has been removed, remove the refcount as well.

Note that this eliminates an expensive atomic operation from every tfm
freeing operation.  So this revert doesn't just remove unused code, but
it also fixes a performance regression.

Signed-off-by: Eric Biggers <ebiggers@kernel.org>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Link: https://patch.msgid.link/20260522053028.91165-5-ebiggers@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
crypto/api.c
crypto/internal.h
include/linux/crypto.h

index d019d1979857dca51ac28801697daa9027aa1747..be9ee104ffc2da8087709b464c2716b317def378 100644 (file)
@@ -418,7 +418,6 @@ struct crypto_tfm *__crypto_alloc_tfmgfp(struct crypto_alg *alg, u32 type,
                goto out_err;
 
        tfm->__crt_alg = alg;
-       refcount_set(&tfm->refcnt, 1);
 
        if (!tfm->exit && alg->cra_init && (err = alg->cra_init(tfm)))
                goto cra_init_failed;
@@ -519,7 +518,6 @@ static void *crypto_alloc_tfmmem(struct crypto_alg *alg,
        tfm = (struct crypto_tfm *)(mem + tfmsize);
        tfm->__crt_alg = alg;
        tfm->node = node;
-       refcount_set(&tfm->refcnt, 1);
 
        return mem;
 }
@@ -649,8 +647,6 @@ void crypto_destroy_tfm(void *mem, struct crypto_tfm *tfm)
        if (IS_ERR_OR_NULL(mem))
                return;
 
-       if (!refcount_dec_and_test(&tfm->refcnt))
-               return;
        alg = tfm->__crt_alg;
 
        if (!tfm->exit && alg->cra_exit)
index 96f84abfac91ea14b285fb2ad9e76448f85f92c5..b6e437f463d42dcecc92b1265896354c396c5d1c 100644 (file)
@@ -10,7 +10,6 @@
 
 #include <crypto/algapi.h>
 #include <linux/completion.h>
-#include <linux/err.h>
 #include <linux/jump_label.h>
 #include <linux/list.h>
 #include <linux/module.h>
@@ -209,10 +208,5 @@ static inline int crypto_is_test_larval(struct crypto_larval *larval)
        return larval->alg.cra_driver_name[0];
 }
 
-static inline struct crypto_tfm *crypto_tfm_get(struct crypto_tfm *tfm)
-{
-       return refcount_inc_not_zero(&tfm->refcnt) ? tfm : ERR_PTR(-EOVERFLOW);
-}
-
 #endif /* _CRYPTO_INTERNAL_H */
 
index a2137e19be7d86846633e6d7acca6dec59e98c77..b7c97f1c47c9244a67ad2cc5e85eab40550ba813 100644 (file)
@@ -409,7 +409,6 @@ int crypto_has_alg(const char *name, u32 type, u32 mask);
  */
 
 struct crypto_tfm {
-       refcount_t refcnt;
 
        u32 crt_flags;