]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/msm/dpu: check dpu_plane_atomic_print_state() for valid sspp
authorAbhinav Kumar <quic_abhinavk@quicinc.com>
Wed, 11 Dec 2024 19:50:26 +0000 (11:50 -0800)
committerAbhinav Kumar <quic_abhinavk@quicinc.com>
Thu, 12 Dec 2024 20:03:36 +0000 (12:03 -0800)
Similar to the r_pipe sspp protect, add a check to protect
the pipe state prints to avoid NULL ptr dereference for cases when
the state is dumped without a corresponding atomic_check() where the
pipe->sspp is assigned.

Fixes: 31f7148fd370 ("drm/msm/dpu: move pstate->pipe initialization to dpu_plane_atomic_check")
Reported-by: Stephen Boyd <swboyd@chromium.org>
Closes: https://gitlab.freedesktop.org/drm/msm/-/issues/67
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Tested-by: Douglas Anderson <dianders@chromium.org>
Tested-by: Stephen Boyd <swboyd@chromium.org> # sc7180-trogdor
Patchwork: https://patchwork.freedesktop.org/patch/628404/
Link: https://lore.kernel.org/r/20241211-check-state-before-dump-v2-1-62647a501e8c@quicinc.com
Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c

index 3ffac24333a2a5b01135d4ece418432d4a74dc04..703e58901d53f26eba69566c2784655015c6a584 100644 (file)
@@ -1335,12 +1335,15 @@ static void dpu_plane_atomic_print_state(struct drm_printer *p,
 
        drm_printf(p, "\tstage=%d\n", pstate->stage);
 
-       drm_printf(p, "\tsspp[0]=%s\n", pipe->sspp->cap->name);
-       drm_printf(p, "\tmultirect_mode[0]=%s\n", dpu_get_multirect_mode(pipe->multirect_mode));
-       drm_printf(p, "\tmultirect_index[0]=%s\n",
-                  dpu_get_multirect_index(pipe->multirect_index));
-       drm_printf(p, "\tsrc[0]=" DRM_RECT_FMT "\n", DRM_RECT_ARG(&pipe_cfg->src_rect));
-       drm_printf(p, "\tdst[0]=" DRM_RECT_FMT "\n", DRM_RECT_ARG(&pipe_cfg->dst_rect));
+       if (pipe->sspp) {
+               drm_printf(p, "\tsspp[0]=%s\n", pipe->sspp->cap->name);
+               drm_printf(p, "\tmultirect_mode[0]=%s\n",
+                          dpu_get_multirect_mode(pipe->multirect_mode));
+               drm_printf(p, "\tmultirect_index[0]=%s\n",
+                          dpu_get_multirect_index(pipe->multirect_index));
+               drm_printf(p, "\tsrc[0]=" DRM_RECT_FMT "\n", DRM_RECT_ARG(&pipe_cfg->src_rect));
+               drm_printf(p, "\tdst[0]=" DRM_RECT_FMT "\n", DRM_RECT_ARG(&pipe_cfg->dst_rect));
+       }
 
        if (r_pipe->sspp) {
                drm_printf(p, "\tsspp[1]=%s\n", r_pipe->sspp->cap->name);