Message ID | 1441894085-25662-9-git-send-email-maarten.lankhorst@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Sep 10, 2015 at 04:08:03PM +0200, Maarten Lankhorst wrote: > In async mode crtc->config can be updated after the locks are released, > resulting in the wrong state being duplicated. > > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> > --- > drivers/gpu/drm/i915/intel_atomic.c | 9 +-------- > 1 file changed, 1 insertion(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c > index 8287b81287a0..9d5cc89ebfcb 100644 > --- a/drivers/gpu/drm/i915/intel_atomic.c > +++ b/drivers/gpu/drm/i915/intel_atomic.c > @@ -85,20 +85,13 @@ intel_connector_atomic_get_property(struct drm_connector *connector, > 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)) > - crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); > - else > - crtc_state = kmemdup(intel_crtc->config, > - sizeof(*intel_crtc->config), GFP_KERNEL); > - > + crtc_state = kmemdup(crtc->state, sizeof(*crtc_state), GFP_KERNEL); > if (!crtc_state) > return NULL; > > __drm_atomic_helper_crtc_duplicate_state(crtc, &crtc_state->base); > - crtc_state->base.crtc = crtc; This is a bugfix for Ander's patch in 4.3. Please split it out and submit just that part to Jani. I've dropped this part from the patch I merged to dinq. -Daniel > crtc_state->update_pipe = false; > > return &crtc_state->base; > -- > 2.1.0 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
On Thu, Sep 10, 2015 at 05:46:12PM +0200, Daniel Vetter wrote: > On Thu, Sep 10, 2015 at 04:08:03PM +0200, Maarten Lankhorst wrote: > > In async mode crtc->config can be updated after the locks are released, > > resulting in the wrong state being duplicated. > > > > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> > > --- > > drivers/gpu/drm/i915/intel_atomic.c | 9 +-------- > > 1 file changed, 1 insertion(+), 8 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c > > index 8287b81287a0..9d5cc89ebfcb 100644 > > --- a/drivers/gpu/drm/i915/intel_atomic.c > > +++ b/drivers/gpu/drm/i915/intel_atomic.c > > @@ -85,20 +85,13 @@ intel_connector_atomic_get_property(struct drm_connector *connector, > > 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)) > > - crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); > > - else > > - crtc_state = kmemdup(intel_crtc->config, > > - sizeof(*intel_crtc->config), GFP_KERNEL); > > - > > + crtc_state = kmemdup(crtc->state, sizeof(*crtc_state), GFP_KERNEL); > > if (!crtc_state) > > return NULL; > > > > __drm_atomic_helper_crtc_duplicate_state(crtc, &crtc_state->base); > > - crtc_state->base.crtc = crtc; > > This is a bugfix for Ander's patch in 4.3. Please split it out and submit > just that part to Jani. I've dropped this part from the patch I merged to > dinq. Argh got confused, that line is in dinq too. I added a commit reference to your patch. -Daniel
diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c index 8287b81287a0..9d5cc89ebfcb 100644 --- a/drivers/gpu/drm/i915/intel_atomic.c +++ b/drivers/gpu/drm/i915/intel_atomic.c @@ -85,20 +85,13 @@ intel_connector_atomic_get_property(struct drm_connector *connector, 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)) - crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL); - else - crtc_state = kmemdup(intel_crtc->config, - sizeof(*intel_crtc->config), GFP_KERNEL); - + crtc_state = kmemdup(crtc->state, sizeof(*crtc_state), GFP_KERNEL); if (!crtc_state) return NULL; __drm_atomic_helper_crtc_duplicate_state(crtc, &crtc_state->base); - crtc_state->base.crtc = crtc; crtc_state->update_pipe = false; return &crtc_state->base;
In async mode crtc->config can be updated after the locks are released, resulting in the wrong state being duplicated. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> --- drivers/gpu/drm/i915/intel_atomic.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-)