]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
video: tegra: nvmap: initialize nvmap_dev first
authorSri Krishna chowdary <schowdary@nvidia.com>
Fri, 27 Feb 2015 10:14:37 +0000 (15:44 +0530)
committerSri Krishna Chowdary <schowdary@nvidia.com>
Mon, 2 Mar 2015 04:04:00 +0000 (20:04 -0800)
Initialize nvmap_dev before any other initialization happens so
that any information global to nvmap can be stored in this pointer.

Bug 1605798

Change-Id: I34f6ff80758d6caccc65b325f7a4d1561f7fd5b1
Signed-off-by: Sri Krishna chowdary <schowdary@nvidia.com>
Reviewed-on: http://git-master/r/711964
Reviewed-by: Krishna Reddy <vdumpa@nvidia.com>
drivers/video/tegra/nvmap/nvmap_dev.c

index b5bb082bdd7b275d045ec2e5b6a5d21f7f3c77ca..3d125e1219bf44dd29bd3d760951dd3b33417565 100644 (file)
@@ -1605,11 +1605,26 @@ int nvmap_probe(struct platform_device *pdev)
        unsigned int i;
        int e;
 
+       if (WARN_ON(nvmap_dev != NULL)) {
+               dev_err(&pdev->dev, "only one nvmap device may be present\n");
+               return -ENODEV;
+       }
+
+       dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+       if (!dev) {
+               dev_err(&pdev->dev, "out of memory for device\n");
+               return -ENOMEM;
+       }
+
+       nvmap_dev = dev;
+
        nvmap_init(pdev);
 
        plat = pdev->dev.platform_data;
        if (!plat) {
                dev_err(&pdev->dev, "no platform data?\n");
+               nvmap_dev = NULL;
+               kfree(dev);
                return -ENODEV;
        }
 
@@ -1620,20 +1635,6 @@ int nvmap_probe(struct platform_device *pdev)
         * as separate IO virtual address ranges.
         */
        pdev->dev.dma_parms = &nvmap_dma_parameters;
-
-       if (WARN_ON(nvmap_dev != NULL)) {
-               dev_err(&pdev->dev, "only one nvmap device may be present\n");
-               return -ENODEV;
-       }
-
-       dev = kzalloc(sizeof(*dev), GFP_KERNEL);
-       if (!dev) {
-               dev_err(&pdev->dev, "out of memory for device\n");
-               return -ENOMEM;
-       }
-
-       nvmap_dev = dev;
-
        dev->dev_user.minor = MISC_DYNAMIC_MINOR;
        dev->dev_user.name = "nvmap";
        dev->dev_user.fops = &nvmap_user_fops;
@@ -1781,8 +1782,8 @@ fail:
        kfree(dev->heaps);
        if (dev->dev_user.minor != MISC_DYNAMIC_MINOR)
                misc_deregister(&dev->dev_user);
-       kfree(dev);
        nvmap_dev = NULL;
+       kfree(dev);
        return e;
 }