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 v2] drm/i915: Handle drm-layer errors in intel_dp_add_mst_connector
Date: Fri, 15 Sep 2017 21:09:40 +0300	[thread overview]
Message-ID: <20170915180940.GU4914@intel.com> (raw)
In-Reply-To: <20170915174909.18695-1-james.ausmus@intel.com>

On Fri, Sep 15, 2017 at 10:49:09AM -0700, James Ausmus wrote:
> Make intel_dp_add_mst_connector handle error returns from the drm_ calls.
> Add intel_connector_free to support cleanup on the error path.
> 
> v2: Rename new function to avoid confusion, and simplify error
> paths (Ville)
> 
> 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  | 23 +++++++++++++++++++----
>  drivers/gpu/drm/i915/intel_drv.h     |  1 +
>  3 files changed, 30 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 8599e425abb1..e3b1a6ead4fb 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_free(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..6e4447cbbe0e 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,25 @@ 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++) {

BTW a followup patch to switch these mst_encoders[] loops over
to for_each_pipe() might be nice.

> -		drm_mode_connector_attach_encoder(&intel_connector->base,
> +		ret = drm_mode_connector_attach_encoder(&intel_connector->base,
>  						  &intel_dp->mst_encoders[i]->base.base);

Please reindent appropriately.

> +		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);
> +	if (ret == 0)
> +		return connector;

if (ret)
	goto ...;

return connector;

is more idiomatic.

> +
> +out_conn:
> +	drm_connector_cleanup(connector);
> +out_init:
> +	intel_connector_free(intel_connector);

Hmm. I might call these out_cleanup and out_free. But I guess we have no
consistent style when it comes to goto labes. So feel free to ignore me.

> +	connector = NULL;
> +
>  	return connector;

Just return NULL.

>  }
>  
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 307807672896..2a5cee4302f7 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_free(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

  reply	other threads:[~2017-09-15 18:09 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 ` [PATCH] " Ville Syrjälä
2017-09-15 17:12   ` Ausmus, James
2017-09-15 17:49 ` [PATCH v2] " James Ausmus
2017-09-15 18:09   ` Ville Syrjälä [this message]
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=20170915180940.GU4914@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.