drm/msm: fix leak in failed submit path
Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
6860b56c4b
commit
40e6815bba
@ -161,6 +161,7 @@ int msm_atomic_commit(struct drm_device *dev,
|
|||||||
|
|
||||||
int msm_register_mmu(struct drm_device *dev, struct msm_mmu *mmu);
|
int msm_register_mmu(struct drm_device *dev, struct msm_mmu *mmu);
|
||||||
|
|
||||||
|
void msm_gem_submit_free(struct msm_gem_submit *submit);
|
||||||
int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
|
int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
|
||||||
struct drm_file *file);
|
struct drm_file *file);
|
||||||
|
|
||||||
|
@ -56,6 +56,13 @@ static struct msm_gem_submit *submit_create(struct drm_device *dev,
|
|||||||
return submit;
|
return submit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void msm_gem_submit_free(struct msm_gem_submit *submit)
|
||||||
|
{
|
||||||
|
fence_put(submit->fence);
|
||||||
|
list_del(&submit->node);
|
||||||
|
kfree(submit);
|
||||||
|
}
|
||||||
|
|
||||||
static int submit_lookup_objects(struct msm_gem_submit *submit,
|
static int submit_lookup_objects(struct msm_gem_submit *submit,
|
||||||
struct drm_msm_gem_submit *args, struct drm_file *file)
|
struct drm_msm_gem_submit *args, struct drm_file *file)
|
||||||
{
|
{
|
||||||
@ -324,7 +331,7 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void submit_cleanup(struct msm_gem_submit *submit, bool fail)
|
static void submit_cleanup(struct msm_gem_submit *submit)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
@ -448,7 +455,9 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
|
|||||||
args->fence = submit->fence->seqno;
|
args->fence = submit->fence->seqno;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
submit_cleanup(submit, !!ret);
|
submit_cleanup(submit);
|
||||||
|
if (ret)
|
||||||
|
msm_gem_submit_free(submit);
|
||||||
mutex_unlock(&dev->struct_mutex);
|
mutex_unlock(&dev->struct_mutex);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -446,9 +446,7 @@ static void retire_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit)
|
|||||||
drm_gem_object_unreference(&msm_obj->base);
|
drm_gem_object_unreference(&msm_obj->base);
|
||||||
}
|
}
|
||||||
|
|
||||||
fence_put(submit->fence);
|
msm_gem_submit_free(submit);
|
||||||
list_del(&submit->node);
|
|
||||||
kfree(submit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void retire_submits(struct msm_gpu *gpu)
|
static void retire_submits(struct msm_gpu *gpu)
|
||||||
|
Loading…
Reference in New Issue
Block a user