]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
crypto: omap - add omap_aes_unregister_algs helper
authorThorsten Blum <thorsten.blum@linux.dev>
Mon, 27 Apr 2026 17:20:18 +0000 (19:20 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Thu, 7 May 2026 08:10:02 +0000 (16:10 +0800)
Add a new helper omap_aes_unregister_algs() and replace two for loops in
omap_aes_probe() and omap_aes_remove(), which also ensure ->registered
is reset to 0.

Replace two additional for loops with crypto_engine_unregister_aeads()
while at it and reset ->registered to 0 explicitly.

Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/omap-aes.c

index 3eadaf7a64fabc1922ab9c98783c71c9525410f5..f31555c0d715b90529550248e141ad1785af304f 100644 (file)
@@ -1089,6 +1089,20 @@ static struct attribute *omap_aes_attrs[] = {
 };
 ATTRIBUTE_GROUPS(omap_aes);
 
+static void omap_aes_unregister_algs(const struct omap_aes_pdata *pdata)
+{
+       struct omap_aes_algs_info *alg_info;
+       int i;
+
+       for (i = pdata->algs_info_size - 1; i >= 0; i--) {
+               alg_info = &pdata->algs_info[i];
+
+               crypto_engine_unregister_skciphers(alg_info->algs_list,
+                                                  alg_info->registered);
+               alg_info->registered = 0;
+       }
+}
+
 static int omap_aes_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
@@ -1215,15 +1229,11 @@ static int omap_aes_probe(struct platform_device *pdev)
 
        return 0;
 err_aead_algs:
-       for (i = dd->pdata->aead_algs_info->registered - 1; i >= 0; i--) {
-               aalg = &dd->pdata->aead_algs_info->algs_list[i];
-               crypto_engine_unregister_aead(aalg);
-       }
+       crypto_engine_unregister_aeads(dd->pdata->aead_algs_info->algs_list,
+                                      dd->pdata->aead_algs_info->registered);
+       dd->pdata->aead_algs_info->registered = 0;
 err_algs:
-       for (i = dd->pdata->algs_info_size - 1; i >= 0; i--)
-               for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--)
-                       crypto_engine_unregister_skcipher(
-                                       &dd->pdata->algs_info[i].algs_list[j]);
+       omap_aes_unregister_algs(dd->pdata);
 
 err_engine:
        if (dd->engine)
@@ -1244,25 +1254,16 @@ err_data:
 static void omap_aes_remove(struct platform_device *pdev)
 {
        struct omap_aes_dev *dd = platform_get_drvdata(pdev);
-       struct aead_engine_alg *aalg;
-       int i, j;
 
        spin_lock_bh(&list_lock);
        list_del(&dd->list);
        spin_unlock_bh(&list_lock);
 
-       for (i = dd->pdata->algs_info_size - 1; i >= 0; i--)
-               for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--) {
-                       crypto_engine_unregister_skcipher(
-                                       &dd->pdata->algs_info[i].algs_list[j]);
-                       dd->pdata->algs_info[i].registered--;
-               }
+       omap_aes_unregister_algs(dd->pdata);
 
-       for (i = dd->pdata->aead_algs_info->registered - 1; i >= 0; i--) {
-               aalg = &dd->pdata->aead_algs_info->algs_list[i];
-               crypto_engine_unregister_aead(aalg);
-               dd->pdata->aead_algs_info->registered--;
-       }
+       crypto_engine_unregister_aeads(dd->pdata->aead_algs_info->algs_list,
+                                      dd->pdata->aead_algs_info->registered);
+       dd->pdata->aead_algs_info->registered = 0;
 
        crypto_engine_exit(dd->engine);