Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] drm/i915/ddi: Fix cleanup after DP connector init failure
@ 2026-05-07  6:59 Imre Deak
  2026-05-07  6:59 ` [PATCH 2/2] drm/i915/ddi: Fix cleanup after HDMI " Imre Deak
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Imre Deak @ 2026-05-07  6:59 UTC (permalink / raw)
  To: intel-gfx, intel-xe

Fix the error path during DDI encoder/connector initialization by
calling the missing TC port cleanup function.

This fixes the leaked TC port state.

Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/display/intel_ddi.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 2681940a5cfe3..e37cc32ee83ed 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -5411,7 +5411,7 @@ void intel_ddi_init(struct intel_display *display,
 	if (need_aux_ch(encoder, init_dp)) {
 		dig_port->aux_ch = intel_dp_aux_ch(encoder);
 		if (dig_port->aux_ch == AUX_CH_NONE)
-			goto err;
+			goto err_aux_ch_init;
 	}
 
 	/*
@@ -5447,7 +5447,7 @@ void intel_ddi_init(struct intel_display *display,
 		dig_port->unlock = intel_tc_port_unlock;
 
 		if (intel_tc_port_init(dig_port, is_legacy) < 0)
-			goto err;
+			goto err_aux_ch_init;
 	}
 
 	drm_WARN_ON(display->drm, port > PORT_I);
@@ -5478,7 +5478,7 @@ void intel_ddi_init(struct intel_display *display,
 
 	if (init_dp) {
 		if (intel_ddi_init_dp_connector(dig_port))
-			goto err;
+			goto err_dp_connector_init;
 
 		dig_port->hpd_pulse = intel_dp_hpd_pulse;
 
@@ -5492,12 +5492,15 @@ void intel_ddi_init(struct intel_display *display,
 	 */
 	if (encoder->type != INTEL_OUTPUT_EDP && init_hdmi) {
 		if (intel_ddi_init_hdmi_connector(dig_port))
-			goto err;
+			goto err_dp_connector_init;
 	}
 
 	return;
 
-err:
+err_dp_connector_init:
+	if (intel_encoder_is_tc(encoder))
+		intel_tc_port_cleanup(dig_port);
+err_aux_ch_init:
 	drm_encoder_cleanup(&encoder->base);
 	kfree(dig_port);
 }
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] drm/i915/ddi: Fix cleanup after HDMI connector init failure
  2026-05-07  6:59 [PATCH 1/2] drm/i915/ddi: Fix cleanup after DP connector init failure Imre Deak
@ 2026-05-07  6:59 ` Imre Deak
  2026-05-08 14:29   ` Hogander, Jouni
  2026-05-07 10:58 ` ✗ i915.CI.BAT: failure for series starting with [1/2] drm/i915/ddi: Fix cleanup after DP " Patchwork
  2026-05-08 12:26 ` [PATCH 1/2] " Hogander, Jouni
  2 siblings, 1 reply; 8+ messages in thread
From: Imre Deak @ 2026-05-07  6:59 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Sashiko

Perform the missing DDI DP connector cleanup steps after HDMI connector
initialization failure during DDI encoder/connector initialization.

This fixes the leaked DP MST encoder, AUX state, and connector object.

Reported-by: Sashiko <sashiko-bot@kernel.org>
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/display/intel_ddi.c | 14 +++++++++++++-
 drivers/gpu/drm/i915/display/intel_dp.c  | 13 +++++++++++++
 drivers/gpu/drm/i915/display/intel_dp.h  |  3 +++
 3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index e37cc32ee83ed..cd61ddb7f4696 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -4729,6 +4729,15 @@ static int intel_ddi_init_dp_connector(struct intel_digital_port *dig_port)
 	return 0;
 }
 
+static void intel_ddi_cleanup_dp_connector(struct intel_digital_port *dig_port)
+{
+	struct intel_dp *intel_dp = &dig_port->dp;
+	struct intel_connector *connector = intel_dp->attached_connector;
+
+	intel_dp_cleanup_connector(dig_port, connector);
+	kfree(connector);
+}
+
 static int intel_hdmi_reset_link(struct intel_encoder *encoder,
 				 struct drm_modeset_acquire_ctx *ctx)
 {
@@ -5492,11 +5501,14 @@ void intel_ddi_init(struct intel_display *display,
 	 */
 	if (encoder->type != INTEL_OUTPUT_EDP && init_hdmi) {
 		if (intel_ddi_init_hdmi_connector(dig_port))
-			goto err_dp_connector_init;
+			goto err_hdmi_connector_init;
 	}
 
 	return;
 
+err_hdmi_connector_init:
+	if (init_dp)
+		intel_ddi_cleanup_dp_connector(dig_port);
 err_dp_connector_init:
 	if (intel_encoder_is_tc(encoder))
 		intel_tc_port_cleanup(dig_port);
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 86123614b7bae..97c572e5a5710 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -7346,6 +7346,19 @@ intel_dp_init_connector(struct intel_digital_port *dig_port,
 	return false;
 }
 
+void intel_dp_cleanup_connector(struct intel_digital_port *dig_port,
+				struct intel_connector *connector)
+{
+	struct intel_display *display = to_intel_display(connector);
+	struct intel_dp *intel_dp = &dig_port->dp;
+
+	intel_display_power_flush_work(display);
+
+	intel_dp_mst_encoder_cleanup(dig_port);
+	intel_dp_aux_fini(intel_dp);
+	drm_connector_cleanup(&connector->base);
+}
+
 void intel_dp_mst_suspend(struct intel_display *display)
 {
 	struct intel_encoder *encoder;
diff --git a/drivers/gpu/drm/i915/display/intel_dp.h b/drivers/gpu/drm/i915/display/intel_dp.h
index 2849b9ecdc71a..f41480d247142 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.h
+++ b/drivers/gpu/drm/i915/display/intel_dp.h
@@ -48,6 +48,9 @@ intel_dp_queue_modeset_retry_for_link(struct intel_atomic_state *state,
 				      const struct intel_crtc_state *crtc_state);
 bool intel_dp_init_connector(struct intel_digital_port *dig_port,
 			     struct intel_connector *intel_connector);
+void intel_dp_cleanup_connector(struct intel_digital_port *dig_port,
+				struct intel_connector *connector);
+
 void intel_dp_connector_sync_state(struct intel_connector *connector,
 				   const struct intel_crtc_state *crtc_state);
 void intel_dp_set_link_params(struct intel_dp *intel_dp,
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* ✗ i915.CI.BAT: failure for series starting with [1/2] drm/i915/ddi: Fix cleanup after DP connector init failure
  2026-05-07  6:59 [PATCH 1/2] drm/i915/ddi: Fix cleanup after DP connector init failure Imre Deak
  2026-05-07  6:59 ` [PATCH 2/2] drm/i915/ddi: Fix cleanup after HDMI " Imre Deak
@ 2026-05-07 10:58 ` Patchwork
  2026-05-08 10:10   ` Imre Deak
  2026-05-08 12:26 ` [PATCH 1/2] " Hogander, Jouni
  2 siblings, 1 reply; 8+ messages in thread
From: Patchwork @ 2026-05-07 10:58 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-gfx

[-- Attachment #1: Type: text/plain, Size: 2524 bytes --]

== Series Details ==

Series: series starting with [1/2] drm/i915/ddi: Fix cleanup after DP connector init failure
URL   : https://patchwork.freedesktop.org/series/166105/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_18438 -> Patchwork_166105v1
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_166105v1 absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_166105v1, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_166105v1/index.html

Participating hosts (42 -> 40)
------------------------------

  Missing    (2): bat-dg2-13 fi-snb-2520m 

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_166105v1:

### IGT changes ###

#### Possible regressions ####

  * igt@i915_selftest@live@gt_lrc:
    - bat-mtlp-9:         [PASS][1] -> [INCOMPLETE][2] +1 other test incomplete
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18438/bat-mtlp-9/igt@i915_selftest@live@gt_lrc.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_166105v1/bat-mtlp-9/igt@i915_selftest@live@gt_lrc.html

  
Known issues
------------

  Here are the changes found in Patchwork_166105v1 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@i915_selftest@live:
    - bat-dg2-8:          [PASS][3] -> [DMESG-FAIL][4] ([i915#12061]) +1 other test dmesg-fail
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18438/bat-dg2-8/igt@i915_selftest@live.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_166105v1/bat-dg2-8/igt@i915_selftest@live.html

  
  [i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061


Build changes
-------------

  * Linux: CI_DRM_18438 -> Patchwork_166105v1

  CI-20190529: 20190529
  CI_DRM_18438: 30f8a0629f6924f24369cac9161b1a9741880259 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_8899: 3e5747e536f148bf232049e49a00e2b683f91a83 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_166105v1: 30f8a0629f6924f24369cac9161b1a9741880259 @ git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_166105v1/index.html

[-- Attachment #2: Type: text/html, Size: 3150 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: ✗ i915.CI.BAT: failure for series starting with [1/2] drm/i915/ddi: Fix cleanup after DP connector init failure
  2026-05-07 10:58 ` ✗ i915.CI.BAT: failure for series starting with [1/2] drm/i915/ddi: Fix cleanup after DP " Patchwork
@ 2026-05-08 10:10   ` Imre Deak
  0 siblings, 0 replies; 8+ messages in thread
From: Imre Deak @ 2026-05-08 10:10 UTC (permalink / raw)
  To: I915-ci-infra; +Cc: intel-gfx

Hi CI team,

could you forward this patchset for getting a full test coverage?

The BAT failure is unrelated to the changes, see below.

On Thu, May 07, 2026 at 10:58:10AM +0000, Patchwork wrote:
> == Series Details ==
> 
> Series: series starting with [1/2] drm/i915/ddi: Fix cleanup after DP connector init failure
> URL   : https://patchwork.freedesktop.org/series/166105/
> State : failure
> 
> == Summary ==
> 
> CI Bug Log - changes from CI_DRM_18438 -> Patchwork_166105v1
> ====================================================
> 
> Summary
> -------
> 
>   **FAILURE**
> 
>   Serious unknown changes coming with Patchwork_166105v1 absolutely need to be
>   verified manually.
>   
>   If you think the reported changes have nothing to do with the changes
>   introduced in Patchwork_166105v1, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
>   to document this new failure mode, which will reduce false positives in CI.
> 
>   External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_166105v1/index.html
> 
> Participating hosts (42 -> 40)
> ------------------------------
> 
>   Missing    (2): bat-dg2-13 fi-snb-2520m 
> 
> Possible new issues
> -------------------
> 
>   Here are the unknown changes that may have been introduced in Patchwork_166105v1:
> 
> ### IGT changes ###
> 
> #### Possible regressions ####
> 
>   * igt@i915_selftest@live@gt_lrc:
>     - bat-mtlp-9:         [PASS][1] -> [INCOMPLETE][2] +1 other test incomplete
>    [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18438/bat-mtlp-9/igt@i915_selftest@live@gt_lrc.html
>    [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_166105v1/bat-mtlp-9/igt@i915_selftest@live@gt_lrc.html

The changes in the patchset affect only error scenarios during DP/HDMI
connector registration, however there wasn't any such error occuring in
the above test run: both in the PASS and INCOMPLETE case
eDP-1/DP-1..5/HDMI-A-1 are registered without any errors.

> Known issues
> ------------
> 
>   Here are the changes found in Patchwork_166105v1 that come from known issues:
> 
> ### IGT changes ###
> 
> #### Issues hit ####
> 
>   * igt@i915_selftest@live:
>     - bat-dg2-8:          [PASS][3] -> [DMESG-FAIL][4] ([i915#12061]) +1 other test dmesg-fail
>    [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18438/bat-dg2-8/igt@i915_selftest@live.html
>    [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_166105v1/bat-dg2-8/igt@i915_selftest@live.html
> 
>   
>   [i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
> 
> 
> Build changes
> -------------
> 
>   * Linux: CI_DRM_18438 -> Patchwork_166105v1
> 
>   CI-20190529: 20190529
>   CI_DRM_18438: 30f8a0629f6924f24369cac9161b1a9741880259 @ git://anongit.freedesktop.org/gfx-ci/linux
>   IGT_8899: 3e5747e536f148bf232049e49a00e2b683f91a83 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
>   Patchwork_166105v1: 30f8a0629f6924f24369cac9161b1a9741880259 @ git://anongit.freedesktop.org/gfx-ci/linux
> 
> == Logs ==
> 
> For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_166105v1/index.html

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] drm/i915/ddi: Fix cleanup after DP connector init failure
  2026-05-07  6:59 [PATCH 1/2] drm/i915/ddi: Fix cleanup after DP connector init failure Imre Deak
  2026-05-07  6:59 ` [PATCH 2/2] drm/i915/ddi: Fix cleanup after HDMI " Imre Deak
  2026-05-07 10:58 ` ✗ i915.CI.BAT: failure for series starting with [1/2] drm/i915/ddi: Fix cleanup after DP " Patchwork
@ 2026-05-08 12:26 ` Hogander, Jouni
  2026-05-08 12:38   ` Imre Deak
  2 siblings, 1 reply; 8+ messages in thread
From: Hogander, Jouni @ 2026-05-08 12:26 UTC (permalink / raw)
  To: intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	Deak, Imre

On Thu, 2026-05-07 at 09:59 +0300, Imre Deak wrote:
> Fix the error path during DDI encoder/connector initialization by
> calling the missing TC port cleanup function.
> 
> This fixes the leaked TC port state.

Do we need "Fixes:" line here? Otherwise patch looks ok:

Reviewed-by: Jouni Högander <jouni.hogander@intel.com>

> 
> Signed-off-by: Imre Deak <imre.deak@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_ddi.c | 13 ++++++++-----
>  1 file changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 2681940a5cfe3..e37cc32ee83ed 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -5411,7 +5411,7 @@ void intel_ddi_init(struct intel_display
> *display,
>  	if (need_aux_ch(encoder, init_dp)) {
>  		dig_port->aux_ch = intel_dp_aux_ch(encoder);
>  		if (dig_port->aux_ch == AUX_CH_NONE)
> -			goto err;
> +			goto err_aux_ch_init;
>  	}
>  
>  	/*
> @@ -5447,7 +5447,7 @@ void intel_ddi_init(struct intel_display
> *display,
>  		dig_port->unlock = intel_tc_port_unlock;
>  
>  		if (intel_tc_port_init(dig_port, is_legacy) < 0)
> -			goto err;
> +			goto err_aux_ch_init;
>  	}
>  
>  	drm_WARN_ON(display->drm, port > PORT_I);
> @@ -5478,7 +5478,7 @@ void intel_ddi_init(struct intel_display
> *display,
>  
>  	if (init_dp) {
>  		if (intel_ddi_init_dp_connector(dig_port))
> -			goto err;
> +			goto err_dp_connector_init;
>  
>  		dig_port->hpd_pulse = intel_dp_hpd_pulse;
>  
> @@ -5492,12 +5492,15 @@ void intel_ddi_init(struct intel_display
> *display,
>  	 */
>  	if (encoder->type != INTEL_OUTPUT_EDP && init_hdmi) {
>  		if (intel_ddi_init_hdmi_connector(dig_port))
> -			goto err;
> +			goto err_dp_connector_init;
>  	}
>  
>  	return;
>  
> -err:
> +err_dp_connector_init:
> +	if (intel_encoder_is_tc(encoder))
> +		intel_tc_port_cleanup(dig_port);
> +err_aux_ch_init:
>  	drm_encoder_cleanup(&encoder->base);
>  	kfree(dig_port);
>  }


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] drm/i915/ddi: Fix cleanup after DP connector init failure
  2026-05-08 12:26 ` [PATCH 1/2] " Hogander, Jouni
@ 2026-05-08 12:38   ` Imre Deak
  0 siblings, 0 replies; 8+ messages in thread
From: Imre Deak @ 2026-05-08 12:38 UTC (permalink / raw)
  To: Hogander, Jouni
  Cc: intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org

On Fri, May 08, 2026 at 03:26:43PM +0300, Hogander, Jouni wrote:
> On Thu, 2026-05-07 at 09:59 +0300, Imre Deak wrote:
> > Fix the error path during DDI encoder/connector initialization by
> > calling the missing TC port cleanup function.
> > 
> > This fixes the leaked TC port state.
> 
> Do we need "Fixes:" line here? Otherwise patch looks ok:

Wondered about it too. Fixes: involves the automatic stable backporting
of the patch and the criteria for a stable backport is whether the patch
fixes an actual usecase for someone. The likelihood for that is close to
0, it's an error path and even if that ran for someone (due to -ENOMEM)
the leaks wouldn't be the real issue.

> Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
> 
> > 
> > Signed-off-by: Imre Deak <imre.deak@intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_ddi.c | 13 ++++++++-----
> >  1 file changed, 8 insertions(+), 5 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> > b/drivers/gpu/drm/i915/display/intel_ddi.c
> > index 2681940a5cfe3..e37cc32ee83ed 100644
> > --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> > @@ -5411,7 +5411,7 @@ void intel_ddi_init(struct intel_display
> > *display,
> >  	if (need_aux_ch(encoder, init_dp)) {
> >  		dig_port->aux_ch = intel_dp_aux_ch(encoder);
> >  		if (dig_port->aux_ch == AUX_CH_NONE)
> > -			goto err;
> > +			goto err_aux_ch_init;
> >  	}
> >  
> >  	/*
> > @@ -5447,7 +5447,7 @@ void intel_ddi_init(struct intel_display
> > *display,
> >  		dig_port->unlock = intel_tc_port_unlock;
> >  
> >  		if (intel_tc_port_init(dig_port, is_legacy) < 0)
> > -			goto err;
> > +			goto err_aux_ch_init;
> >  	}
> >  
> >  	drm_WARN_ON(display->drm, port > PORT_I);
> > @@ -5478,7 +5478,7 @@ void intel_ddi_init(struct intel_display
> > *display,
> >  
> >  	if (init_dp) {
> >  		if (intel_ddi_init_dp_connector(dig_port))
> > -			goto err;
> > +			goto err_dp_connector_init;
> >  
> >  		dig_port->hpd_pulse = intel_dp_hpd_pulse;
> >  
> > @@ -5492,12 +5492,15 @@ void intel_ddi_init(struct intel_display
> > *display,
> >  	 */
> >  	if (encoder->type != INTEL_OUTPUT_EDP && init_hdmi) {
> >  		if (intel_ddi_init_hdmi_connector(dig_port))
> > -			goto err;
> > +			goto err_dp_connector_init;
> >  	}
> >  
> >  	return;
> >  
> > -err:
> > +err_dp_connector_init:
> > +	if (intel_encoder_is_tc(encoder))
> > +		intel_tc_port_cleanup(dig_port);
> > +err_aux_ch_init:
> >  	drm_encoder_cleanup(&encoder->base);
> >  	kfree(dig_port);
> >  }
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] drm/i915/ddi: Fix cleanup after HDMI connector init failure
  2026-05-07  6:59 ` [PATCH 2/2] drm/i915/ddi: Fix cleanup after HDMI " Imre Deak
@ 2026-05-08 14:29   ` Hogander, Jouni
  2026-05-08 14:34     ` Imre Deak
  0 siblings, 1 reply; 8+ messages in thread
From: Hogander, Jouni @ 2026-05-08 14:29 UTC (permalink / raw)
  To: intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	Deak, Imre
  Cc: sashiko-bot@kernel.org

On Thu, 2026-05-07 at 09:59 +0300, Imre Deak wrote:
> Perform the missing DDI DP connector cleanup steps after HDMI
> connector
> initialization failure during DDI encoder/connector initialization.
> 
> This fixes the leaked DP MST encoder, AUX state, and connector
> object.
> 
> Reported-by: Sashiko <sashiko-bot@kernel.org>
> Signed-off-by: Imre Deak <imre.deak@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_ddi.c | 14 +++++++++++++-
>  drivers/gpu/drm/i915/display/intel_dp.c  | 13 +++++++++++++
>  drivers/gpu/drm/i915/display/intel_dp.h  |  3 +++
>  3 files changed, 29 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> b/drivers/gpu/drm/i915/display/intel_ddi.c
> index e37cc32ee83ed..cd61ddb7f4696 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -4729,6 +4729,15 @@ static int intel_ddi_init_dp_connector(struct
> intel_digital_port *dig_port)
>  	return 0;
>  }
>  
> +static void intel_ddi_cleanup_dp_connector(struct intel_digital_port
> *dig_port)
> +{
> +	struct intel_dp *intel_dp = &dig_port->dp;
> +	struct intel_connector *connector = intel_dp-
> >attached_connector;
> +
> +	intel_dp_cleanup_connector(dig_port, connector);
> +	kfree(connector);
> +}
> +
>  static int intel_hdmi_reset_link(struct intel_encoder *encoder,
>  				 struct drm_modeset_acquire_ctx
> *ctx)
>  {
> @@ -5492,11 +5501,14 @@ void intel_ddi_init(struct intel_display
> *display,
>  	 */
>  	if (encoder->type != INTEL_OUTPUT_EDP && init_hdmi) {
>  		if (intel_ddi_init_hdmi_connector(dig_port))
> -			goto err_dp_connector_init;
> +			goto err_hdmi_connector_init;
>  	}
>  
>  	return;
>  
> +err_hdmi_connector_init:
> +	if (init_dp)
> +		intel_ddi_cleanup_dp_connector(dig_port);
>  err_dp_connector_init:
>  	if (intel_encoder_is_tc(encoder))
>  		intel_tc_port_cleanup(dig_port);
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index 86123614b7bae..97c572e5a5710 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -7346,6 +7346,19 @@ intel_dp_init_connector(struct
> intel_digital_port *dig_port,
>  	return false;
>  }
>  
> +void intel_dp_cleanup_connector(struct intel_digital_port *dig_port,
> +				struct intel_connector *connector)
> +{
> +	struct intel_display *display = to_intel_display(connector);
> +	struct intel_dp *intel_dp = &dig_port->dp;
> +
> +	intel_display_power_flush_work(display);

Why do you need to have this as this is targeted for clean-up on error
case during initialization phase. I wouldn't expect power get/put async
at that point?

BR,
Jouni Högander

> +
> +	intel_dp_mst_encoder_cleanup(dig_port);
> +	intel_dp_aux_fini(intel_dp);
> +	drm_connector_cleanup(&connector->base);
> +}
> +
>  void intel_dp_mst_suspend(struct intel_display *display)
>  {
>  	struct intel_encoder *encoder;
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.h
> b/drivers/gpu/drm/i915/display/intel_dp.h
> index 2849b9ecdc71a..f41480d247142 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.h
> +++ b/drivers/gpu/drm/i915/display/intel_dp.h
> @@ -48,6 +48,9 @@ intel_dp_queue_modeset_retry_for_link(struct
> intel_atomic_state *state,
>  				      const struct intel_crtc_state
> *crtc_state);
>  bool intel_dp_init_connector(struct intel_digital_port *dig_port,
>  			     struct intel_connector
> *intel_connector);
> +void intel_dp_cleanup_connector(struct intel_digital_port *dig_port,
> +				struct intel_connector *connector);
> +
>  void intel_dp_connector_sync_state(struct intel_connector
> *connector,
>  				   const struct intel_crtc_state
> *crtc_state);
>  void intel_dp_set_link_params(struct intel_dp *intel_dp,


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] drm/i915/ddi: Fix cleanup after HDMI connector init failure
  2026-05-08 14:29   ` Hogander, Jouni
@ 2026-05-08 14:34     ` Imre Deak
  0 siblings, 0 replies; 8+ messages in thread
From: Imre Deak @ 2026-05-08 14:34 UTC (permalink / raw)
  To: Hogander, Jouni
  Cc: intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	sashiko-bot@kernel.org

On Fri, May 08, 2026 at 05:29:33PM +0300, Hogander, Jouni wrote:
> On Thu, 2026-05-07 at 09:59 +0300, Imre Deak wrote:
> > Perform the missing DDI DP connector cleanup steps after HDMI
> > connector
> > initialization failure during DDI encoder/connector initialization.
> > 
> > This fixes the leaked DP MST encoder, AUX state, and connector
> > object.
> > 
> > Reported-by: Sashiko <sashiko-bot@kernel.org>
> > Signed-off-by: Imre Deak <imre.deak@intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_ddi.c | 14 +++++++++++++-
> >  drivers/gpu/drm/i915/display/intel_dp.c  | 13 +++++++++++++
> >  drivers/gpu/drm/i915/display/intel_dp.h  |  3 +++
> >  3 files changed, 29 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> > b/drivers/gpu/drm/i915/display/intel_ddi.c
> > index e37cc32ee83ed..cd61ddb7f4696 100644
> > --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> > @@ -4729,6 +4729,15 @@ static int intel_ddi_init_dp_connector(struct
> > intel_digital_port *dig_port)
> >  	return 0;
> >  }
> >  
> > +static void intel_ddi_cleanup_dp_connector(struct intel_digital_port
> > *dig_port)
> > +{
> > +	struct intel_dp *intel_dp = &dig_port->dp;
> > +	struct intel_connector *connector = intel_dp-
> > >attached_connector;
> > +
> > +	intel_dp_cleanup_connector(dig_port, connector);
> > +	kfree(connector);
> > +}
> > +
> >  static int intel_hdmi_reset_link(struct intel_encoder *encoder,
> >  				 struct drm_modeset_acquire_ctx
> > *ctx)
> >  {
> > @@ -5492,11 +5501,14 @@ void intel_ddi_init(struct intel_display
> > *display,
> >  	 */
> >  	if (encoder->type != INTEL_OUTPUT_EDP && init_hdmi) {
> >  		if (intel_ddi_init_hdmi_connector(dig_port))
> > -			goto err_dp_connector_init;
> > +			goto err_hdmi_connector_init;
> >  	}
> >  
> >  	return;
> >  
> > +err_hdmi_connector_init:
> > +	if (init_dp)
> > +		intel_ddi_cleanup_dp_connector(dig_port);
> >  err_dp_connector_init:
> >  	if (intel_encoder_is_tc(encoder))
> >  		intel_tc_port_cleanup(dig_port);
> > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> > b/drivers/gpu/drm/i915/display/intel_dp.c
> > index 86123614b7bae..97c572e5a5710 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > @@ -7346,6 +7346,19 @@ intel_dp_init_connector(struct
> > intel_digital_port *dig_port,
> >  	return false;
> >  }
> >  
> > +void intel_dp_cleanup_connector(struct intel_digital_port *dig_port,
> > +				struct intel_connector *connector)
> > +{
> > +	struct intel_display *display = to_intel_display(connector);
> > +	struct intel_dp *intel_dp = &dig_port->dp;
> > +
> > +	intel_display_power_flush_work(display);
> 
> Why do you need to have this as this is targeted for clean-up on error
> case during initialization phase. I wouldn't expect power get/put async
> at that point?

intel_edp_init_connector() does AUX accesses required for its
initialization. That in turn takes power references which are put in a
deferred way, putting the reference requiring the encoder object. The
above call ensures that all such power references are dropped and the
currepsonding put operation is not called after the encoder object is
freed.

> 
> BR,
> Jouni Högander
> 
> > +
> > +	intel_dp_mst_encoder_cleanup(dig_port);
> > +	intel_dp_aux_fini(intel_dp);
> > +	drm_connector_cleanup(&connector->base);
> > +}
> > +
> >  void intel_dp_mst_suspend(struct intel_display *display)
> >  {
> >  	struct intel_encoder *encoder;
> > diff --git a/drivers/gpu/drm/i915/display/intel_dp.h
> > b/drivers/gpu/drm/i915/display/intel_dp.h
> > index 2849b9ecdc71a..f41480d247142 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp.h
> > +++ b/drivers/gpu/drm/i915/display/intel_dp.h
> > @@ -48,6 +48,9 @@ intel_dp_queue_modeset_retry_for_link(struct
> > intel_atomic_state *state,
> >  				      const struct intel_crtc_state
> > *crtc_state);
> >  bool intel_dp_init_connector(struct intel_digital_port *dig_port,
> >  			     struct intel_connector
> > *intel_connector);
> > +void intel_dp_cleanup_connector(struct intel_digital_port *dig_port,
> > +				struct intel_connector *connector);
> > +
> >  void intel_dp_connector_sync_state(struct intel_connector
> > *connector,
> >  				   const struct intel_crtc_state
> > *crtc_state);
> >  void intel_dp_set_link_params(struct intel_dp *intel_dp,
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2026-05-08 14:35 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-07  6:59 [PATCH 1/2] drm/i915/ddi: Fix cleanup after DP connector init failure Imre Deak
2026-05-07  6:59 ` [PATCH 2/2] drm/i915/ddi: Fix cleanup after HDMI " Imre Deak
2026-05-08 14:29   ` Hogander, Jouni
2026-05-08 14:34     ` Imre Deak
2026-05-07 10:58 ` ✗ i915.CI.BAT: failure for series starting with [1/2] drm/i915/ddi: Fix cleanup after DP " Patchwork
2026-05-08 10:10   ` Imre Deak
2026-05-08 12:26 ` [PATCH 1/2] " Hogander, Jouni
2026-05-08 12:38   ` Imre Deak

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox