drm/msm/a6xx: Remove state objects from list before freeing
authorRob Clark <robdclark@chromium.org>
Thu, 13 Oct 2022 22:55:15 +0000 (15:55 -0700)
committerRob Clark <robdclark@chromium.org>
Fri, 14 Oct 2022 16:33:12 +0000 (09:33 -0700)
Technically it worked as it was before, only because it was using the
_safe version of the iterator.  But it is sloppy practice to leave
dangling pointers.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Akhil P Oommen <quic_akhilpo@quicinc.com>
Patchwork: https://patchwork.freedesktop.org/patch/507017/
Link: https://lore.kernel.org/r/20221013225520.371226-4-robdclark@gmail.com
drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c

index b0124d0..a5c3d1e 100644 (file)
@@ -1046,8 +1046,10 @@ static void a6xx_gpu_state_destroy(struct kref *kref)
        if (a6xx_state->gmu_debug)
                kvfree(a6xx_state->gmu_debug->data);
 
-       list_for_each_entry_safe(obj, tmp, &a6xx_state->objs, node)
+       list_for_each_entry_safe(obj, tmp, &a6xx_state->objs, node) {
+               list_del(&obj->node);
                kvfree(obj);
+       }
 
        adreno_gpu_state_destroy(state);
        kfree(a6xx_state);