[Intel-gfx] [PATCH 14/38] drm/i915: Introduce the i915_user_extension_method

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Mon Mar 4 09:45:43 UTC 2019


On 04/03/2019 09:35, Tvrtko Ursulin wrote:
> 
> On 04/03/2019 09:04, Chris Wilson wrote:
>> Quoting Tvrtko Ursulin (2019-03-04 08:54:10)
>>>
>>> On 01/03/2019 18:57, Chris Wilson wrote:
>>>> Quoting Tvrtko Ursulin (2019-03-01 15:39:13)
>>>>>
>>>>> On 01/03/2019 14:03, Chris Wilson wrote:
>>>>>> +int i915_user_extensions(struct i915_user_extension __user *ext,
>>>>>> +                      const i915_user_extension_fn *tbl,
>>>>>> +                      unsigned long count,
>>>>>> +                      void *data)
>>>>>> +{
>>>>>> +     unsigned int stackdepth = 512;
>>>>>> +
>>>>>> +     while (ext) {
>>>>>> +             int err;
>>>>>> +             u64 x;
>>>>>> +
>>>>>> +             if (!stackdepth--) /* recursion vs useful 
>>>>>> flexibility */
>>>>>> +                     return -EINVAL;
>>>>>
>>>>> I don't get this. What stack? Did you mean "static unsigned int
>>>>> stackdepth" in case someone puts i915_user_extension into the 
>>>>> extension
>>>>> table? Or just a limit on number of chained extensions? But you are 
>>>>> not
>>>>> processing the recursively here.
>>>>
>>>> It's iterative recursion :)
>>>>
>>>> I still think of this loop in terms of its simple tail recursion.
>>>>
>>>> And if we need to individual levels for unwind, that is a manual stack.
>>> Okay..
>>>
>>> One thought I had - if unwind is too unwieldy, could we mandate each
>>> user extension user has an additional output field in the embedding
>>> struct which would hold the last processed extension id?
>>
>> id? I guess we could do depth, though I guess pointer is more practical.
>> I don't think you mean ext.name as that we expect to repeat a few times.
> 
> Pointer yes, I started with a pointer but then for some reason wrote id, 
> where I meant name.
> 
>>> This way the state of the object would be less undefined after failure.
>>> Userspace would be able to tell how far in the extension chain i915
>>> managed to get to.
>>
>> But I'm not convinced how practical that is. The answer is pretty much
>> always -EINVAL (anything else is much less ambiguous) and even then you
>> have no idea which field tripped EINVAL or why?
> 
> Which field tripped -EINVAL is why is always true.
> 
> I am not 100% convinced myself, just worry about usability. But I don't 
> have an usecase at the moment which would be practically helped with 
> knowing which extension failed. In all cases I can think of it's a 
> programming error ie. should be caught during development and not happen 
> in production.

To add - if we are adding a new extensible uAPI my gut feeling is we 
should provision for reporting which stage failed. I think it is easy 
now, while later it would be much harder.

Regards,

Tvrtko


More information about the Intel-gfx mailing list