[PATCH 5/8] sync_file: add support for a semaphore object

Chris Wilson chris at chris-wilson.co.uk
Tue Apr 4 11:59:29 UTC 2017


On Tue, Apr 04, 2017 at 12:52:32PM +0100, Chris Wilson wrote:
> On Tue, Apr 04, 2017 at 02:27:30PM +1000, Dave Airlie wrote:
> > +struct dma_fence *sync_file_replace_fence(struct sync_file *sync_file,
> > +					  struct dma_fence *fence)
> > +{
> > +	struct dma_fence *ret_fence = NULL;
> > +
> > +	if (sync_file->type != SYNC_FILE_TYPE_SEMAPHORE)
> > +		return NULL;
> > +
> > +	if (fence)
> > +		dma_fence_get(fence);
> > +
> > +	mutex_lock(&sync_file->lock);
> > +
> > +	ret_fence = sync_file_get_fence_locked(sync_file);
> > +	if (ret_fence) {
> > +		if (test_bit(POLL_ENABLED, &ret_fence->flags))
> > +			dma_fence_remove_callback(ret_fence, &sync_file->cb);
> 
> This is racy with sync_file_poll. And sync_file_poll now needs rcu
> protection (as does all access to sync_file->fence), I need to check
> whether the previous patches are complete. Also needs to handle, or
> forbid, the caller passing in the same fence.

Race is serialised by sync_file_poll also be under the mutex, so that's
ok. Just the possibility of being passed in its own fence.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the dri-devel mailing list