]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
video: tegra: host: fix Coverity issues of gk20a
authorDeepak Nibade <dnibade@nvidia.com>
Wed, 4 Dec 2013 14:19:39 +0000 (19:49 +0530)
committerSachin Nikam <snikam@nvidia.com>
Fri, 6 Dec 2013 05:21:08 +0000 (21:21 -0800)
fix resource leak of variable 'ops'
Coverity id : 25123
fix unchecked return value
Coverity id : 24872
fix unsigned comparison against zero
Coverity id : 25102
fix explicit NULL dereference
Coverity id : 25082
fix dereference after NULL check
Coverity id : 24875
Coverity id : 25083
fix dead code
Coverity id : 24873
Coverity id : 24885
Coverity id : 24886

Bug 1416640

Change-Id: If49b0766633e704e353c0d4e28b500c83783a295
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: http://git-master/r/338317
Reviewed-by: Sachin Nikam <snikam@nvidia.com>
Tested-by: Sachin Nikam <snikam@nvidia.com>
drivers/video/tegra/host/gk20a/dbg_gpu_gk20a.c
drivers/video/tegra/host/gk20a/fifo_gk20a.c
drivers/video/tegra/host/gk20a/gk20a.c
drivers/video/tegra/host/gk20a/gr_gk20a.c
drivers/video/tegra/host/gk20a/mm_gk20a.c

index f73ef20b9d2142514f1bdb4402222d189c81079a..445df3f5031218ffa0f4c33baf1fa1f8f5e5c166 100644 (file)
@@ -490,7 +490,8 @@ static int nvhost_ioctl_channel_reg_ops(struct dbg_session_gk20a *dbg_s,
 
        if (copy_from_user(ops, (void *)(uintptr_t)args->ops, ops_size)) {
                dev_err(dev, "copy_from_user failed!");
-               return -EFAULT;
+               err = -EFAULT;
+               goto clean_up;
        }
 
        /* mutual exclusion for multiple debug sessions */
@@ -502,16 +503,20 @@ static int nvhost_ioctl_channel_reg_ops(struct dbg_session_gk20a *dbg_s,
 
        if (err) {
                nvhost_err(dev, "dbg regops failed");
-               return err;
+               goto clean_up;
        }
 
        nvhost_dbg_fn("Copying result to userspace");
 
        if (copy_to_user((void *)(uintptr_t)args->ops, ops, ops_size)) {
                dev_err(dev, "copy_to_user failed!");
-               return -EFAULT;
+               err = -EFAULT;
+               goto clean_up;
        }
        return 0;
+ clean_up:
+       kfree(ops);
+       return err;
 }
 
 static int dbg_set_powergate(struct dbg_session_gk20a *dbg_s,
index ad47ee82c39e1318b60b57177d572e6839671452..5176eea83482898fbfb8f39a852e0110aa5ab1ee 100644 (file)
@@ -1556,7 +1556,9 @@ clean_up:
 
        if (err) {
                nvhost_dbg_fn("failed");
-               gk20a_fifo_enable_engine_activity(g, eng_info);
+               if (gk20a_fifo_enable_engine_activity(g, eng_info))
+                       nvhost_err(dev_from_gk20a(g),
+                               "failed to enable gr engine activity\n");
        } else {
                nvhost_dbg_fn("done");
        }
@@ -1596,8 +1598,6 @@ static int gk20a_fifo_runlist_wait_pending(struct gk20a *g, u32 runlist_id)
 
        if (remain == 0 && pending != 0)
                return -ETIMEDOUT;
-       else if (remain < 0)
-               return -EINTR;
 
        return 0;
 }
index 14b6e145cc2e6bfb7a231fcefd3ac61209d74c3c..8c045f6ff5fdcb5fdc3de8b0c5a8d92612c7eedc 100644 (file)
@@ -922,6 +922,11 @@ static int gk20a_probe(struct platform_device *dev)
        } else
                pdata = (struct nvhost_device_data *)dev->dev.platform_data;
 
+       if (!pdata) {
+               dev_err(&dev->dev, "no platform data\n");
+               return -ENODATA;
+       }
+
        nvhost_dbg_fn("");
        pdata->pdev = dev;
        mutex_init(&pdata->lock);
@@ -1032,7 +1037,7 @@ static int __exit gk20a_remove(struct platform_device *dev)
        cfb_remove_device(&dev->dev);
 #endif
 
-       if (g && g->remove_support)
+       if (g->remove_support)
                g->remove_support(dev);
 
        set_gk20a(dev, 0);
index 0bc105cbaf72bb3bb72f8b99bf0e888f3e0a9626..20628de3fc9351c5cc84eaaf93f336c51c769817 100644 (file)
@@ -664,7 +664,6 @@ static int gr_gk20a_commit_inst(struct channel_gk20a *c, u64 gpu_va)
 {
        u32 addr_lo;
        u32 addr_hi;
-       u32 ret = 0;
        void *inst_ptr = NULL;
 
        nvhost_dbg_fn("");
@@ -674,10 +673,8 @@ static int gr_gk20a_commit_inst(struct channel_gk20a *c, u64 gpu_va)
        gk20a_mm_l2_flush(c->g, true);
 
        inst_ptr = nvhost_memmgr_mmap(c->inst_block.mem.ref);
-       if (!inst_ptr) {
-               ret = -ENOMEM;
-               goto clean_up;
-       }
+       if (!inst_ptr)
+               return -ENOMEM;
 
        addr_lo = u64_lo32(gpu_va) >> 12;
        addr_hi = u64_hi32(gpu_va);
@@ -694,12 +691,6 @@ static int gr_gk20a_commit_inst(struct channel_gk20a *c, u64 gpu_va)
        gk20a_mm_l2_invalidate(c->g);
 
        return 0;
-
-clean_up:
-       if (inst_ptr)
-               nvhost_memmgr_munmap(c->inst_block.mem.ref, inst_ptr);
-
-       return ret;
 }
 
 /*
@@ -3899,7 +3890,7 @@ static int gr_gk20a_zcull_init_hw(struct gk20a *g, struct gr_gk20a *gr)
        zcull_bank_counters = kzalloc(proj_scal_max_gpcs_v() *
                        proj_scal_max_tpc_per_gpc_v() * sizeof(u32), GFP_KERNEL);
 
-       if (!zcull_map_tiles && !zcull_bank_counters) {
+       if (!zcull_map_tiles || !zcull_bank_counters) {
                nvhost_err(dev_from_gk20a(g),
                        "failed to allocate zcull temp buffers");
                return -ENOMEM;
index e6f21972d73c0affae6496a2e74ca13438d1338c..7834a8ebbd1a7b994d24a88beb76f3a0cd4476a2 100644 (file)
@@ -2101,7 +2101,7 @@ int gk20a_init_bar1_vm(struct mm_gk20a *mm)
 
        inst_ptr = nvhost_memmgr_mmap(inst_block->mem.ref);
        if (IS_ERR(inst_ptr)) {
-               return -ENOMEM;
+               err = -ENOMEM;
                goto clean_up;
        }
 
@@ -2247,7 +2247,7 @@ int gk20a_init_pmu_vm(struct mm_gk20a *mm)
 
        inst_ptr = nvhost_memmgr_mmap(inst_block->mem.ref);
        if (IS_ERR(inst_ptr)) {
-               return -ENOMEM;
+               err = -ENOMEM;
                goto clean_up;
        }