[Intel-gfx] [PATCH] drm/i915: Fix plane allocation/free functions

Ville Syrjälä ville.syrjala at linux.intel.com
Tue Nov 13 14:02:52 UTC 2018


On Tue, Nov 13, 2018 at 10:28:04AM +0100, Maarten Lankhorst wrote:
> Use intel_plane_destroy_state in intel_plane_free to free the state.

Not entirely necessary since we have nothing in the state at that moment
that would required to be freed separately. But seems more future proof
anyway.

> Also fix intel_plane_alloc() to use __drm_atomic_helper_plane_reset(),
> to get sane defaults from the atomic core.

Could mention the constant alpha specifically here since I think it
was the only thing we didn't set ourselves.

Reviewed-by: Ville Syrjälä <ville.syrjala at linux.intel.com>

> 
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
> Reported-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Fixes: b20815255693 ("drm/i915: Add plane alpha blending support, v2.")
> ---
>  drivers/gpu/drm/i915/intel_atomic_plane.c | 40 ++++++++++++-----------
>  drivers/gpu/drm/i915/intel_drv.h          |  5 ++-
>  drivers/gpu/drm/i915/intel_sprite.c       | 29 ----------------
>  3 files changed, 23 insertions(+), 51 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_atomic_plane.c b/drivers/gpu/drm/i915/intel_atomic_plane.c
> index 7d3685075201..905f8ef3ba4f 100644
> --- a/drivers/gpu/drm/i915/intel_atomic_plane.c
> +++ b/drivers/gpu/drm/i915/intel_atomic_plane.c
> @@ -36,29 +36,31 @@
>  #include <drm/drm_plane_helper.h>
>  #include "intel_drv.h"
>  
> -/**
> - * intel_create_plane_state - create plane state object
> - * @plane: drm plane
> - *
> - * Allocates a fresh plane state for the given plane and sets some of
> - * the state values to sensible initial values.
> - *
> - * Returns: A newly allocated plane state, or NULL on failure
> - */
> -struct intel_plane_state *
> -intel_create_plane_state(struct drm_plane *plane)
> +struct intel_plane *intel_plane_alloc(void)
>  {
> -	struct intel_plane_state *state;
> +	struct intel_plane_state *plane_state;
> +	struct intel_plane *plane;
>  
> -	state = kzalloc(sizeof(*state), GFP_KERNEL);
> -	if (!state)
> -		return NULL;
> +	plane = kzalloc(sizeof(*plane), GFP_KERNEL);
> +	if (!plane)
> +		return ERR_PTR(-ENOMEM);
>  
> -	state->base.plane = plane;
> -	state->base.rotation = DRM_MODE_ROTATE_0;
> -	state->scaler_id = -1;
> +	plane_state = kzalloc(sizeof(*plane_state), GFP_KERNEL);
> +	if (!plane_state) {
> +		kfree(plane);
> +		return ERR_PTR(-ENOMEM);
> +	}
>  
> -	return state;
> +	__drm_atomic_helper_plane_reset(&plane->base, &plane_state->base);
> +	plane_state->scaler_id = -1;
> +
> +	return plane;
> +}
> +
> +void intel_plane_free(struct intel_plane *plane)
> +{
> +	intel_plane_destroy_state(&plane->base, plane->base.state);
> +	kfree(plane);
>  }
>  
>  /**
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 10a5df66e4eb..2a897e174ed5 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -2219,8 +2219,6 @@ void intel_pipe_update_end(struct intel_crtc_state *new_crtc_state);
>  int intel_plane_check_stride(const struct intel_plane_state *plane_state);
>  int intel_plane_check_src_coordinates(struct intel_plane_state *plane_state);
>  int chv_plane_check_rotation(const struct intel_plane_state *plane_state);
> -struct intel_plane *intel_plane_alloc(void);
> -void intel_plane_free(struct intel_plane *plane);
>  struct intel_plane *
>  skl_universal_plane_create(struct drm_i915_private *dev_priv,
>  			   enum pipe pipe, enum plane_id plane_id);
> @@ -2282,7 +2280,8 @@ int intel_atomic_setup_scalers(struct drm_i915_private *dev_priv,
>  			       struct intel_crtc_state *crtc_state);
>  
>  /* intel_atomic_plane.c */
> -struct intel_plane_state *intel_create_plane_state(struct drm_plane *plane);
> +struct intel_plane *intel_plane_alloc(void);
> +void intel_plane_free(struct intel_plane *plane);
>  struct drm_plane_state *intel_plane_duplicate_state(struct drm_plane *plane);
>  void intel_plane_destroy_state(struct drm_plane *plane,
>  			       struct drm_plane_state *state);
> diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
> index facf7ca8f14f..7db6d060efe7 100644
> --- a/drivers/gpu/drm/i915/intel_sprite.c
> +++ b/drivers/gpu/drm/i915/intel_sprite.c
> @@ -1982,35 +1982,6 @@ static bool skl_plane_has_ccs(struct drm_i915_private *dev_priv,
>  		 plane_id == PLANE_SPRITE0);
>  }
>  
> -struct intel_plane *intel_plane_alloc(void)
> -{
> -	struct intel_plane_state *plane_state;
> -	struct intel_plane *plane;
> -
> -	plane = kzalloc(sizeof(*plane), GFP_KERNEL);
> -	if (!plane)
> -		return ERR_PTR(-ENOMEM);
> -
> -	plane_state = intel_create_plane_state(&plane->base);
> -	if (!plane_state) {
> -		kfree(plane);
> -		return ERR_PTR(-ENOMEM);
> -	}
> -
> -	plane->base.state = &plane_state->base;
> -
> -	return plane;
> -}
> -
> -void intel_plane_free(struct intel_plane *plane)
> -{
> -	struct intel_plane_state *plane_state =
> -		to_intel_plane_state(plane->base.state);
> -
> -	kfree(plane_state);
> -	kfree(plane);
> -}
> -
>  struct intel_plane *
>  skl_universal_plane_create(struct drm_i915_private *dev_priv,
>  			   enum pipe pipe, enum plane_id plane_id)
> -- 
> 2.19.1

-- 
Ville Syrjälä
Intel


More information about the Intel-gfx mailing list