summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2021-11-04 15:18:46 +0100
committerChristian König <christian.koenig@amd.com>2022-04-03 20:14:39 +0200
commitc382df714a8433dfdd4b84fecc00dc46fc755eb7 (patch)
tree04c5e2f16fa880d7969197a57bc85213ddd06b46 /drivers
parent644704740b8282c9ee9483a38666ee4a4561c37c (diff)
drm/atomic-helper: support more than one write fence in drm_gem_plane_helper_prepare_fb
Use dma_resv_get_singleton() here to eventually get more than one write fence as single fence. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: https://patchwork.freedesktop.org/patch/msgid/20220321135856.1331-13-christian.koenig@amd.com
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/drm_gem_atomic_helper.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/drivers/gpu/drm/drm_gem_atomic_helper.c b/drivers/gpu/drm/drm_gem_atomic_helper.c
index c3189afe10cb..9338ddb7edff 100644
--- a/drivers/gpu/drm/drm_gem_atomic_helper.c
+++ b/drivers/gpu/drm/drm_gem_atomic_helper.c
@@ -143,25 +143,21 @@
*/
int drm_gem_plane_helper_prepare_fb(struct drm_plane *plane, struct drm_plane_state *state)
{
- struct dma_resv_iter cursor;
struct drm_gem_object *obj;
struct dma_fence *fence;
+ int ret;
if (!state->fb)
return 0;
obj = drm_gem_fb_get_obj(state->fb, 0);
- dma_resv_iter_begin(&cursor, obj->resv, false);
- dma_resv_for_each_fence_unlocked(&cursor, fence) {
- /* TODO: Currently there should be only one write fence, so this
- * here works fine. But drm_atomic_set_fence_for_plane() should
- * be changed to be able to handle more fences in general for
- * multiple BOs per fb anyway. */
- dma_fence_get(fence);
- break;
- }
- dma_resv_iter_end(&cursor);
+ ret = dma_resv_get_singleton(obj->resv, false, &fence);
+ if (ret)
+ return ret;
+ /* TODO: drm_atomic_set_fence_for_plane() should be changed to be able
+ * to handle more fences in general for multiple BOs per fb.
+ */
drm_atomic_set_fence_for_plane(state, fence);
return 0;
}