drm/tegra: gem: oops in error handling
authorDan Carpenter <dan.carpenter@oracle.com>
Fri, 16 Jan 2015 10:43:42 +0000 (13:43 +0300)
committerThierry Reding <treding@nvidia.com>
Tue, 27 Jan 2015 09:14:41 +0000 (10:14 +0100)
kfree(ERR_PTR(-ENOMEM)) will not work very well.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/gpu/drm/tegra/gem.c

index 1ccde09d01c8bc1687b7eeadc4baa94b8c2d9651..cfb481943b6b5741e6538fa4ebf1bc5b56c9d4a7 100644 (file)
@@ -214,10 +214,8 @@ static int tegra_bo_get_pages(struct drm_device *drm, struct tegra_bo *bo)
        for_each_sg(sgt->sgl, s, sgt->nents, i)
                sg_dma_address(s) = sg_phys(s);
 
-       if (dma_map_sg(drm->dev, sgt->sgl, sgt->nents, DMA_TO_DEVICE) == 0) {
-               sgt = ERR_PTR(-ENOMEM);
+       if (dma_map_sg(drm->dev, sgt->sgl, sgt->nents, DMA_TO_DEVICE) == 0)
                goto release_sgt;
-       }
 
        bo->sgt = sgt;
 
@@ -226,6 +224,7 @@ static int tegra_bo_get_pages(struct drm_device *drm, struct tegra_bo *bo)
 release_sgt:
        sg_free_table(sgt);
        kfree(sgt);
+       sgt = ERR_PTR(-ENOMEM);
 put_pages:
        drm_gem_put_pages(&bo->gem, bo->pages, false, false);
        return PTR_ERR(sgt);