Skip to content

Commit 7166cc3

Browse files
author
Lucas De Marchi
committed
drm/xe/configfs: Extract function to parse engine
Move the part that copies the engine to a local buffer so it can be shared in future for other configfs attributes parsing an engine. Reviewed-by: Raag Jadav <raag.jadav@intel.com> Link: https://lore.kernel.org/r/20250916-wa-bb-cmds-v5-1-306bddbc15da@intel.com Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
1 parent efa2931 commit 7166cc3

1 file changed

Lines changed: 21 additions & 11 deletions

File tree

drivers/gpu/drm/xe/xe_configfs.c

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -283,24 +283,34 @@ static bool lookup_engine_mask(const char *pattern, u64 *mask)
283283
return false;
284284
}
285285

286+
static int parse_engine(const char *s, const char *end_chars, u64 *mask)
287+
{
288+
char buf[MAX_ENGINE_CLASS_CHARS + MAX_ENGINE_INSTANCE_CHARS + 1];
289+
size_t len;
290+
291+
len = strcspn(s, end_chars);
292+
if (len >= sizeof(buf))
293+
return -EINVAL;
294+
295+
memcpy(buf, s, len);
296+
buf[len] = '\0';
297+
298+
if (!lookup_engine_mask(buf, mask))
299+
return -ENOENT;
300+
301+
return len;
302+
}
303+
286304
static ssize_t engines_allowed_store(struct config_item *item, const char *page,
287305
size_t len)
288306
{
289307
struct xe_config_group_device *dev = to_xe_config_group_device(item);
290-
size_t patternlen, p;
308+
ssize_t patternlen, p;
291309
u64 mask, val = 0;
292310

293311
for (p = 0; p < len; p += patternlen + 1) {
294-
char buf[MAX_ENGINE_CLASS_CHARS + MAX_ENGINE_INSTANCE_CHARS + 1];
295-
296-
patternlen = strcspn(page + p, ",\n");
297-
if (patternlen >= sizeof(buf))
298-
return -EINVAL;
299-
300-
memcpy(buf, page + p, patternlen);
301-
buf[patternlen] = '\0';
302-
303-
if (!lookup_engine_mask(buf, &mask))
312+
patternlen = parse_engine(page + p, ",\n", &mask);
313+
if (patternlen < 0)
304314
return -EINVAL;
305315

306316
val |= mask;

0 commit comments

Comments
 (0)