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

Maarten Lankhorst maarten.lankhorst at linux.intel.com
Thu Nov 15 11:23:13 UTC 2018


Op 13-11-18 om 15:02 schreef Ville Syrjälä:
> 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

Thanks, pushed



More information about the Intel-gfx mailing list