Move code which parses an input string into array of longs to a shared location so following patches can make use of it.
QQQ: Static inline in a header file is not the best. Figure out a better place. Signed-off-by: Tvrtko Ursulin <[email protected]> --- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 36 +++++++++++++++++++ .../amd/display/amdgpu_dm/amdgpu_dm_debugfs.c | 21 +++-------- 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 17848ce65d1f..61019e64d376 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -1804,4 +1804,40 @@ void amdgpu_device_set_uid(struct amdgpu_uid *uid_info, uint64_t uid); uint64_t amdgpu_device_get_uid(struct amdgpu_uid *uid_info, enum amdgpu_uid_type type, uint8_t inst); + +/** + * amdgpu_parse_buffer_l - parse text into array of longs + * @buf: input buffer (will be modified while parsing) + * @base: base argument for kstrtol + * @delimiters: array of delimiters separating arguments + * @param: output array + * @max_params: maximum number of params to store in the output array + * + * Returns zero for no parameters found, number of arguments found (capped to + * max_params), or the negative errno in case of a failure. + */ +static inline int amdgpu_parse_buffer_l(char *buf, unsigned int base, + const char *delimiters, + long *param, unsigned int max_params) +{ + char *token, *tmp = buf; + unsigned int i = 0; + + while ((token = strsep(&tmp, delimiters)) != NULL) { + int ret; + + if (!strlen(token)) + continue; + + if (i == max_params) + break; + + ret = kstrtol(token, base, ¶m[i++]); + if (ret) + return ret; + } + + return i; +} + #endif diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c index c18c4df6126f..dd6aa72de0c2 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c @@ -78,24 +78,13 @@ static int parse_write_buffer_into_params(char *buf, unsigned int max_param_num, unsigned int *param_nums) { - char *token, *tmp = buf; - unsigned int i = 0; + int ret; - while ((token = strsep(&tmp, " \n")) != NULL) { - int ret; + ret = amdgpu_parse_buffer_l(buf, 16, " \n", param, max_param_num); + if (ret < 0) + return ret; - if (!strlen(token)) - continue; - - if (i == max_param_num) - break; - - ret = kstrtol(token, 16, ¶m[i++]); - if (ret) - return ret; - } - - *param_nums = i; + *param_nums = ret; return 0; } -- 2.48.0
