[igt-dev] [PATCH i-g-t 2/6] lib/igt_sysfs: Add helpers to iterate over GTs

Umesh Nerlige Ramappa umesh.nerlige.ramappa at intel.com
Mon Apr 25 20:07:52 UTC 2022


On Thu, Apr 21, 2022 at 10:45:46PM -0700, Dixit, Ashutosh wrote:
>On Thu, 21 Apr 2022 07:52:07 -0700, <priyanka.dandamudi at intel.com> wrote:
>>
>> +char *igt_sysfs_gt_path(int device, int gt, char *path, int pathlen)
>> +{
>> +	struct stat st;
>> +
>> +	if (device < 0)
>> +		return NULL;
>> +
>> +	if (igt_debug_on(fstat(device, &st)) || igt_debug_on(!S_ISCHR(st.st_mode)))
>> +		return NULL;
>> +
>> +	snprintf(path, pathlen, "/sys/dev/char/%d:%d/gt/gt%d",
>> +		 major(st.st_rdev), minor(st.st_rdev), gt);
>> +
>> +	if (!igt_debug_on(access(path, F_OK)))
>> +		return path;
>> +	else if (!igt_debug_on(gt != 0))
>> +		return igt_sysfs_path(device, path, pathlen);
>
>I think these two igt_debug_on()'s should be removed. The issue is the
>for_each_sysfs_gt() loops below will send a gt value 1 greater than the
>actual number of gt's (at which point this function returns NULL and the
>loops exit). And then these igt_debug_on's will fire during the normal
>course of operation whereas they are meant to fire only in error. So if we
>fix this, this code becomes:
>
>> +	if (!(access(path, F_OK)))
>> +		return path;
>> +	else if (!gt)
>> +		return igt_sysfs_path(device, path, pathlen);

Agree that this should be fixed. Thanks for catching this.

Umesh
>
>The rest LGTM, so with that fixed, this is:
>
>Reviewed-by: Ashutosh Dixit <ashutosh.dixit at intel.com>
>
>> +#define for_each_sysfs_gt_path(i915__, path__, pathlen__) \
>> +	for (int gt__ = 0; \
>> +	     igt_sysfs_gt_path(i915__, gt__, path__, pathlen__) != NULL; \
>> +	     gt__++)
>> +
>> +#define for_each_sysfs_gt_dirfd(i915__, dirfd__, gt__) \
>> +	for (gt__ = 0; \
>> +	     (dirfd__ = igt_sysfs_gt_open(i915__, gt__)) != -1; \
>> +	     close(dirfd__), gt__++)


More information about the igt-dev mailing list