Skip to content

Commit

Permalink
hwrng: amd - Migrate to managed API
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
PrasannaKumar Muralidharan authored and Herbert Xu committed Sep 13, 2016
1 parent 58b022a commit 31b2a73
Showing 1 changed file with 11 additions and 37 deletions.
48 changes: 11 additions & 37 deletions drivers/char/hw_random/amd-rng.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -149,58 +148,33 @@ static int __init mod_init(void)
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);
Expand Down

0 comments on commit 31b2a73

Please sign in to comment.