mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	dma-fence: Make ->wait callback optional
Almost everyone uses dma_fence_default_wait. v2: Also remove the BUG_ON(!ops->wait) (Chris). Reviewed-by: Christian König <christian.koenig@amd.com> (v1) Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Sumit Semwal <sumit.semwal@linaro.org> Cc: Gustavo Padovan <gustavo@padovan.org> Cc: linux-media@vger.kernel.org Cc: linaro-mm-sig@lists.linaro.org Link: https://patchwork.freedesktop.org/patch/msgid/20180503142603.28513-5-daniel.vetter@ffwll.ch
This commit is contained in:
		
							parent
							
								
									070473bcf7
								
							
						
					
					
						commit
						418cc6ca06
					
				
					 4 changed files with 13 additions and 10 deletions
				
			
		| 
						 | 
				
			
			@ -104,7 +104,6 @@ const struct dma_fence_ops dma_fence_array_ops = {
 | 
			
		|||
	.get_timeline_name = dma_fence_array_get_timeline_name,
 | 
			
		||||
	.enable_signaling = dma_fence_array_enable_signaling,
 | 
			
		||||
	.signaled = dma_fence_array_signaled,
 | 
			
		||||
	.wait = dma_fence_default_wait,
 | 
			
		||||
	.release = dma_fence_array_release,
 | 
			
		||||
};
 | 
			
		||||
EXPORT_SYMBOL(dma_fence_array_ops);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -158,7 +158,10 @@ dma_fence_wait_timeout(struct dma_fence *fence, bool intr, signed long timeout)
 | 
			
		|||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	trace_dma_fence_wait_start(fence);
 | 
			
		||||
	if (fence->ops->wait)
 | 
			
		||||
		ret = fence->ops->wait(fence, intr, timeout);
 | 
			
		||||
	else
 | 
			
		||||
		ret = dma_fence_default_wait(fence, intr, timeout);
 | 
			
		||||
	trace_dma_fence_wait_end(fence);
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -556,8 +559,7 @@ dma_fence_init(struct dma_fence *fence, const struct dma_fence_ops *ops,
 | 
			
		|||
	       spinlock_t *lock, u64 context, unsigned seqno)
 | 
			
		||||
{
 | 
			
		||||
	BUG_ON(!lock);
 | 
			
		||||
	BUG_ON(!ops || !ops->wait ||
 | 
			
		||||
	       !ops->get_driver_name || !ops->get_timeline_name);
 | 
			
		||||
	BUG_ON(!ops || !ops->get_driver_name || !ops->get_timeline_name);
 | 
			
		||||
 | 
			
		||||
	kref_init(&fence->refcount);
 | 
			
		||||
	fence->ops = ops;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -188,7 +188,6 @@ static const struct dma_fence_ops timeline_fence_ops = {
 | 
			
		|||
	.get_timeline_name = timeline_fence_get_timeline_name,
 | 
			
		||||
	.enable_signaling = timeline_fence_enable_signaling,
 | 
			
		||||
	.signaled = timeline_fence_signaled,
 | 
			
		||||
	.wait = dma_fence_default_wait,
 | 
			
		||||
	.release = timeline_fence_release,
 | 
			
		||||
	.fence_value_str = timeline_fence_value_str,
 | 
			
		||||
	.timeline_value_str = timeline_fence_timeline_value_str,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -191,11 +191,14 @@ struct dma_fence_ops {
 | 
			
		|||
	/**
 | 
			
		||||
	 * @wait:
 | 
			
		||||
	 *
 | 
			
		||||
	 * Custom wait implementation, or dma_fence_default_wait.
 | 
			
		||||
	 * Custom wait implementation, defaults to dma_fence_default_wait() if
 | 
			
		||||
	 * not set.
 | 
			
		||||
	 *
 | 
			
		||||
	 * Must not be NULL, set to dma_fence_default_wait for default implementation.
 | 
			
		||||
	 * the dma_fence_default_wait implementation should work for any fence, as long
 | 
			
		||||
	 * as enable_signaling works correctly.
 | 
			
		||||
	 * The dma_fence_default_wait implementation should work for any fence, as long
 | 
			
		||||
	 * as @enable_signaling works correctly. This hook allows drivers to
 | 
			
		||||
	 * have an optimized version for the case where a process context is
 | 
			
		||||
	 * already available, e.g. if @enable_signaling for the general case
 | 
			
		||||
	 * needs to set up a worker thread.
 | 
			
		||||
	 *
 | 
			
		||||
	 * Must return -ERESTARTSYS if the wait is intr = true and the wait was
 | 
			
		||||
	 * interrupted, and remaining jiffies if fence has signaled, or 0 if wait
 | 
			
		||||
| 
						 | 
				
			
			@ -203,7 +206,7 @@ struct dma_fence_ops {
 | 
			
		|||
	 * which should be treated as if the fence is signaled. For example a hardware
 | 
			
		||||
	 * lockup could be reported like that.
 | 
			
		||||
	 *
 | 
			
		||||
	 * This callback is mandatory.
 | 
			
		||||
	 * This callback is optional.
 | 
			
		||||
	 */
 | 
			
		||||
	signed long (*wait)(struct dma_fence *fence,
 | 
			
		||||
			    bool intr, signed long timeout);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue