forked from luck/tmp_suning_uos_patched
drm/nouveau: handle same-fb page flips
It's questionable use case, but weston/wayland already relies on this behaviour, and other drivers don't care about it, so it's a matter of compatibility. Without it, process invoking such page flip hangs in unkillable state, trying to reserve the same buffer twice. Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
565f571c48
commit
2c14575f99
|
@ -530,9 +530,11 @@ nouveau_page_flip_reserve(struct nouveau_bo *old_bo,
|
||||||
if (ret)
|
if (ret)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
ret = ttm_bo_reserve(&old_bo->bo, false, false, false, 0);
|
if (likely(old_bo != new_bo)) {
|
||||||
if (ret)
|
ret = ttm_bo_reserve(&old_bo->bo, false, false, false, 0);
|
||||||
goto fail_unreserve;
|
if (ret)
|
||||||
|
goto fail_unreserve;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -551,8 +553,10 @@ nouveau_page_flip_unreserve(struct nouveau_bo *old_bo,
|
||||||
nouveau_bo_fence(new_bo, fence);
|
nouveau_bo_fence(new_bo, fence);
|
||||||
ttm_bo_unreserve(&new_bo->bo);
|
ttm_bo_unreserve(&new_bo->bo);
|
||||||
|
|
||||||
nouveau_bo_fence(old_bo, fence);
|
if (likely(old_bo != new_bo)) {
|
||||||
ttm_bo_unreserve(&old_bo->bo);
|
nouveau_bo_fence(old_bo, fence);
|
||||||
|
ttm_bo_unreserve(&old_bo->bo);
|
||||||
|
}
|
||||||
|
|
||||||
nouveau_bo_unpin(old_bo);
|
nouveau_bo_unpin(old_bo);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user