forked from mirrors/linux
		
	hwrng: amd - Migrate to managed API
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>
This commit is contained in:
		
							parent
							
								
									58b022acac
								
							
						
					
					
						commit
						31b2a73c9c
					
				
					 1 changed files with 11 additions and 37 deletions
				
			
		| 
						 | 
				
			
			@ -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 @@ 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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue