On Thu, 2019-12-19 at 13:14 +0200, Ville Syrjala wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > We have several places where we want to allocate a pristine > crtc state. Some of those currently call intel_crtc_state_reset() > to properly initialize all the non-zero defaults in the state, but > some places do not. Let's add intel_crtc_state_alloc() to do both > the alloc and the reset, and call that everywhere we need a fresh > crtc state. > > Cc: José Roberto de Souza <jose.souza@xxxxxxxxx> > Cc: Manasi Navare <manasi.d.navare@xxxxxxxxx> > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_display.c | 30 +++++++++++++----- > -- > 1 file changed, 19 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c > b/drivers/gpu/drm/i915/display/intel_display.c > index 25af0ffe1c3a..fe7453afafbf 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -168,6 +168,7 @@ static void skylake_pfit_enable(const struct > intel_crtc_state *crtc_state); > static void ironlake_pfit_enable(const struct intel_crtc_state > *crtc_state); > static void intel_modeset_setup_hw_state(struct drm_device *dev, > struct drm_modeset_acquire_ctx > *ctx); > +static struct intel_crtc_state *intel_crtc_state_alloc(struct > intel_crtc *crtc); > > struct intel_limit { > struct { > @@ -8054,11 +8055,10 @@ int vlv_force_pll_on(struct drm_i915_private > *dev_priv, enum pipe pipe, > struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, > pipe); > struct intel_crtc_state *pipe_config; > > - pipe_config = kzalloc(sizeof(*pipe_config), GFP_KERNEL); > + pipe_config = intel_crtc_state_alloc(crtc); > if (!pipe_config) > return -ENOMEM; > > - pipe_config->uapi.crtc = &crtc->base; > pipe_config->cpu_transcoder = (enum transcoder)pipe; > pipe_config->pixel_multiplier = 1; > pipe_config->dpll = *dpll; > @@ -11649,6 +11649,18 @@ static void intel_crtc_state_reset(struct > intel_crtc_state *crtc_state, > crtc_state->scaler_state.scaler_id = -1; > } > > +static struct intel_crtc_state *intel_crtc_state_alloc(struct > intel_crtc *crtc) > +{ > + struct intel_crtc_state *crtc_state; > + > + crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); Minor but maybe change to kmalloc() as intel_crtc_state_reset() will memset crtc_state to 0. Will leave to you to decide. Reviewed-by: José Roberto de Souza <jose.souza@xxxxxxxxx> > + > + if (crtc_state) > + intel_crtc_state_reset(crtc_state, crtc); > + > + return crtc_state; > +} > + > /* Returns the currently programmed mode of the given encoder. */ > struct drm_display_mode * > intel_encoder_current_mode(struct intel_encoder *encoder) > @@ -11668,14 +11680,12 @@ intel_encoder_current_mode(struct > intel_encoder *encoder) > if (!mode) > return NULL; > > - crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); > + crtc_state = intel_crtc_state_alloc(crtc); > if (!crtc_state) { > kfree(mode); > return NULL; > } > > - intel_crtc_state_reset(crtc_state, crtc); > - > if (!dev_priv->display.get_pipe_config(crtc, crtc_state)) { > kfree(crtc_state); > kfree(mode); > @@ -12612,11 +12622,11 @@ static void > intel_crtc_copy_hw_to_uapi_state(struct intel_crtc_state *crtc_state > static int > intel_crtc_prepare_cleared_state(struct intel_crtc_state > *crtc_state) > { > - struct drm_i915_private *dev_priv = > - to_i915(crtc_state->uapi.crtc->dev); > + struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); > + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); > struct intel_crtc_state *saved_state; > > - saved_state = kzalloc(sizeof(*saved_state), GFP_KERNEL); > + saved_state = intel_crtc_state_alloc(crtc); > if (!saved_state) > return -ENOMEM; > > @@ -15737,14 +15747,12 @@ static struct intel_crtc > *intel_crtc_alloc(void) > if (!crtc) > return ERR_PTR(-ENOMEM); > > - crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); > + crtc_state = intel_crtc_state_alloc(crtc); > if (!crtc_state) { > kfree(crtc); > return ERR_PTR(-ENOMEM); > } > > - intel_crtc_state_reset(crtc_state, crtc); > - > crtc->base.state = &crtc_state->uapi; > crtc->config = crtc_state; > _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx