Am 11.09.2017 um 12:01 schrieb Chris Wilson:
[SNIP]
Yeah, but that is illegal with a fence objects.
When anybody allocates fences this way it breaks at least reservation_object_get_fences_rcu(), reservation_object_wait_timeout_rcu() and reservation_object_test_signaled_single().
Many, many months ago I sent patches to fix them all.
Found those after a bit a searching. Yeah, those patches where proposed more than a year ago, but never pushed upstream.
Not sure if we really should go this way. dma_fence objects are shared between drivers and since we can't judge if it's the correct fence based on a criteria in the object (only the read counter which is outside) all drivers need to be correct for this.
I would rather go the way and change dma_fence_release() to wrap fence->ops->release into call_rcu() to keep the whole RCU handling outside of the individual drivers.
Regards, Christian.