Gerd Hoffmann <kraxel@xxxxxxxxxx> writes: > qxl_plane_cleanup_fb() unpins the just activated framebuffer > instead of the old one. Oops. Fix it. > > Cc: Gabriel Krisman Bertazi <krisman@xxxxxxxxxxxxxxx> > Fixes: 1277eed5fecb8830c8cc414ad70c1ef640464bc0 > Signed-off-by: Gerd Hoffmann <kraxel@xxxxxxxxxx> > --- > drivers/gpu/drm/qxl/qxl_display.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c > index e1dd05423e..afbf50d0c0 100644 > --- a/drivers/gpu/drm/qxl/qxl_display.c > +++ b/drivers/gpu/drm/qxl/qxl_display.c > @@ -702,14 +702,15 @@ static void qxl_plane_cleanup_fb(struct drm_plane *plane, > struct drm_gem_object *obj; > struct qxl_bo *user_bo; > > - if (!plane->state->fb) { > - /* we never executed prepare_fb, so there's nothing to > + if (!old_state->fb) { > + /* > + * we never executed prepare_fb, so there's nothing to > * unpin. > */ > return; > } > > - obj = to_qxl_framebuffer(plane->state->fb)->obj; > + obj = to_qxl_framebuffer(old_state->fb)->obj; I am not sure about this patch. My idea was to pin/unpin the current buffer on prepare/cleanup, and only keep it pinned during the atomic commit. This was the goal of 37235451c6990683a8, for instance. Anyway, if that goal is wrong, I think that, with your change, we forget to unpin the final plane before removing the device. Thanks, -- Gabriel Krisman Bertazi _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel