mirror of https://gitee.com/openkylin/linux.git
drm/ast: Pin framebuffer BO during dirty update
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@suse.de> Acked-by: Gerd Hoffmann <kraxel@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190613073041.29350-6-tzimmermann@suse.de
This commit is contained in:
parent
2707215207
commit
da460a29c2
|
@ -48,30 +48,30 @@ 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()) {
|
||||
/* 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;
|
||||
}
|
||||
|
||||
|
@ -126,7 +126,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,
|
||||
|
|
Loading…
Reference in New Issue