On Wed, Nov 11, 2015 at 11:29:11AM +0100, Maarten Lankhorst wrote: > From: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> > > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> Needs "Don't touch plane->old_fb/fb without having the right locks held." like the previous patch in the commit message. With that for patches 4&5: Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > --- > drivers/gpu/drm/drm_fb_helper.c | 30 ++++++++---------------------- > 1 file changed, 8 insertions(+), 22 deletions(-) > > diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c > index abd50863506e..69cbab5e5c81 100644 > --- a/drivers/gpu/drm/drm_fb_helper.c > +++ b/drivers/gpu/drm/drm_fb_helper.c > @@ -1227,7 +1227,9 @@ static int pan_display_atomic(struct fb_var_screeninfo *var, > struct drm_fb_helper *fb_helper = info->par; > struct drm_device *dev = fb_helper->dev; > struct drm_atomic_state *state; > + struct drm_plane *plane; > int i, ret; > + unsigned plane_mask; > > state = drm_atomic_state_alloc(dev); > if (!state) > @@ -1235,19 +1237,22 @@ static int pan_display_atomic(struct fb_var_screeninfo *var, > > state->acquire_ctx = dev->mode_config.acquire_ctx; > retry: > + plane_mask = 0; > for(i = 0; i < fb_helper->crtc_count; i++) { > struct drm_mode_set *mode_set; > > mode_set = &fb_helper->crtc_info[i].mode_set; > > - mode_set->crtc->primary->old_fb = mode_set->crtc->primary->fb; > - > mode_set->x = var->xoffset; > mode_set->y = var->yoffset; > > ret = __drm_atomic_helper_set_config(mode_set, state); > if (ret != 0) > goto fail; > + > + plane = mode_set->crtc->primary; > + plane_mask |= drm_plane_index(plane); > + plane->old_fb = plane->fb; > } > > ret = drm_atomic_commit(state); > @@ -1259,26 +1264,7 @@ retry: > > > fail: > - for(i = 0; i < fb_helper->crtc_count; i++) { > - struct drm_mode_set *mode_set; > - struct drm_plane *plane; > - > - mode_set = &fb_helper->crtc_info[i].mode_set; > - plane = mode_set->crtc->primary; > - > - if (ret == 0) { > - struct drm_framebuffer *new_fb = plane->state->fb; > - > - if (new_fb) > - drm_framebuffer_reference(new_fb); > - plane->fb = new_fb; > - plane->crtc = plane->state->crtc; > - > - if (plane->old_fb) > - drm_framebuffer_unreference(plane->old_fb); > - } > - plane->old_fb = NULL; > - } > + drm_atomic_clean_old_fb(dev, plane_mask, ret); > > if (ret == -EDEADLK) > goto backoff; > -- > 2.1.0 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx