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@xxxxxxxxxxxxxxx> > >> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> >> Reported-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> >> Cc: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> >> 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 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx