diff options
Diffstat (limited to 'drivers/gpu/drm/drm_gem.c')
| -rw-r--r-- | drivers/gpu/drm/drm_gem.c | 83 | 
1 files changed, 2 insertions, 81 deletions
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index 56fb87885146..eb0c2d041f13 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@ -771,7 +771,8 @@ long drm_gem_dma_resv_wait(struct drm_file *filep, u32 handle,  		return -EINVAL;  	} -	ret = dma_resv_wait_timeout(obj->resv, wait_all, true, timeout); +	ret = dma_resv_wait_timeout(obj->resv, dma_resv_usage_rw(wait_all), +				    true, timeout);  	if (ret == 0)  		ret = -ETIME;  	else if (ret > 0) @@ -1273,83 +1274,3 @@ drm_gem_unlock_reservations(struct drm_gem_object **objs, int count,  	ww_acquire_fini(acquire_ctx);  }  EXPORT_SYMBOL(drm_gem_unlock_reservations); - -/** - * drm_gem_fence_array_add - Adds the fence to an array of fences to be - * waited on, deduplicating fences from the same context. - * - * @fence_array: array of dma_fence * for the job to block on. - * @fence: the dma_fence to add to the list of dependencies. - * - * This functions consumes the reference for @fence both on success and error - * cases. - * - * Returns: - * 0 on success, or an error on failing to expand the array. - */ -int drm_gem_fence_array_add(struct xarray *fence_array, -			    struct dma_fence *fence) -{ -	struct dma_fence *entry; -	unsigned long index; -	u32 id = 0; -	int ret; - -	if (!fence) -		return 0; - -	/* Deduplicate if we already depend on a fence from the same context. -	 * This lets the size of the array of deps scale with the number of -	 * engines involved, rather than the number of BOs. -	 */ -	xa_for_each(fence_array, index, entry) { -		if (entry->context != fence->context) -			continue; - -		if (dma_fence_is_later(fence, entry)) { -			dma_fence_put(entry); -			xa_store(fence_array, index, fence, GFP_KERNEL); -		} else { -			dma_fence_put(fence); -		} -		return 0; -	} - -	ret = xa_alloc(fence_array, &id, fence, xa_limit_32b, GFP_KERNEL); -	if (ret != 0) -		dma_fence_put(fence); - -	return ret; -} -EXPORT_SYMBOL(drm_gem_fence_array_add); - -/** - * drm_gem_fence_array_add_implicit - Adds the implicit dependencies tracked - * in the GEM object's reservation object to an array of dma_fences for use in - * scheduling a rendering job. - * - * This should be called after drm_gem_lock_reservations() on your array of - * GEM objects used in the job but before updating the reservations with your - * own fences. - * - * @fence_array: array of dma_fence * for the job to block on. - * @obj: the gem object to add new dependencies from. - * @write: whether the job might write the object (so we need to depend on - * shared fences in the reservation object). - */ -int drm_gem_fence_array_add_implicit(struct xarray *fence_array, -				     struct drm_gem_object *obj, -				     bool write) -{ -	struct dma_resv_iter cursor; -	struct dma_fence *fence; -	int ret = 0; - -	dma_resv_for_each_fence(&cursor, obj->resv, write, fence) { -		ret = drm_gem_fence_array_add(fence_array, fence); -		if (ret) -			break; -	} -	return ret; -} -EXPORT_SYMBOL(drm_gem_fence_array_add_implicit);  |