[PATCH i-g-t 1/2] lib/igt_drm_fdinfo: Use longest match first
Lucas De Marchi
lucas.demarchi at intel.com
Thu Feb 1 14:09:32 UTC 2024
On Thu, Feb 01, 2024 at 01:43:21PM +0100, Kamil Konieczny wrote:
>Hi Lucas,
>On 2024-01-31 at 16:46:24 -0800, Lucas De Marchi wrote:
>> Instead of checking twice the match, just use longest match first.
>
>Nice catch, LGTM.
>
>Reviewed-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
>
>>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
>> ---
>> lib/igt_drm_fdinfo.c | 19 +++++++++----------
>> 1 file changed, 9 insertions(+), 10 deletions(-)
>>
>> diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
>> index 222ccbfb1..5c0ccf624 100644
>> --- a/lib/igt_drm_fdinfo.c
>> +++ b/lib/igt_drm_fdinfo.c
>> @@ -239,8 +239,15 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
>> strlen("drm-client-id")))) {
>> info->id = atol(v);
>> good++;
>> - } else if (!strncmp(l, "drm-engine-", 11) &&
>> - strncmp(l, "drm-engine-capacity-", 20)) {
>> + } else if (!strncmp(l, "drm-engine-capacity-", 20)) {
>
>One more thing to eventually fix is removing "20" which is exact
>len of string, with something like
>
>bool str_begins(char *src, char *pattern)
>
>One source of errors is counting letters in strings or changing
>string itself without changing corresponding len. This can be
>done in separate patch.
I had a patch for something similar. I usually use a strstartswith()
that's commonly used in other projects and also matches the python name.
However I decided to drop that for now. I may have a bigger refactor in
this function soon reworking parse_engine() and other functions: Worse
than manually counting the chars for the strncmp() is to call strlen()
in the same string just in the line below that to feed to parse_engine()
:-/. As I said, still undecided what to change here and if it's worth
it.
Lucas De Marchi
>
>Regards,
>Kamil
>
>> + idx = parse_engine(l, info,
>> + strlen("drm-engine-capacity-"),
>> + name_map, map_entries, &val);
>> + if (idx >= 0) {
>> + info->capacity[idx] = val;
>> + num_capacity++;
>> + }
>> + } else if (!strncmp(l, "drm-engine-", 11)) {
>> idx = parse_engine(l, info, strlen("drm-engine-"),
>> name_map, map_entries, &val);
>> if (idx >= 0) {
>> @@ -251,14 +258,6 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
>> if (idx > info->last_engine_index)
>> info->last_engine_index = idx;
>> }
>> - } else if (!strncmp(l, "drm-engine-capacity-", 20)) {
>> - idx = parse_engine(l, info,
>> - strlen("drm-engine-capacity-"),
>> - name_map, map_entries, &val);
>> - if (idx >= 0) {
>> - info->capacity[idx] = val;
>> - num_capacity++;
>> - }
>> } else if (!strncmp(l, "drm-total-", 10)) {
>> idx = parse_region(l, info, strlen("drm-total-"),
>> region_map, region_entries, &val);
>> --
>> 2.43.0
>>
More information about the igt-dev
mailing list