mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-11 13:04:03 +08:00
selftests/resctrl: Add a helper for the non-contiguous test
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 /sys/fs/resctrl/info/<RESOURCE>/<FILE>. Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com> Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Reviewed-by: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
This commit is contained in:
parent
5339792bd6
commit
e331ac141f
@ -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);
|
||||
|
@ -249,6 +249,42 @@ static int get_bit_mask(const char *filename, unsigned long *mask)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* resource_info_unsigned_get - Read an unsigned value from
|
||||
* /sys/fs/resctrl/info/@resource/@filename
|
||||
* @resource: Resource name that matches directory name in
|
||||
* /sys/fs/resctrl/info
|
||||
* @filename: File in /sys/fs/resctrl/info/@resource
|
||||
* @val: Contains read value on success.
|
||||
*
|
||||
* Return: = 0 on success, < 0 on failure. On success the read
|
||||
* value is saved into @val.
|
||||
*/
|
||||
int resource_info_unsigned_get(const char *resource, const char *filename,
|
||||
unsigned int *val)
|
||||
{
|
||||
char 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) {
|
||||
ksft_print_msg("Error opening %s: %m\n", file_path);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (fscanf(fp, "%u", val) <= 0) {
|
||||
ksft_print_msg("Could not get contents of %s: %m\n", file_path);
|
||||
fclose(fp);
|
||||
return -1;
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* create_bit_mask- Create bit mask from start, len pair
|
||||
* @start: LSB of the mask
|
||||
|
Loading…
Reference in New Issue
Block a user