]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
gpu: nvgpu: Fix some GPU boot error paths
authorTerje Bergstrom <tbergstrom@nvidia.com>
Thu, 26 Feb 2015 20:45:08 +0000 (12:45 -0800)
committerTerje Bergstrom <tbergstrom@nvidia.com>
Thu, 5 Mar 2015 01:47:43 +0000 (17:47 -0800)
Fix panics in error path when FECS cannot be booted.

Change-Id: I354e37579386e27f46b80cd4172fe12897a3b92f
Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com>
Reviewed-on: http://git-master/r/712698

drivers/gpu/nvgpu/gk20a/gr_gk20a.c
drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c

index 6194130180a049fac154f4eb74e15f1fcfe41e8a..a6b854c85d6d1f98d6c59be594873fcbbfaeb908 100644 (file)
@@ -2235,10 +2235,15 @@ static void gk20a_gr_destroy_ctx_buffer(struct platform_device *pdev,
        struct device *dev = &pdev->dev;
        if (!desc)
                return;
-       if (desc->sgt)
+       if (desc->sgt) {
                gk20a_free_sgtable(&desc->sgt);
-       dma_free_attrs(dev, desc->size, desc->pages,
+               desc->sgt = NULL;
+       }
+       if (desc->pages) {
+               dma_free_attrs(dev, desc->size, desc->pages,
                       desc->iova, &desc->attrs);
+               desc->pages = NULL;
+       }
 }
 
 static int gk20a_gr_alloc_ctx_buffer(struct platform_device *pdev,
@@ -4510,7 +4515,7 @@ out:
        else
                gk20a_dbg_fn("done");
 
-       return 0;
+       return err;
 }
 
 static int gk20a_init_gr_reset_enable_hw(struct gk20a *g)
index 0d5f32dd217719cf82f3a483a070fc12e80c75f5..313962a19596b3ab41d46eb51030858da53799af 100644 (file)
@@ -78,10 +78,17 @@ static int gk20a_tegra_secure_page_alloc(struct platform_device *pdev)
 static void gk20a_tegra_secure_destroy(struct platform_device *pdev,
                                       struct gr_ctx_buffer_desc *desc)
 {
-       gk20a_free_sgtable(&desc->sgt);
-       dma_free_attrs(&tegra_vpr_dev, desc->size,
+       if (desc->sgt) {
+               gk20a_free_sgtable(&desc->sgt);
+               desc->sgt = NULL;
+       }
+
+       if (desc->iova) {
+               dma_free_attrs(&tegra_vpr_dev, desc->size,
                        (void *)(uintptr_t)desc->iova,
                        desc->iova, &desc->attrs);
+               desc->iova = 0;
+       }
 }
 
 static int gk20a_tegra_secure_alloc(struct platform_device *pdev,