Skip to content

Commit 525bbf7

Browse files
drm: use new iterator in drm_gem_plane_helper_prepare_fb v3
Makes the handling a bit more complex, but avoids the use of dma_resv_get_excl_unlocked(). v2: improve coding and documentation v3: adjust the TODO comment as suggested by Daniel 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/20211005113742.1101-25-christian.koenig@amd.com
1 parent 4b2b5e1 commit 525bbf7

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

drivers/gpu/drm/drm_gem_atomic_helper.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,16 +143,26 @@
143143
*/
144144
int drm_gem_plane_helper_prepare_fb(struct drm_plane *plane, struct drm_plane_state *state)
145145
{
146+
struct dma_resv_iter cursor;
146147
struct drm_gem_object *obj;
147148
struct dma_fence *fence;
148149

149150
if (!state->fb)
150151
return 0;
151152

152153
obj = drm_gem_fb_get_obj(state->fb, 0);
153-
fence = dma_resv_get_excl_unlocked(obj->resv);
154-
drm_atomic_set_fence_for_plane(state, fence);
154+
dma_resv_iter_begin(&cursor, obj->resv, false);
155+
dma_resv_for_each_fence_unlocked(&cursor, fence) {
156+
/* TODO: Currently there should be only one write fence, so this
157+
* here works fine. But drm_atomic_set_fence_for_plane() should
158+
* be changed to be able to handle more fences in general for
159+
* multiple BOs per fb anyway. */
160+
dma_fence_get(fence);
161+
break;
162+
}
163+
dma_resv_iter_end(&cursor);
155164

165+
drm_atomic_set_fence_for_plane(state, fence);
156166
return 0;
157167
}
158168
EXPORT_SYMBOL_GPL(drm_gem_plane_helper_prepare_fb);

0 commit comments

Comments
 (0)