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

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Mon Mar 4 08:54:10 UTC 2019


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?

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.

Regards,

Tvrtko


More information about the Intel-gfx mailing list