[Intel-gfx] [PATCH 2/2] drm/i915: Avoid decomposing a signal-on-any fence-array

Maarten Lankhorst maarten.lankhorst at linux.intel.com
Mon Feb 20 12:12:34 UTC 2017


Op 20-02-17 om 13:03 schreef Chris Wilson:
> On Mon, Feb 20, 2017 at 01:32:42PM +0200, Joonas Lahtinen wrote:
>> On pe, 2017-02-17 at 18:35 +0000, Chris Wilson wrote:
>>> The code currently assumes that all fence arrays it sees are the normal
>>> signal-on-all variety, and decomposes the array into its individual
>>> fences so that it can extract the native i915 fences. If the fence array
>>> is using signal-on-any, we should not decompose as we must not wait on
>>> them all, just the first in *that* set.
>>>
>>> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
>>> CC: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
>>> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>> <SNIP>
>>
>>> @@ -696,7 +696,8 @@ i915_gem_request_await_dma_fence(struct drm_i915_gem_request *req,
>>>  	if (dma_fence_is_i915(fence))
>>>  		return i915_gem_request_await_request(req, to_request(fence));
>>>  
>>> -	if (!dma_fence_is_array(fence)) {
>>> +	if (!dma_fence_is_array(fence) ||
>>> +	    test_bit(DMA_FENCE_ARRAY_SIGNAL_ANY, &fence->flags)) {
>> Smells like a helper function? While that helper is finding the way
>> upstream;
> Blurgh.
>
> enum dma_fence_array_signal_mode {
>         DMA_FENCE_ARRAY_SIGNAL_ON_ALL = 0,
>         DMA_FENCE_ARRAY_SIGNAL_ON_ANY,
> };
>
> enum dma_fence_array_signal_mode
> dma_fence_array_get_signaling_mode(struct dma_fence_array *array)
> {       
>         return test_bit(DMA_FENCE_ARRAY_SIGNAL_ANY, &array->base.flags) ?
>                 DMA_FENCE_ARRAY_SIGNAL_ON_ANY : DMA_FENCE_ARRAY_SIGNAL_ON_ALL;
> }
>
> if (!dma_fence_is_array(fence) ||
>     dma_fence_array_get_signaling_mode(to_dma_fence_array(fence)) == DMA_FENCE_ARRAY_SIGNAL_ON_ANY)
>
> Hmm. Not happy with that yet.
> -Chris
>
bool dma_fence_array_signal_on_any with a WARN_ON(!dma_fence_is_array(fence))?



More information about the Intel-gfx mailing list