Hi Thomas. On Tue, Jun 11, 2019 at 03:03:40PM +0200, Thomas Zimmermann wrote: > Another explicit lock operation of a GEM VRAM BO is located in AST's > framebuffer update code. Instead of locking the BO, we pin it to wherever > it is. > > v2: > * update with pin flag of 0 > > Signed-off-by: Thomas Zimmermann <tzimmermann@xxxxxxx> > --- > drivers/gpu/drm/ast/ast_fb.c | 33 ++++++++++++++++----------------- > 1 file changed, 16 insertions(+), 17 deletions(-) > > diff --git a/drivers/gpu/drm/ast/ast_fb.c b/drivers/gpu/drm/ast/ast_fb.c > index 05f45222b702..b404b51c2c55 100644 > --- a/drivers/gpu/drm/ast/ast_fb.c > +++ b/drivers/gpu/drm/ast/ast_fb.c > @@ -48,32 +48,31 @@ static void ast_dirty_update(struct ast_fbdev *afbdev, > int x, int y, int width, int height) > { > int i; > - struct drm_gem_object *obj; > struct drm_gem_vram_object *gbo; > int src_offset, dst_offset; > int bpp = afbdev->afb.base.format->cpp[0]; > - int ret = -EBUSY; > + int ret; > u8 *dst; > bool unmap = false; > bool store_for_later = false; > int x2, y2; > unsigned long flags; > > - obj = afbdev->afb.obj; > - gbo = drm_gem_vram_of_gem(obj); > - > - /* Try to lock the BO. If we fail with -EBUSY then > - * the BO is being moved and we should store up the > - * damage until later. > - */ > - if (drm_can_sleep()) > - ret = drm_gem_vram_lock(gbo, true); > - if (ret) { > - if (ret != -EBUSY) > - return; > - > + gbo = drm_gem_vram_of_gem(afbdev->afb.obj); > + > + if (drm_can_sleep()) { While touching this code, anyway we could get rid of drm_can_sleep()? I only ask because Daniel V. said that we should not use it. This was some months ago during some ehader file clean-up, so nothing in particular related to the ast driver. Sam > + /* We pin the BO so it won't be moved during the > + * update. The actual location, video RAM or system > + * memory, is not important. > + */ > + ret = drm_gem_vram_pin(gbo, 0); > + if (ret) { > + if (ret != -EBUSY) > + return; > + store_for_later = true; > + } > + } else > store_for_later = true; > - } > > x2 = x + width - 1; > y2 = y + height - 1; > @@ -126,7 +125,7 @@ static void ast_dirty_update(struct ast_fbdev *afbdev, > drm_gem_vram_kunmap(gbo); > > out: > - drm_gem_vram_unlock(gbo); > + drm_gem_vram_unpin(gbo); > } > > static void ast_fillrect(struct fb_info *info, > -- > 2.21.0 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel