mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-30 22:26:55 +00:00
selftests/resctrl: Split validate_resctrl_feature_request()
validate_resctrl_feature_request() is used to test both if a resource is present in the info directory, and if a passed monitoring feature is present in the mon_features file. Refactor validate_resctrl_feature_request() into two smaller functions that each accomplish one check to give feature checking more granularity: - Resource directory presence in the /sys/fs/resctrl/info directory. - Feature name presence in the /sys/fs/resctrl/info/<RESOURCE>/mon_features 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
e331ac141f
commit
0061641648
5 changed files with 31 additions and 17 deletions
|
@ -170,7 +170,7 @@ static int cmt_run_test(const struct resctrl_test *test, const struct user_param
|
||||||
static bool cmt_feature_check(const struct resctrl_test *test)
|
static bool cmt_feature_check(const struct resctrl_test *test)
|
||||||
{
|
{
|
||||||
return test_resource_feature_check(test) &&
|
return test_resource_feature_check(test) &&
|
||||||
validate_resctrl_feature_request("L3_MON", "llc_occupancy");
|
resctrl_mon_feature_exists("L3_MON", "llc_occupancy");
|
||||||
}
|
}
|
||||||
|
|
||||||
struct resctrl_test cmt_test = {
|
struct resctrl_test cmt_test = {
|
||||||
|
|
|
@ -171,7 +171,7 @@ static int mba_run_test(const struct resctrl_test *test, const struct user_param
|
||||||
static bool mba_feature_check(const struct resctrl_test *test)
|
static bool mba_feature_check(const struct resctrl_test *test)
|
||||||
{
|
{
|
||||||
return test_resource_feature_check(test) &&
|
return test_resource_feature_check(test) &&
|
||||||
validate_resctrl_feature_request("L3_MON", "mbm_local_bytes");
|
resctrl_mon_feature_exists("L3_MON", "mbm_local_bytes");
|
||||||
}
|
}
|
||||||
|
|
||||||
struct resctrl_test mba_test = {
|
struct resctrl_test mba_test = {
|
||||||
|
|
|
@ -97,7 +97,7 @@ static int mbm_setup(const struct resctrl_test *test,
|
||||||
return END_OF_TESTS;
|
return END_OF_TESTS;
|
||||||
|
|
||||||
/* Set up shemata with 100% allocation on the first run. */
|
/* Set up shemata with 100% allocation on the first run. */
|
||||||
if (p->num_of_runs == 0 && validate_resctrl_feature_request("MB", NULL))
|
if (p->num_of_runs == 0 && resctrl_resource_exists("MB"))
|
||||||
ret = write_schemata(p->ctrlgrp, "100", uparams->cpu, test->resource);
|
ret = write_schemata(p->ctrlgrp, "100", uparams->cpu, test->resource);
|
||||||
|
|
||||||
p->num_of_runs++;
|
p->num_of_runs++;
|
||||||
|
@ -140,8 +140,8 @@ static int mbm_run_test(const struct resctrl_test *test, const struct user_param
|
||||||
|
|
||||||
static bool mbm_feature_check(const struct resctrl_test *test)
|
static bool mbm_feature_check(const struct resctrl_test *test)
|
||||||
{
|
{
|
||||||
return validate_resctrl_feature_request("L3_MON", "mbm_total_bytes") &&
|
return resctrl_mon_feature_exists("L3_MON", "mbm_total_bytes") &&
|
||||||
validate_resctrl_feature_request("L3_MON", "mbm_local_bytes");
|
resctrl_mon_feature_exists("L3_MON", "mbm_local_bytes");
|
||||||
}
|
}
|
||||||
|
|
||||||
struct resctrl_test mbm_test = {
|
struct resctrl_test mbm_test = {
|
||||||
|
|
|
@ -136,7 +136,8 @@ int get_domain_id(const char *resource, int cpu_no, int *domain_id);
|
||||||
int mount_resctrlfs(void);
|
int mount_resctrlfs(void);
|
||||||
int umount_resctrlfs(void);
|
int umount_resctrlfs(void);
|
||||||
int validate_bw_report_request(char *bw_report);
|
int validate_bw_report_request(char *bw_report);
|
||||||
bool validate_resctrl_feature_request(const char *resource, const char *feature);
|
bool resctrl_resource_exists(const char *resource);
|
||||||
|
bool resctrl_mon_feature_exists(const char *resource, const char *feature);
|
||||||
bool test_resource_feature_check(const struct resctrl_test *test);
|
bool test_resource_feature_check(const struct resctrl_test *test);
|
||||||
char *fgrep(FILE *inf, const char *str);
|
char *fgrep(FILE *inf, const char *str);
|
||||||
int taskset_benchmark(pid_t bm_pid, int cpu_no, cpu_set_t *old_affinity);
|
int taskset_benchmark(pid_t bm_pid, int cpu_no, cpu_set_t *old_affinity);
|
||||||
|
|
|
@ -708,20 +708,16 @@ char *fgrep(FILE *inf, const char *str)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* validate_resctrl_feature_request - Check if requested feature is valid.
|
* resctrl_resource_exists - Check if a resource is supported.
|
||||||
* @resource: Required resource (e.g., MB, L3, L2, L3_MON, etc.)
|
* @resource: Resctrl resource (e.g., MB, L3, L2, L3_MON, etc.)
|
||||||
* @feature: Required monitor feature (in mon_features file). Can only be
|
|
||||||
* set for L3_MON. Must be NULL for all other resources.
|
|
||||||
*
|
*
|
||||||
* Return: True if the resource/feature is supported, else false. False is
|
* Return: True if the resource is supported, else false. False is
|
||||||
* also returned if resctrl FS is not mounted.
|
* also returned if resctrl FS is not mounted.
|
||||||
*/
|
*/
|
||||||
bool validate_resctrl_feature_request(const char *resource, const char *feature)
|
bool resctrl_resource_exists(const char *resource)
|
||||||
{
|
{
|
||||||
char res_path[PATH_MAX];
|
char res_path[PATH_MAX];
|
||||||
struct stat statbuf;
|
struct stat statbuf;
|
||||||
char *res;
|
|
||||||
FILE *inf;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!resource)
|
if (!resource)
|
||||||
|
@ -736,8 +732,25 @@ bool validate_resctrl_feature_request(const char *resource, const char *feature)
|
||||||
if (stat(res_path, &statbuf))
|
if (stat(res_path, &statbuf))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!feature)
|
return true;
|
||||||
return true;
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* resctrl_mon_feature_exists - Check if requested monitoring feature is valid.
|
||||||
|
* @resource: Resource that uses the mon_features file. Currently only L3_MON
|
||||||
|
* is valid.
|
||||||
|
* @feature: Required monitor feature (in mon_features file).
|
||||||
|
*
|
||||||
|
* Return: True if the feature is supported, else false.
|
||||||
|
*/
|
||||||
|
bool resctrl_mon_feature_exists(const char *resource, const char *feature)
|
||||||
|
{
|
||||||
|
char res_path[PATH_MAX];
|
||||||
|
char *res;
|
||||||
|
FILE *inf;
|
||||||
|
|
||||||
|
if (!feature || !resource)
|
||||||
|
return false;
|
||||||
|
|
||||||
snprintf(res_path, sizeof(res_path), "%s/%s/mon_features", INFO_PATH, resource);
|
snprintf(res_path, sizeof(res_path), "%s/%s/mon_features", INFO_PATH, resource);
|
||||||
inf = fopen(res_path, "r");
|
inf = fopen(res_path, "r");
|
||||||
|
@ -753,7 +766,7 @@ bool validate_resctrl_feature_request(const char *resource, const char *feature)
|
||||||
|
|
||||||
bool test_resource_feature_check(const struct resctrl_test *test)
|
bool test_resource_feature_check(const struct resctrl_test *test)
|
||||||
{
|
{
|
||||||
return validate_resctrl_feature_request(test->resource, NULL);
|
return resctrl_resource_exists(test->resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
int filter_dmesg(void)
|
int filter_dmesg(void)
|
||||||
|
|
Loading…
Reference in a new issue