Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'drm-msm-fixes-2022-06-28' of https://gitlab.freedesktop.org/drm/msm into drm-fixes

Fixes for v5.19-rc5

- Fix to increment vsync_cnt before calling drm_crtc_handle_vblank so that
userspace sees the value *after* it is incremented if waiting for vblank
events
- Fix to reset drm_dev to NULL in dp_display_unbind to avoid a crash in
probe/bind error paths
- Fix to resolve the smatch error of de-referencing before NULL check in
dpu_encoder_phys_wb.c
- Fix error return to userspace if fence-id allocation fails in submit
ioctl

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Rob Clark <robdclark@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/CAF6AEGvswNKdd02EYKYv5Zjv7f+mcqeWC7hHQ1SBjqYzN_ZHnA@mail.gmail.com

+10 -7
+2 -1
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
··· 1251 1251 DPU_ATRACE_BEGIN("encoder_vblank_callback"); 1252 1252 dpu_enc = to_dpu_encoder_virt(drm_enc); 1253 1253 1254 + atomic_inc(&phy_enc->vsync_cnt); 1255 + 1254 1256 spin_lock_irqsave(&dpu_enc->enc_spinlock, lock_flags); 1255 1257 if (dpu_enc->crtc) 1256 1258 dpu_crtc_vblank_callback(dpu_enc->crtc); 1257 1259 spin_unlock_irqrestore(&dpu_enc->enc_spinlock, lock_flags); 1258 1260 1259 - atomic_inc(&phy_enc->vsync_cnt); 1260 1261 DPU_ATRACE_END("encoder_vblank_callback"); 1261 1262 } 1262 1263
+5 -5
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c
··· 252 252 DPU_DEBUG("[atomic_check:%d, \"%s\",%d,%d]\n", 253 253 phys_enc->wb_idx, mode->name, mode->hdisplay, mode->vdisplay); 254 254 255 - if (!conn_state->writeback_job || !conn_state->writeback_job->fb) 256 - return 0; 257 - 258 - fb = conn_state->writeback_job->fb; 259 - 260 255 if (!conn_state || !conn_state->connector) { 261 256 DPU_ERROR("invalid connector state\n"); 262 257 return -EINVAL; ··· 261 266 conn_state->connector->status); 262 267 return -EINVAL; 263 268 } 269 + 270 + if (!conn_state->writeback_job || !conn_state->writeback_job->fb) 271 + return 0; 272 + 273 + fb = conn_state->writeback_job->fb; 264 274 265 275 DPU_DEBUG("[fb_id:%u][fb:%u,%u]\n", fb->base.id, 266 276 fb->width, fb->height);
+2
drivers/gpu/drm/msm/dp/dp_display.c
··· 316 316 317 317 dp_power_client_deinit(dp->power); 318 318 dp_aux_unregister(dp->aux); 319 + dp->drm_dev = NULL; 320 + dp->aux->drm_dev = NULL; 319 321 priv->dp[dp->id] = NULL; 320 322 } 321 323
+1 -1
drivers/gpu/drm/msm/msm_gem_submit.c
··· 928 928 INT_MAX, GFP_KERNEL); 929 929 } 930 930 if (submit->fence_id < 0) { 931 - ret = submit->fence_id = 0; 931 + ret = submit->fence_id; 932 932 submit->fence_id = 0; 933 933 } 934 934