From: Lucas De Marchi Date: Tue, 16 Sep 2025 21:15:38 +0000 (-0700) Subject: drm/xe/configfs: Extract function to parse engine X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=7166cc3a6aae9aaa529f52e1468006e67e3e6846;p=users%2Fhch%2Fmisc.git 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 Link: https://lore.kernel.org/r/20250916-wa-bb-cmds-v5-1-306bddbc15da@intel.com Signed-off-by: Lucas De Marchi --- diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c index e52808e3199f..8db7a2af1101 100644 --- a/drivers/gpu/drm/xe/xe_configfs.c +++ b/drivers/gpu/drm/xe/xe_configfs.c @@ -283,24 +283,34 @@ static bool lookup_engine_mask(const char *pattern, u64 *mask) return false; } +static int parse_engine(const char *s, const char *end_chars, u64 *mask) +{ + char buf[MAX_ENGINE_CLASS_CHARS + MAX_ENGINE_INSTANCE_CHARS + 1]; + size_t len; + + len = strcspn(s, end_chars); + if (len >= sizeof(buf)) + return -EINVAL; + + memcpy(buf, s, len); + buf[len] = '\0'; + + if (!lookup_engine_mask(buf, mask)) + return -ENOENT; + + return len; +} + static ssize_t engines_allowed_store(struct config_item *item, const char *page, size_t len) { struct xe_config_group_device *dev = to_xe_config_group_device(item); - size_t patternlen, p; + ssize_t patternlen, p; u64 mask, val = 0; for (p = 0; p < len; p += patternlen + 1) { - char buf[MAX_ENGINE_CLASS_CHARS + MAX_ENGINE_INSTANCE_CHARS + 1]; - - patternlen = strcspn(page + p, ",\n"); - if (patternlen >= sizeof(buf)) - return -EINVAL; - - memcpy(buf, page + p, patternlen); - buf[patternlen] = '\0'; - - if (!lookup_engine_mask(buf, &mask)) + patternlen = parse_engine(page + p, ",\n", &mask); + if (patternlen < 0) return -EINVAL; val |= mask;