Hello! On 2024-01-26 at 13:08:19 -0800, Reinette Chatre wrote: >Hi Maciej, > >On 1/25/2024 3:10 AM, Maciej Wieczor-Retman wrote: >> The CAT non-contiguous selftests have to read the file responsible for >> reporting support of non-contiguous CBMs in kernel (resctrl). Then the >> test compares if that information matches what is reported by CPUID >> output. >> >> Add a generic helper function to read an unsigned number from a file in >> /sys/fs/resctrl/info/<RESOURCE>/<FILE>. >> >> Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@xxxxxxxxx> >> --- >> Changelog v3: >> - Rewrite patch message. >> - Add documentation and rewrote the function. (Reinette) >> >> Changelog v2: >> - Add this patch. >> >> tools/testing/selftests/resctrl/resctrl.h | 1 + >> tools/testing/selftests/resctrl/resctrlfs.c | 39 +++++++++++++++++++++ >> 2 files changed, 40 insertions(+) >> >> diff --git a/tools/testing/selftests/resctrl/resctrl.h b/tools/testing/selftests/resctrl/resctrl.h >> index a1462029998e..5116ea082d03 100644 >> --- a/tools/testing/selftests/resctrl/resctrl.h >> +++ b/tools/testing/selftests/resctrl/resctrl.h >> @@ -162,6 +162,7 @@ unsigned int count_contiguous_bits(unsigned long val, unsigned int *start); >> int get_full_cbm(const char *cache_type, unsigned long *mask); >> int get_mask_no_shareable(const char *cache_type, unsigned long *mask); >> int get_cache_size(int cpu_no, const char *cache_type, unsigned long *cache_size); >> +int resource_info_unsigned_get(const char *resource, const char *filename, unsigned int *val); >> void ctrlc_handler(int signum, siginfo_t *info, void *ptr); >> int signal_handler_register(void); >> void signal_handler_unregister(void); >> diff --git a/tools/testing/selftests/resctrl/resctrlfs.c b/tools/testing/selftests/resctrl/resctrlfs.c >> index 5750662cce57..cb5147c5f9a9 100644 >> --- a/tools/testing/selftests/resctrl/resctrlfs.c >> +++ b/tools/testing/selftests/resctrl/resctrlfs.c >> @@ -249,6 +249,45 @@ static int get_bit_mask(const char *filename, unsigned long *mask) >> return 0; >> } >> >> +/* > >By not starting with /** the following will not be interpreted as kernel-doc >but the formatting does appear to follow the syntax, but not consistently so. >I think it would be more readable if the kernel-doc syntax is followed consistently. Sure, I'll change it. > >> + * resource_info_unsigned_get - Read an unsigned value from a file in >> + * /sys/fs/resctrl/info/RESOURCE/FILENAME > >"Read an unsigned value from /sys/fs/resctrl/info/RESOURCE/FILENAME"? Okay > >> + * @resource: Resource name that matches directory names in > >names? (plural) Right, it doesn't make much sense, I'll move it to singular. > >> + * /sys/fs/resctrl/info >> + * @filename: Filename of a file located in a directory specified with the >> + * 'resource' variable. > >I think this can be shortened to "File in /sys/fs/resctrl/info/@resource" Sure, thanks > >> + * @val: Variable where the read value is saved on success. > >"Contains read value on success." > >(no need to refer to it as a variable/parameter, it is implied by syntax). Right, I'll change it. > >> + * >> + * Return: = 0 on success, < 0 on failure. On success the read value is saved into the 'val' >> + * variable. > >"saved into the 'val' variable" -> "saved into @val" (since syntax indicates it is the parameter >there is no need to elaborate). Sure, thanks >Also please let lines in comments be of consistent length. Okay, I'll keep it to 80 characters. > >> + */ > > >> +int resource_info_unsigned_get(const char *resource, const char *filename, >> + unsigned int *val) >> +{ >> + char reason[128], file_path[PATH_MAX]; >> + FILE *fp; >> + >> + snprintf(file_path, sizeof(file_path), "%s/%s/%s", INFO_PATH, resource, >> + filename); >> + >> + fp = fopen(file_path, "r"); >> + if (!fp) { >> + snprintf(reason, sizeof(reason), "Error in opening %s file\n", filename); > >(apart from other discussions). "file" in message seems redundant. It can just be "Error >opening %s". It may also be useful to print file_path instead of filename to be specific >of what the code tried to open. Okay, I'll change it to file_path. > >> + ksft_perror(reason); >> + return -1; >> + } >> + >> + if (fscanf(fp, "%u", val) <= 0) { >> + snprintf(reason, sizeof(reason), "Could not get %s's contents\n", filename); >> + ksft_perror(reason); > >filename -> file_path ? Same as above. > >> + fclose(fp); >> + return -1; >> + } >> + >> + fclose(fp); >> + return 0; >> +} >> + > > >Reinette -- Kind regards Maciej Wieczór-Retman