Nouveau fences?

Francisco Jerez currojerez at
Sun Nov 28 13:55:18 PST 2010

Thomas Hellstrom <thomas at> writes:

> On 11/28/2010 05:11 PM, Francisco Jerez wrote:
>> Francisco Jerez<currojerez at>  writes:
>>> Thomas Hellstrom<thomas at>  writes:
>>>> Ben,
>>>> I'm looking at a way to make TTM memory management asynchronous with
>>>> the CPU. The idea is that you should basically be able to DMA data to
>>>> and from memory regions without waiting for idle, as long as the GPU
>>>> has a means to provide operation ordering.
>>> Sounds good. I guess you're mainly dealing with BO eviction
>>> synchronization? The only problem I see on our side is that calls to our
>>> move() hook aren't guaranteed to be carried out in order (because of the
>>> multiple hardware channels). I'm thinking that move() could be extended
>>> with an optional sync_obj argument, that way move() would be able to
>>> make sure that evictions are strictly ordered with respect to the fence
>>> specified.
> The way evictions will work is that they appear to take place
> "instantly", but are scheduled on a channel, and there will be a data
> structure that keeps track about what fences need to be signaled
> before a managed area can be reused.
> The driver will need to provide a function that, given a list of
> fences, returns a fence that when it signals, guarantees that all
> other fences in the list have signaled.

Ah, so, evictions made in response to ttm_bo_mem_force_space() are still
going to be synchronous after the changes you have in mind (because in
that case you need to reuse the freed memory immediately), right?

In other cases (e.g. evictions triggered by BO validation), what exactly
would we gain from this function? I mean, why can't we just push waiting
down to ttm_bo_move_ttm/memcpy?

> Single-channel hardware will just return the fence with the highest
> sequence. Multi-channel hardware may need to insert command stream
> barriers if available and create a new sync object to return or resort
> to simply waiting to determine which fence signals last.
> I guess Nouveau can do command stream barriers, (waiting for other
> channels to reach a certain command before progressing?)
Yep, that's what nouveau_fence_sync() does.

> Needless to say, drivers need not activate async operation if they
> don't want to, but for single-channel hardware it will hopefully be
> very simple.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 229 bytes
Desc: not available
URL: <>

More information about the dri-devel mailing list