@@ -500,8 +500,8 @@ drm_syncobj_timeline_point_get(struct drm_syncobj *syncobj, u64 point, u64 flags
* contains a reference to the fence, which must be released by calling
* dma_fence_put().
*/
-static int drm_syncobj_search_fence(struct drm_syncobj *syncobj, u64 point,
- u64 flags, struct dma_fence **fence)
+int drm_syncobj_search_fence(struct drm_syncobj *syncobj, u64 point,
+ u64 flags, struct dma_fence **fence)
{
int ret = 0;
@@ -530,6 +530,7 @@ static int drm_syncobj_search_fence(struct drm_syncobj *syncobj, u64 point,
drm_syncobj_put(syncobj);
return ret;
}
+EXPORT_SYMBOL(drm_syncobj_search_fence);
int drm_syncobj_find_fence(struct drm_file *file_private,
u32 handle, u64 point,
struct dma_fence **fence) {
@@ -2182,7 +2182,9 @@ await_fence_array(struct i915_execbuffer *eb,
if (!(flags & I915_EXEC_FENCE_WAIT))
continue;
- fence = drm_syncobj_fence_get(syncobj);
+ drm_syncobj_search_fence(syncobj, 0,
+ DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT,
+ &fence);
if (!fence)
return -EINVAL;
@@ -170,5 +170,7 @@ int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags,
int drm_syncobj_get_handle(struct drm_file *file_private,
struct drm_syncobj *syncobj, u32 *handle);
int drm_syncobj_get_fd(struct drm_syncobj *syncobj, int *p_fd);
+int drm_syncobj_search_fence(struct drm_syncobj *syncobj, u64 point,
+ u64 flags, struct dma_fence **fence);
#endif
Signed-off-by: Chunming Zhou <david1.zhou@amd.com> --- drivers/gpu/drm/drm_syncobj.c | 5 +++-- drivers/gpu/drm/i915/i915_gem_execbuffer.c | 4 +++- include/drm/drm_syncobj.h | 2 ++ 3 files changed, 8 insertions(+), 3 deletions(-)