hwrng: amd - Migrate to managed API
authorPrasannaKumar Muralidharan <prasannatsmkumar@gmail.com>
Fri, 9 Sep 2016 07:58:23 +0000 (13:28 +0530)
committerHerbert Xu <herbert@gondor.apana.org.au>
Tue, 13 Sep 2016 12:27:23 +0000 (20:27 +0800)
Managed API eliminates error handling code, thus reduces several lines
of code.

Signed-off-by: PrasannaKumar Muralidharan <prasannatsmkumar@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/char/hw_random/amd-rng.c

index 9959c762da2f8ec1f5cb0fde48021598f3deecfd..4dbc5aa233396e35c0cdc05f1bdb4d1afed39f65 100644 (file)
@@ -55,7 +55,6 @@ MODULE_DEVICE_TABLE(pci, pci_tbl);
 struct amd768_priv {
        void __iomem *iobase;
        struct pci_dev *pcidev;
-       u32 pmbase;
 };
 
 static int amd_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait)
@@ -149,58 +148,33 @@ found:
        if (pmbase == 0)
                return -EIO;
 
-       priv = kzalloc(sizeof(*priv), GFP_KERNEL);
-       if (!priv)
-               return -ENOMEM;
+       priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+       if (IS_ERR(priv))
+               return PTR_ERR(priv);
 
-       if (!request_region(pmbase + PMBASE_OFFSET, PMBASE_SIZE, DRV_NAME)) {
+       if (!devm_request_region(&pdev->dev, pmbase + PMBASE_OFFSET,
+                               PMBASE_SIZE, DRV_NAME)) {
                dev_err(&pdev->dev, DRV_NAME " region 0x%x already in use!\n",
                        pmbase + 0xF0);
-               err = -EBUSY;
-               goto out;
+               return -EBUSY;
        }
 
-       priv->iobase = ioport_map(pmbase + PMBASE_OFFSET, PMBASE_SIZE);
-       if (!priv->iobase) {
+       priv->iobase = devm_ioport_map(&pdev->dev, pmbase + PMBASE_OFFSET,
+                       PMBASE_SIZE);
+       if (IS_ERR(priv->iobase)) {
                pr_err(DRV_NAME "Cannot map ioport\n");
-               err = -EINVAL;
-               goto err_iomap;
+               return PTR_ERR(priv->iobase);
        }
 
        amd_rng.priv = (unsigned long)priv;
-       priv->pmbase = pmbase;
        priv->pcidev = pdev;
 
        pr_info(DRV_NAME " detected\n");
-       err = hwrng_register(&amd_rng);
-       if (err) {
-               pr_err(DRV_NAME " registering failed (%d)\n", err);
-               goto err_hwrng;
-       }
-       return 0;
-
-err_hwrng:
-       ioport_unmap(priv->iobase);
-err_iomap:
-       release_region(pmbase + PMBASE_OFFSET, PMBASE_SIZE);
-out:
-       kfree(priv);
-       return err;
+       return devm_hwrng_register(&pdev->dev, &amd_rng);
 }
 
 static void __exit mod_exit(void)
 {
-       struct amd768_priv *priv;
-
-       priv = (struct amd768_priv *)amd_rng.priv;
-
-       hwrng_unregister(&amd_rng);
-
-       ioport_unmap(priv->iobase);
-
-       release_region(priv->pmbase + PMBASE_OFFSET, PMBASE_SIZE);
-
-       kfree(priv);
 }
 
 module_init(mod_init);