crypto: omap - add omap_sham_unregister_algs helper

Add a new helper omap_sham_unregister_algs() and replace two for loops
in omap_sham_probe() and omap_sham_remove(), which also ensure
->registered is reset to 0.

Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
Thorsten Blum 2026-04-27 19:20:20 +02:00 committed by Herbert Xu
parent 9ab1392b11
commit c3494e6fbb

View File

@ -2042,6 +2042,20 @@ static struct attribute *omap_sham_attrs[] = {
};
ATTRIBUTE_GROUPS(omap_sham);
static void omap_sham_unregister_algs(const struct omap_sham_pdata *pdata)
{
struct omap_sham_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_ahashes(alg_info->algs_list,
alg_info->registered);
alg_info->registered = 0;
}
}
static int omap_sham_probe(struct platform_device *pdev)
{
struct omap_sham_dev *dd;
@ -2158,10 +2172,7 @@ static int omap_sham_probe(struct platform_device *pdev)
return 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_ahash(
&dd->pdata->algs_info[i].algs_list[j]);
omap_sham_unregister_algs(dd->pdata);
err_engine_start:
crypto_engine_exit(dd->engine);
err_engine:
@ -2182,19 +2193,13 @@ static int omap_sham_probe(struct platform_device *pdev)
static void omap_sham_remove(struct platform_device *pdev)
{
struct omap_sham_dev *dd;
int i, j;
dd = platform_get_drvdata(pdev);
spin_lock_bh(&sham.lock);
list_del(&dd->list);
spin_unlock_bh(&sham.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_ahash(
&dd->pdata->algs_info[i].algs_list[j]);
dd->pdata->algs_info[i].registered--;
}
omap_sham_unregister_algs(dd->pdata);
cancel_work_sync(&dd->done_task);
pm_runtime_dont_use_autosuspend(&pdev->dev);
pm_runtime_disable(&pdev->dev);