[Intel-gfx] [PATCH v4] drm/i915/gt: allow setting generic data pointer

Daniele Ceraolo Spurio daniele.ceraolospurio at intel.com
Mon Mar 9 22:05:01 UTC 2020



On 3/7/20 2:19 PM, Andi Shyti wrote:
> Hi Chris,
> 
>>>> Quoting Andi Shyti (2020-03-06 23:03:44)
>>>>> -void debugfs_gt_register_files(struct intel_gt *gt,
>>>>> -                              struct dentry *root,
>>>>> -                              const struct debugfs_gt_file *files,
>>>>> -                              unsigned long count)
>>>>> +void intel_gt_debugfs_register_files(struct dentry *root,
>>>>> +                                    const struct debugfs_gt_file *files,
>>>>> +                                    unsigned long count, void *data)
>>>>>   {
>>>>>          while (count--) {
>>>>> -               if (!files->eval || files->eval(gt))
>>>>> +               if (!files->eval || files->eval(data))
>>>>>                          debugfs_create_file(files->name,
>>>>> -                                           0444, root, gt,
>>>>> +                                           0444, root, data,
>>>>>                                              files->fops);
>>>>>   
>>>>
>>>> And now we are not a intel_gt routine, you'll want to move again :)
>>>> i915_debugfs_utils.c ? :)
>>>
>>> Actually, this is what it came to and this was the first
>>> discussion I had with Daniele and that's also why I was loyal to
>>> th "_gt_" wrappers until the end. But I had to agree that this
>>> was becoming more a limitation.
>>>
>>> The biggest difference left, which by the way is the real
>>> distinguishing factor other than the *gt pointer, is that we
>>> create files under gt directory, instead of having the root
>>> imposed by the drm (even though the caller can eventually choose
>>> different roots).
>>>
>>> We could perhaps store the root pointer in the intel_gt
>>> structure so that this function stays de facto an intel_gt
>>> routine and the caller doesn't need to care where the files will
>>> be generated. This is what we planned to do with sysfs as well.
>>>
>>> What do you think?
>>
>> I thought we were passing along the root. If not I think we should, more
>> of a debugfs constructor context?
> 
> What do you mean with debugfs constructor context? Is it a
> gt->debugfs_root pointer like the gt->sysfs_root?
> 

Getting the root pointer internally from gt wouldn't work well for 
subfolders, like the gt/uc/ folder I want to add for GuC/HuC files. I 
think extracting this generic helper to a common file, possibly as a 
follow-up step, isn't a bad idea, also considering that there is at 
least 1 more use-case in i915_debugfs_register(). Maybe we can 
generalize as something like:

struct i915_debugfs_files {
	const char *name;
	const struct file_operations *fops;
	bool (*eval)(void *data);
}

void i915_debugfs_register_files(struct dentry *root,
				 const struct i915_debugfs_files *files,
				 unsigned long count, void *data)
{
  	while (count--) {
		umode_t mode = files->fops->write ? 0644 : 0444;
		if (!files->eval || files->eval(data))
  			debugfs_create_file(files->name,
					    mode, root, data,
  					    files->fops);
	}
}

Daniele

>> The main thing of course is not to overengineer and do the minimal
>> necessary for the immediate users we have. We can always extend and
>> refactor for a third user, etc, etc.
>>
>> So if this works for gt + children, go for it and worry about tomorrow,
>> tomorrow. Trusting our good practice for "a stitch in time saves nine".
> 
> this came after Daniele's guc patches where he preferred to
> define his own functions instead of using this one that is meant
> to be used in that situation.
> 
> Andi
> 


More information about the Intel-gfx mailing list