diff options
Diffstat (limited to 'drivers/gpu/drm/exynos/exynos_drm_drv.c')
| -rw-r--r-- | drivers/gpu/drm/exynos/exynos_drm_drv.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c index 9d096a0c5f8d..215131ab1dd2 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c | |||
| @@ -171,22 +171,24 @@ static int exynos_drm_open(struct drm_device *dev, struct drm_file *file) | |||
| 171 | file->driver_priv = file_priv; | 171 | file->driver_priv = file_priv; |
| 172 | 172 | ||
| 173 | ret = exynos_drm_subdrv_open(dev, file); | 173 | ret = exynos_drm_subdrv_open(dev, file); |
| 174 | if (ret) { | 174 | if (ret) |
| 175 | kfree(file_priv); | 175 | goto out; |
| 176 | file->driver_priv = NULL; | ||
| 177 | } | ||
| 178 | 176 | ||
| 179 | anon_filp = anon_inode_getfile("exynos_gem", &exynos_drm_gem_fops, | 177 | anon_filp = anon_inode_getfile("exynos_gem", &exynos_drm_gem_fops, |
| 180 | NULL, 0); | 178 | NULL, 0); |
| 181 | if (IS_ERR(anon_filp)) { | 179 | if (IS_ERR(anon_filp)) { |
| 182 | kfree(file_priv); | 180 | ret = PTR_ERR(anon_filp); |
| 183 | return PTR_ERR(anon_filp); | 181 | goto out; |
| 184 | } | 182 | } |
| 185 | 183 | ||
| 186 | anon_filp->f_mode = FMODE_READ | FMODE_WRITE; | 184 | anon_filp->f_mode = FMODE_READ | FMODE_WRITE; |
| 187 | file_priv->anon_filp = anon_filp; | 185 | file_priv->anon_filp = anon_filp; |
| 188 | 186 | ||
| 189 | return ret; | 187 | return ret; |
| 188 | out: | ||
| 189 | kfree(file_priv); | ||
| 190 | file->driver_priv = NULL; | ||
| 191 | return ret; | ||
| 190 | } | 192 | } |
| 191 | 193 | ||
| 192 | static void exynos_drm_preclose(struct drm_device *dev, | 194 | static void exynos_drm_preclose(struct drm_device *dev, |
