drm/msm: dpu: Fix memory leak caused by dropped reference
authorSean Paul <seanpaul@chromium.org>
Thu, 4 Oct 2018 18:09:44 +0000 (14:09 -0400)
committerRob Clark <robdclark@gmail.com>
Sun, 7 Oct 2018 18:40:28 +0000 (14:40 -0400)
We are currently leaking a drm_crtc_commit struct for every atomic
commit containing plane state. The dpu plane destroy function cleans up
the fb reference manually, but fails to release the commit ref. As a
result, we just keep allocating drm_crtc_commits without ever freeing
them. Fortunately there's a helper function which will clean up all of
our mess at once, so use that.

Thanks to Doug Anderson for reporting the memory leak (and leaving
breadcrumbs from kmemleak!).

Reported-by: Doug Anderson <dianders@chromium.org>
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Signed-off-by: Rob Clark <robdclark@gmail.com>
drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c

index fc59a69aa8323e0ad5113e31500e28d25a6bd577..f549daf30fe6d39b2c2f3e78f145f14d50db9a40 100644 (file)
@@ -1203,9 +1203,7 @@ static void dpu_plane_destroy_state(struct drm_plane *plane,
 
        pstate = to_dpu_plane_state(state);
 
-       /* remove ref count for frame buffers */
-       if (state->fb)
-               drm_framebuffer_put(state->fb);
+       __drm_atomic_helper_plane_destroy_state(state);
 
        kfree(pstate);
 }