crypto: bfin_crc - ignore duplicated registration of the same algorithm
authorSonic Zhang <sonic.zhang@analog.com>
Fri, 11 Apr 2014 09:30:25 +0000 (17:30 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 16 Apr 2014 12:40:16 +0000 (20:40 +0800)
in case of multiple crc devices are probed.
Call platform_set_drvdata() before adding new CRC device into the list.

Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Reviewed-by: Marek Vasut <marex@denx.de>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/bfin_crc.c

index cea3e8c..ce9a831 100644 (file)
@@ -665,19 +665,19 @@ static int bfin_crypto_crc_probe(struct platform_device *pdev)
        if (timeout == 0)
                dev_info(&pdev->dev, "init crc poly timeout\n");
 
+       platform_set_drvdata(pdev, crc);
+
        spin_lock(&crc_list.lock);
        list_add(&crc->list, &crc_list.dev_list);
        spin_unlock(&crc_list.lock);
 
-       platform_set_drvdata(pdev, crc);
-
-       ret = crypto_register_ahash(&algs);
-       if (ret) {
-               spin_lock(&crc_list.lock);
-               list_del(&crc->list);
-               spin_unlock(&crc_list.lock);
-               dev_err(&pdev->dev, "Cann't register crypto ahash device\n");
-               goto out_error_dma;
+       if (list_is_singular(&crc_list.dev_list)) {
+               ret = crypto_register_ahash(&algs);
+               if (ret) {
+                       dev_err(&pdev->dev,
+                               "Can't register crypto ahash device\n");
+                       goto out_error_dma;
+               }
        }
 
        dev_info(&pdev->dev, "initialized\n");