All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: James Ausmus <james.ausmus@intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH] drm/i915: Handle drm-layer errors in intel_dp_add_mst_connector
Date: Fri, 15 Sep 2017 13:18:51 +0300	[thread overview]
Message-ID: <20170915101851.GL4914@intel.com> (raw)
In-Reply-To: <20170914195935.2408-1-james.ausmus@intel.com>

On Thu, Sep 14, 2017 at 12:59:35PM -0700, James Ausmus wrote:
> Make intel_dp_add_mst_connector handle error returns from the drm_ calls.
> Add intel_connector_destroy to support cleanup on the error path.

That name makes one think that it could be plugged into the connector
.destroy() hook. So I'd rename it to intel_connector_free() or something
like that.

Also the this MST thing just looks like the tip of the iceberg.
I think pretty much every connector has the same problem. But I
guess MST is slightly more interesting since it can happen at
runtime.

> 
> Signed-off-by: James Ausmus <james.ausmus@intel.com>
> ---
> 
> Note that this patch is compile/boot tested only on non-MST, as I
> currently don't have MST-enabled HW.
> 
>  drivers/gpu/drm/i915/intel_display.c | 10 ++++++++++
>  drivers/gpu/drm/i915/intel_dp_mst.c  | 24 ++++++++++++++++++++----
>  drivers/gpu/drm/i915/intel_drv.h     |  1 +
>  3 files changed, 31 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 8599e425abb1..ab261c063032 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -6146,6 +6146,16 @@ struct intel_connector *intel_connector_alloc(void)
>  	return connector;
>  }
>  
> +/*
> + * Free the bits allocated by intel_connector_alloc.
> + * Type-specific connector cleanup should be done prior to this.
> + */
> +void intel_connector_destroy(struct intel_connector *connector)
> +{
> +	kfree(to_intel_digital_connector_state(connector->base.state));
> +	kfree(connector);
> +}
> +
>  /* Simple connector->get_hw_state implementation for encoders that support only
>   * one connector and no cloning and hence the encoder state determines the state
>   * of the connector. */
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index 8e3aad0ea60b..80b3d665e988 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -451,14 +451,18 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
>  	struct drm_device *dev = intel_dig_port->base.base.dev;
>  	struct intel_connector *intel_connector;
>  	struct drm_connector *connector;
> -	int i;
> +	int i, ret;
>  
>  	intel_connector = intel_connector_alloc();
>  	if (!intel_connector)
>  		return NULL;
>  
>  	connector = &intel_connector->base;
> -	drm_connector_init(dev, connector, &intel_dp_mst_connector_funcs, DRM_MODE_CONNECTOR_DisplayPort);
> +	ret = drm_connector_init(dev, connector, &intel_dp_mst_connector_funcs,
> +				 DRM_MODE_CONNECTOR_DisplayPort);
> +	if (ret)
> +		goto out_init;
> +
>  	drm_connector_helper_add(connector, &intel_dp_mst_connector_helper_funcs);
>  
>  	intel_connector->get_hw_state = intel_dp_mst_get_hw_state;
> @@ -466,14 +470,26 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
>  	intel_connector->port = port;
>  
>  	for (i = PIPE_A; i <= PIPE_C; i++) {
> -		drm_mode_connector_attach_encoder(&intel_connector->base,
> +		ret = drm_mode_connector_attach_encoder(&intel_connector->base,
>  						  &intel_dp->mst_encoders[i]->base.base);
> +		if (ret)
> +			goto out_conn;
>  	}
>  
>  	drm_object_attach_property(&connector->base, dev->mode_config.path_property, 0);
>  	drm_object_attach_property(&connector->base, dev->mode_config.tile_property, 0);
>  
> -	drm_mode_connector_set_path_property(connector, pathprop);
> +	ret = drm_mode_connector_set_path_property(connector, pathprop);
> +

'return connector' here so you can skip the 'if (ret)' things below?

> +out_conn:
> +	if (ret)
> +		drm_connector_cleanup(connector);
> +out_init:
> +	if (ret) {
> +		intel_connector_destroy(intel_connector);
> +		connector = NULL;
> +	}
> +
>  	return connector;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 307807672896..d13c5c6b46e9 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1358,6 +1358,7 @@ void intel_pps_unlock_regs_wa(struct drm_i915_private *dev_priv);
>  void intel_encoder_destroy(struct drm_encoder *encoder);
>  int intel_connector_init(struct intel_connector *);
>  struct intel_connector *intel_connector_alloc(void);
> +void intel_connector_destroy(struct intel_connector *connector);
>  bool intel_connector_get_hw_state(struct intel_connector *connector);
>  void intel_connector_attach_encoder(struct intel_connector *connector,
>  				    struct intel_encoder *encoder);
> -- 
> 2.14.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  parent reply	other threads:[~2017-09-15 10:19 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-14 19:59 [PATCH] drm/i915: Handle drm-layer errors in intel_dp_add_mst_connector James Ausmus
2017-09-14 20:19 ` ✓ Fi.CI.BAT: success for " Patchwork
2017-09-15  5:48 ` ✓ Fi.CI.IGT: " Patchwork
2017-09-15 10:18 ` Ville Syrjälä [this message]
2017-09-15 17:12   ` [PATCH] " Ausmus, James
2017-09-15 17:49 ` [PATCH v2] " James Ausmus
2017-09-15 18:09   ` Ville Syrjälä
2017-09-15 19:43     ` Ausmus, James
2017-09-15 18:09 ` ✓ Fi.CI.BAT: success for drm/i915: Handle drm-layer errors in intel_dp_add_mst_connector (rev2) Patchwork
2017-09-15 19:42 ` [PATCH v3] drm/i915: Handle drm-layer errors in intel_dp_add_mst_connector James Ausmus
2017-09-15 19:43 ` ✓ Fi.CI.IGT: success for drm/i915: Handle drm-layer errors in intel_dp_add_mst_connector (rev2) Patchwork
2017-09-15 20:04 ` ✓ Fi.CI.BAT: success for drm/i915: Handle drm-layer errors in intel_dp_add_mst_connector (rev3) Patchwork
2017-09-15 21:26 ` ✓ Fi.CI.IGT: " Patchwork
2017-09-27 18:29 ` [PATCH v4 1/2] drm/i915: Handle drm-layer errors in intel_dp_add_mst_connector James Ausmus
2017-09-27 18:29   ` [PATCH 2/2] drm/i915: Use for_each_pipe in intel_dp_mst.c James Ausmus
2017-10-12 18:59   ` [PATCH v4 1/2] drm/i915: Handle drm-layer errors in intel_dp_add_mst_connector Ausmus, James
2017-10-13 18:01 ` [PATCH v5] " James Ausmus
2017-10-17 15:38   ` Ville Syrjälä
2017-10-17 16:46     ` James Ausmus
2017-10-13 18:26 ` ✓ Fi.CI.BAT: success for drm/i915: Handle drm-layer errors in intel_dp_add_mst_connector (rev6) Patchwork
2017-10-14  3:35 ` ✗ Fi.CI.IGT: failure " Patchwork
2017-10-16 23:04   ` Ausmus, James
2017-10-17 10:11     ` Ville Syrjälä

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170915101851.GL4914@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=james.ausmus@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.