drm/mgag200: Pin framebuffer BO during dirty update
Another explicit lock operation of a GEM VRAM BO is located in mgag200'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-7-tzimmermann@suse.de
This commit is contained in:
parent
da460a29c2
commit
f4ce5af71b
@ -26,7 +26,7 @@ static void mga_dirty_update(struct mga_fbdev *mfbdev,
|
||||
struct drm_gem_vram_object *gbo;
|
||||
int src_offset, dst_offset;
|
||||
int bpp = mfbdev->mfb.base.format->cpp[0];
|
||||
int ret = -EBUSY;
|
||||
int ret;
|
||||
u8 *dst;
|
||||
bool unmap = false;
|
||||
bool store_for_later = false;
|
||||
@ -36,16 +36,18 @@ static void mga_dirty_update(struct mga_fbdev *mfbdev,
|
||||
obj = mfbdev->mfb.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;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@ -100,7 +102,7 @@ static void mga_dirty_update(struct mga_fbdev *mfbdev,
|
||||
drm_gem_vram_kunmap(gbo);
|
||||
|
||||
out:
|
||||
drm_gem_vram_unlock(gbo);
|
||||
drm_gem_vram_unpin(gbo);
|
||||
}
|
||||
|
||||
static void mga_fillrect(struct fb_info *info,
|
||||
|
Loading…
x
Reference in New Issue
Block a user