[Intel-gfx] [PATCH 05/59] drm/i915: Reserve ring buffer space for i915_add_request() commands
John Harrison
John.C.Harrison at Intel.com
Fri Mar 20 08:55:59 PDT 2015
On 20/03/2015 15:13, Daniel Vetter wrote:
> On Thu, Mar 19, 2015 at 12:30:10PM +0000, John.C.Harrison at Intel.com wrote:
>> +void intel_ring_reserved_space_use(struct intel_ringbuffer *ringbuf, int size)
> Just a bit of interface bikeshed - I'd drop the size parameter here. It
> just duplicates what we tell the ring in the reservation code and the real
> check happens in the _end function.
>
>> +{
>> + WARN_ON(size > ringbuf->reserved_size);
>> + WARN_ON(ringbuf->reserved_in_use);
>> +
>> + ringbuf->reserved_in_use = true;
>> + ringbuf->reserved_tail = ringbuf->tail;
>> +}
>> +
>> +void intel_ring_reserved_space_end(struct intel_ringbuffer *ringbuf)
>> +{
>> + WARN_ON(!ringbuf->reserved_in_use);
>> + WARN_ON(ringbuf->tail > ringbuf->reserved_tail + ringbuf->reserved_size);
> Don't we need to handle wrap-around to make sure we do correctly check for
> sufficient reservation?
> -Daniel
There is nothing special to worry about for wrapping. The regular
intel_ring_begin() code will handle all that as before. The whole point
of the reserved scheme is that it is basically the same as calling
intel_ring_begin() with 'size + RESERVED_SIZE' everywhere. So when
i915_add_request() starts, it is guaranteed that an
'intel_ring_begin(RESERVED_SIZE)' has been done already including any
necessary buffer wrapping. Thus it does not actually need to call
'i_r_begin()' at all, really - it is guaranteed to succeed (as long as
it stays within RESERVED_SIZE total usage).
John.
More information about the Intel-gfx
mailing list