From: Lucas De Marchi <lucas.demarchi@intel.com>
To: igt-dev@lists.freedesktop.org
Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>,
Tvrtko Ursulin <tursulin@ursulin.net>,
Lucas De Marchi <lucas.demarchi@intel.com>
Subject: [PATCH i-g-t v3 04/13] lib/igt_drm_fdinfo: Stop passing key twice
Date: Fri, 3 May 2024 23:46:34 -0700 [thread overview]
Message-ID: <20240504064643.25863-5-lucas.demarchi@intel.com> (raw)
In-Reply-To: <20240504064643.25863-1-lucas.demarchi@intel.com>
Change strstartswith() so it also returns the length, which then can be
used inside the branch when it matches. A good compiler shall optimize
out the strlen call since the argument is a constant literal.
With this, the find_kv() is not needed anymore and the difference with
regard the other branches can be summarized with a new ignore_space()
helper and the fact it matches the entire key by appending the ':'. The
helper is added on top of the file so it can be reused later.
v2: Fix missing ignore_space() on drm-driver and drm-pdev
Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
lib/igt_drm_fdinfo.c | 71 +++++++++++++++++++-------------------------
1 file changed, 30 insertions(+), 41 deletions(-)
diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
index 3b8e79a35..254f4c52b 100644
--- a/lib/igt_drm_fdinfo.c
+++ b/lib/igt_drm_fdinfo.c
@@ -112,23 +112,6 @@ static int parse_engine(char *line, struct drm_client_fdinfo *info,
return found;
}
-static const char *find_kv(const char *buf, const char *key, size_t keylen)
-{
- const char *p;
-
- if (strncmp(buf, key, keylen))
- return NULL;
-
- p = buf + keylen;
- if (*p != ':')
- return NULL;
-
- p++;
- p = ignore_space(p);
-
- return *p ? p : NULL;
-}
-
static int parse_region(char *line, struct drm_client_fdinfo *info,
size_t prefix_len,
const char **region_map, unsigned int region_entries,
@@ -210,6 +193,11 @@ out:
} \
} while (0)
+#define strstartswith(a, b, plen__) ({ \
+ *plen__ = strlen(b); \
+ strncmp(a, b, *plen__) == 0; \
+})
+
unsigned int
__igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
const char **name_map, unsigned int map_entries,
@@ -227,34 +215,36 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
while ((l = strtok_r(_buf, "\n", &ctx))) {
uint64_t val = 0;
+ size_t keylen;
const char *v;
char *end_ptr;
int idx;
_buf = NULL;
- if ((v = find_kv(l, "drm-driver", strlen("drm-driver")))) {
- strncpy(info->driver, v, sizeof(info->driver) - 1);
- good++;
- } else if ((v = find_kv(l, "drm-client-id",
- strlen("drm-client-id")))) {
+ if (strstartswith(l, "drm-driver:", &keylen)) {
+ v = ignore_space(l + keylen);
+ if (*v) {
+ strncpy(info->driver, v, sizeof(info->driver) - 1);
+ good++;
+ }
+ } else if (strstartswith(l, "drm-client-id:", &keylen)) {
+ v = l + keylen;
info->id = strtol(v, &end_ptr, 10);
if (end_ptr != v)
good++;
- } else if ((v = find_kv(l, "drm-pdev", strlen("drm-pdev")))) {
- /* optional */
- assert(strlen(v) < sizeof(info->pdev));
+ } else if (strstartswith(l, "drm-pdev:", &keylen)) {
+ v = ignore_space(l + keylen);
strncpy(info->pdev, v, sizeof(info->pdev) - 1);
- } else if (!strncmp(l, "drm-engine-capacity-", 20)) {
- idx = parse_engine(l, info,
- strlen("drm-engine-capacity-"),
+ } else if (strstartswith(l, "drm-engine-capacity-", &keylen)) {
+ idx = parse_engine(l, info, keylen,
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-"),
+ } else if (strstartswith(l, "drm-engine-", &keylen)) {
+ idx = parse_engine(l, info, keylen,
name_map, map_entries, &val);
if (idx >= 0) {
if (!info->capacity[idx])
@@ -264,25 +254,24 @@ __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-total-", 10)) {
- idx = parse_region(l, info, strlen("drm-total-"),
+ } else if (strstartswith(l, "drm-total-", &keylen)) {
+ idx = parse_region(l, info, keylen,
region_map, region_entries, &val);
UPDATE_REGION(idx, total, val);
- } else if (!strncmp(l, "drm-shared-", 11)) {
- idx = parse_region(l, info, strlen("drm-shared-"),
+ } else if (strstartswith(l, "drm-shared-", &keylen)) {
+ idx = parse_region(l, info, keylen,
region_map, region_entries, &val);
UPDATE_REGION(idx, shared, val);
-
- } else if (!strncmp(l, "drm-resident-", 13)) {
- idx = parse_region(l, info, strlen("drm-resident-"),
+ } else if (strstartswith(l, "drm-resident-", &keylen)) {
+ idx = parse_region(l, info, keylen,
region_map, region_entries, &val);
UPDATE_REGION(idx, resident, val);
- } else if (!strncmp(l, "drm-purgeable-", 14)) {
- idx = parse_region(l, info, strlen("drm-purgeable-"),
+ } else if (strstartswith(l, "drm-purgeable-", &keylen)) {
+ idx = parse_region(l, info, keylen,
region_map, region_entries, &val);
UPDATE_REGION(idx, purgeable, val);
- } else if (!strncmp(l, "drm-active-", 11)) {
- idx = parse_region(l, info, strlen("drm-active-"),
+ } else if (strstartswith(l, "drm-active-", &keylen)) {
+ idx = parse_region(l, info, keylen,
region_map, region_entries, &val);
UPDATE_REGION(idx, active, val);
}
--
2.43.0
next prev parent reply other threads:[~2024-05-04 6:46 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-04 6:46 [PATCH i-g-t v3 00/12] gputop: Add support for xe Lucas De Marchi
2024-05-04 6:46 ` [PATCH i-g-t v3 01/13] lib/igt_drm_fdinfo: Extract ignore_space() Lucas De Marchi
2024-05-06 20:21 ` Umesh Nerlige Ramappa
2024-05-04 6:46 ` [PATCH i-g-t v3 02/13] lib/igt_drm_fdinfo: Allow any number of spaces before unit Lucas De Marchi
2024-05-06 20:28 ` Umesh Nerlige Ramappa
2024-05-06 20:32 ` Umesh Nerlige Ramappa
2024-05-06 20:38 ` Lucas De Marchi
2024-05-04 6:46 ` [PATCH i-g-t v3 03/13] fixup! " Lucas De Marchi
2024-05-06 20:33 ` Umesh Nerlige Ramappa
2024-05-04 6:46 ` Lucas De Marchi [this message]
2024-05-04 6:46 ` [PATCH i-g-t v3 05/13] lib/igt_drm_fdinfo: Remove prefix arg from parse functions Lucas De Marchi
2024-05-04 6:46 ` [PATCH i-g-t v3 06/13] lib/igt_drm_fdinfo: Parse drm-cycles Lucas De Marchi
2024-05-07 1:11 ` Umesh Nerlige Ramappa
2024-05-04 6:46 ` [PATCH i-g-t v3 07/13] lib/igt_drm_fdinfo: Start tracking available engine keys Lucas De Marchi
2024-05-07 1:14 ` Umesh Nerlige Ramappa
2024-05-04 6:46 ` [PATCH i-g-t v3 08/13] treewide: Rename engine busyness variables Lucas De Marchi
2024-05-08 18:45 ` Umesh Nerlige Ramappa
2024-05-21 13:47 ` Lucas De Marchi
2024-05-04 6:46 ` [PATCH i-g-t v3 09/13] lib/igt_drm_clients: Move engine fields to substruct Lucas De Marchi
2024-05-08 18:45 ` Umesh Nerlige Ramappa
2024-05-04 6:46 ` [PATCH i-g-t v3 10/13] lib/igt_drm_clients: Record drm-cycles Lucas De Marchi
2024-05-08 18:48 ` Umesh Nerlige Ramappa
2024-05-04 6:46 ` [PATCH i-g-t v3 11/13] lib/igt_drm_fdinfo: Parse drm-total-cycles Lucas De Marchi
2024-05-08 18:49 ` Umesh Nerlige Ramappa
2024-05-04 6:46 ` [PATCH i-g-t v3 12/13] lib/igt_drm_clients: Record total cycles Lucas De Marchi
2024-05-08 19:01 ` Umesh Nerlige Ramappa
2024-05-08 19:07 ` Umesh Nerlige Ramappa
2024-05-04 6:46 ` [PATCH i-g-t v3 13/13] gputop: Add support to drm-cycles/drm-total-cycles Lucas De Marchi
2024-05-08 19:11 ` Umesh Nerlige Ramappa
2024-05-04 7:31 ` ✓ Fi.CI.BAT: success for gputop: Add support for xe (rev4) Patchwork
2024-05-04 7:36 ` ✓ CI.xeBAT: " Patchwork
2024-05-04 8:33 ` ✗ CI.xeFULL: failure " Patchwork
2024-05-04 12:50 ` ✗ Fi.CI.IGT: " Patchwork
2024-05-06 10:37 ` [PATCH i-g-t v3 00/12] gputop: Add support for xe Tvrtko Ursulin
2024-05-06 20:40 ` Lucas De Marchi
2024-05-08 16:25 ` (subset) " Lucas De Marchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240504064643.25863-5-lucas.demarchi@intel.com \
--to=lucas.demarchi@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=tursulin@ursulin.net \
--cc=umesh.nerlige.ramappa@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.