Hi
On 6/10/24 11:20, Ilpo Järvinen wrote:
On Mon, 10 Jun 2024, Babu Moger wrote:
The selftest noncont_cat_run_test fails on AMD with the warnings. Reason
noncont_cat_run_test()
I want to mention the test here. not function. How about this?
"The selftest non-contiguous CBM test fails on AMD with the warnings."
(In general, use () when refering to a function, same thing in the shortlog).
"the warnings" sounds like I should know about what warning it fails with but there's no previous context which tells that information. I suggest you either use "a warning" or quote the warning it fails with into the commit message.
is, AMD supports non contiguous CBM masks but does not report it via CPUID.
non-contiguous
Sure.
Update noncont_cat_run_test to check for the vendor when verifying CPUID.
()
Sure.
Fixes: ae638551ab64 ("selftests/resctrl: Add non-contiguous CBMs CAT test") Signed-off-by: Babu Moger babu.moger@amd.com
v2: Moved the non contiguous verification to a new function arch_supports_noncont_cat.
v1: This was part of the series https://lore.kernel.org/lkml/cover.1708637563.git.babu.moger@amd.com/ Sending this as a separate fix per review comments.
tools/testing/selftests/resctrl/cat_test.c | 32 +++++++++++++++------- 1 file changed, 22 insertions(+), 10 deletions(-)
diff --git a/tools/testing/selftests/resctrl/cat_test.c b/tools/testing/selftests/resctrl/cat_test.c index d4dffc934bc3..742782438ca3 100644 --- a/tools/testing/selftests/resctrl/cat_test.c +++ b/tools/testing/selftests/resctrl/cat_test.c @@ -288,11 +288,30 @@ static int cat_run_test(const struct resctrl_test *test, const struct user_param return ret; } +static bool arch_supports_noncont_cat(const struct resctrl_test *test) +{
- unsigned int eax, ebx, ecx, edx;
- /* AMD always supports non-contiguous CBM. */
- if (get_vendor() == ARCH_AMD)
return true;
- /* Intel support for non-contiguous CBM needs to be discovered. */
- if (!strcmp(test->resource, "L3"))
__cpuid_count(0x10, 1, eax, ebx, ecx, edx);
- else if (!strcmp(test->resource, "L2"))
__cpuid_count(0x10, 2, eax, ebx, ecx, edx);
- else
return false;
- return ((ecx >> 3) & 1);
+}
static int noncont_cat_run_test(const struct resctrl_test *test, const struct user_params *uparams) { unsigned long full_cache_mask, cont_mask, noncont_mask;
- unsigned int eax, ebx, ecx, edx, sparse_masks;
- unsigned int sparse_masks; int bit_center, ret; char schemata[64];
@@ -301,15 +320,8 @@ static int noncont_cat_run_test(const struct resctrl_test *test, if (ret) return ret;
- if (!strcmp(test->resource, "L3"))
__cpuid_count(0x10, 1, eax, ebx, ecx, edx);
- else if (!strcmp(test->resource, "L2"))
__cpuid_count(0x10, 2, eax, ebx, ecx, edx);
- else
return -EINVAL;
- if (sparse_masks != ((ecx >> 3) & 1)) {
ksft_print_msg("CPUID output doesn't match 'sparse_masks' file content!\n");
- if (arch_supports_noncont_cat(test) != sparse_masks) {
return 1;ksft_print_msg("Hardware and kernel differ on non-contiguous CBM support!\n");
This looks better than the previous version, thanks.
Thanks. Babu Moger