Message ID | 1425388937-1247-2-git-send-email-ander.conselvan.de.oliveira@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Mar 03, 2015 at 03:21:55PM +0200, Ander Conselvan de Oliveira wrote: > In the path were there is no state to duplicate, the allocated crtc > state wouldn't have the crtc backpointer initialized. > > Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com> > --- > drivers/gpu/drm/i915/intel_atomic.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c > index 011b896..3903b90 100644 > --- a/drivers/gpu/drm/i915/intel_atomic.c > +++ b/drivers/gpu/drm/i915/intel_atomic.c > @@ -214,12 +214,18 @@ struct drm_crtc_state * > intel_crtc_duplicate_state(struct drm_crtc *crtc) > { > struct intel_crtc *intel_crtc = to_intel_crtc(crtc); > + struct intel_crtc_state *crtc_state; > > if (WARN_ON(!intel_crtc->config)) > - return kzalloc(sizeof(*intel_crtc->config), GFP_KERNEL); > + crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); > + else > + crtc_state = kmemdup(intel_crtc->config, > + sizeof(*intel_crtc->config), GFP_KERNEL); > > - return kmemdup(intel_crtc->config, sizeof(*intel_crtc->config), > - GFP_KERNEL); > + if (crtc_state) > + crtc_state->base.crtc = crtc; > + > + return &crtc_state->base; I think we should eventually extract another set of helpers to share the core initialization code common with all drivers and the atomic helpers. We've already screwed up this a few times when additions to the helper state tracking haven't propagated to all drivers. Last time I've tried this I got stuck on a good name for this function though. -Daniel
diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c index 011b896..3903b90 100644 --- a/drivers/gpu/drm/i915/intel_atomic.c +++ b/drivers/gpu/drm/i915/intel_atomic.c @@ -214,12 +214,18 @@ struct drm_crtc_state * intel_crtc_duplicate_state(struct drm_crtc *crtc) { struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + struct intel_crtc_state *crtc_state; if (WARN_ON(!intel_crtc->config)) - return kzalloc(sizeof(*intel_crtc->config), GFP_KERNEL); + crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); + else + crtc_state = kmemdup(intel_crtc->config, + sizeof(*intel_crtc->config), GFP_KERNEL); - return kmemdup(intel_crtc->config, sizeof(*intel_crtc->config), - GFP_KERNEL); + if (crtc_state) + crtc_state->base.crtc = crtc; + + return &crtc_state->base; } /**
In the path were there is no state to duplicate, the allocated crtc state wouldn't have the crtc backpointer initialized. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com> --- drivers/gpu/drm/i915/intel_atomic.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)