diff options
Diffstat (limited to 'tools/testing/selftests/resctrl/resctrl_tests.c')
| -rw-r--r-- | tools/testing/selftests/resctrl/resctrl_tests.c | 49 | 
1 files changed, 33 insertions, 16 deletions
diff --git a/tools/testing/selftests/resctrl/resctrl_tests.c b/tools/testing/selftests/resctrl/resctrl_tests.c index 973f09a66e1e..df0d8d8526fc 100644 --- a/tools/testing/selftests/resctrl/resctrl_tests.c +++ b/tools/testing/selftests/resctrl/resctrl_tests.c @@ -13,25 +13,41 @@  #define BENCHMARK_ARGS		64  #define BENCHMARK_ARG_SIZE	64 -bool is_amd; - -void detect_amd(void) +static int detect_vendor(void)  {  	FILE *inf = fopen("/proc/cpuinfo", "r"); +	int vendor_id = 0; +	char *s = NULL;  	char *res;  	if (!inf) -		return; +		return vendor_id;  	res = fgrep(inf, "vendor_id"); -	if (res) { -		char *s = strchr(res, ':'); +	if (res) +		s = strchr(res, ':'); + +	if (s && !strcmp(s, ": GenuineIntel\n")) +		vendor_id = ARCH_INTEL; +	else if (s && !strcmp(s, ": AuthenticAMD\n")) +		vendor_id = ARCH_AMD; -		is_amd = s && !strcmp(s, ": AuthenticAMD\n"); -		free(res); -	}  	fclose(inf); +	free(res); +	return vendor_id; +} + +int get_vendor(void) +{ +	static int vendor = -1; + +	if (vendor == -1) +		vendor = detect_vendor(); +	if (vendor == 0) +		ksft_print_msg("Can not get vendor info...\n"); + +	return vendor;  }  static void cmd_help(void) @@ -70,6 +86,8 @@ static void run_mbm_test(bool has_ben, char **benchmark_cmd, int span,  		sprintf(benchmark_cmd[5], "%s", MBA_STR);  	res = mbm_bw_change(span, cpu_no, bw_report, benchmark_cmd);  	ksft_test_result(!res, "MBM: bw change\n"); +	if ((get_vendor() == ARCH_INTEL) && res) +		ksft_print_msg("Intel MBM may be inaccurate when Sub-NUMA Clustering is enabled. Check BIOS configuration.\n");  	mbm_test_cleanup();  } @@ -106,6 +124,8 @@ static void run_cmt_test(bool has_ben, char **benchmark_cmd, int cpu_no)  		sprintf(benchmark_cmd[5], "%s", CMT_STR);  	res = cmt_resctrl_val(cpu_no, 5, benchmark_cmd);  	ksft_test_result(!res, "CMT: test\n"); +	if ((get_vendor() == ARCH_INTEL) && res) +		ksft_print_msg("Intel CMT may be inaccurate when Sub-NUMA Clustering is enabled. Check BIOS configuration.\n");  	cmt_test_cleanup();  } @@ -205,10 +225,7 @@ int main(int argc, char **argv)  	 * 2. We execute perf commands  	 */  	if (geteuid() != 0) -		return ksft_exit_fail_msg("Not running as root, abort testing.\n"); - -	/* Detect AMD vendor */ -	detect_amd(); +		return ksft_exit_skip("Not running as root. Skipping...\n");  	if (has_ben) {  		/* Extract benchmark command from command line. */ @@ -235,16 +252,16 @@ int main(int argc, char **argv)  	sprintf(bm_type, "fill_buf");  	if (!check_resctrlfs_support()) -		return ksft_exit_fail_msg("resctrl FS does not exist\n"); +		return ksft_exit_skip("resctrl FS does not exist. Enable X86_CPU_RESCTRL config option.\n");  	filter_dmesg();  	ksft_set_plan(tests ? : 4); -	if (!is_amd && mbm_test) +	if ((get_vendor() == ARCH_INTEL) && mbm_test)  		run_mbm_test(has_ben, benchmark_cmd, span, cpu_no, bw_report); -	if (!is_amd && mba_test) +	if ((get_vendor() == ARCH_INTEL) && mba_test)  		run_mba_test(has_ben, benchmark_cmd, span, cpu_no, bw_report);  	if (cmt_test)  | 
