hwrng: amd - manage resource allocation
authorDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Wed, 27 Apr 2011 19:21:15 +0000 (23:21 +0400)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 4 May 2011 05:13:15 +0000 (15:13 +1000)
As amd driver doesn't bind to PCI device, we'd better manage reource
allocation on our own to disallow (possible) conflicts.

Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Acked-by: Matt Mackall <mpm@selenic.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/char/hw_random/amd-rng.c

index 0d8c5788b8e4e136313035b534f2cd096e81d442..c6af038682f1904c17e1e7d47a8b310a96f894c9 100644 (file)
@@ -133,6 +133,12 @@ found:
        pmbase &= 0x0000FF00;
        if (pmbase == 0)
                goto out;
+       if (!request_region(pmbase + 0xF0, 8, "AMD HWRNG")) {
+               dev_err(&pdev->dev, "AMD HWRNG region 0x%x already in use!\n",
+                       pmbase + 0xF0);
+               err = -EBUSY;
+               goto out;
+       }
        amd_rng.priv = (unsigned long)pmbase;
        amd_pdev = pdev;
 
@@ -141,6 +147,7 @@ found:
        if (err) {
                printk(KERN_ERR PFX "RNG registering failed (%d)\n",
                       err);
+               release_region(pmbase + 0xF0, 8);
                goto out;
        }
 out:
@@ -149,6 +156,8 @@ out:
 
 static void __exit mod_exit(void)
 {
+       u32 pmbase = (unsigned long)amd_rng.priv;
+       release_region(pmbase + 0xF0, 8);
        hwrng_unregister(&amd_rng);
 }