]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915: clear CRTC color blob pointers after dropping refs
authorGuangshuo Li <lgs201920130244@gmail.com>
Fri, 12 Jun 2026 03:53:10 +0000 (11:53 +0800)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 16 Jun 2026 17:06:03 +0000 (13:06 -0400)
intel_crtc_put_color_blobs() drops the CRTC color blob references, but
leaves the corresponding pointers unchanged.

This can matter in intel_crtc_prepare_cleared_state(), which frees the
old CRTC hw state before calling intel_dp_tunnel_atomic_clear_stream_bw().
The latter can fail while looking up the DP tunnel group state, for
example with -EDEADLK.

If that happens, the function returns without completing the cleared
state preparation. The failed atomic state will then be cleared by the
atomic core and intel_crtc_free_hw_state() can be called again for the
same state, dropping the same blob references again.

Clear the blob pointers after dropping the references so repeated cleanup
of the same CRTC hw state is safe.

Fixes: 77fcf58df15e ("drm/i915/dp_tunnel: Fix error handling when clearing stream BW in atomic state")
Suggested-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Link: https://patch.msgid.link/20260612035310.3013066-1-lgs201920130244@gmail.com
(cherry picked from commit d5005addb5f68e8a0edce249506757bdc9e3d8c8)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/i915/display/intel_atomic.c

index 0e4f0678c53cd34145f756669580e1a376f612d4..9d0d47c79dd12dd48d98d92022c4655ccff775b1 100644 (file)
@@ -288,6 +288,12 @@ static void intel_crtc_put_color_blobs(struct intel_crtc_state *crtc_state)
 
        drm_property_blob_put(crtc_state->pre_csc_lut);
        drm_property_blob_put(crtc_state->post_csc_lut);
+
+       crtc_state->hw.degamma_lut = NULL;
+       crtc_state->hw.gamma_lut = NULL;
+       crtc_state->hw.ctm = NULL;
+       crtc_state->pre_csc_lut = NULL;
+       crtc_state->post_csc_lut = NULL;
 }
 
 void intel_crtc_free_hw_state(struct intel_crtc_state *crtc_state)