KVM: selftests: hyperv_cpuid: add check for NoNonArchitecturalCoreSharing bit
The bit is supposed to be '1' when SMT is not supported or forcefully disabled and '0' otherwise. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
b2d8b167e1
commit
e738772e29
|
@ -26,6 +26,25 @@ static void guest_code(void)
|
|||
{
|
||||
}
|
||||
|
||||
static int smt_possible(void)
|
||||
{
|
||||
char buf[16];
|
||||
FILE *f;
|
||||
bool res = 1;
|
||||
|
||||
f = fopen("/sys/devices/system/cpu/smt/control", "r");
|
||||
if (f) {
|
||||
if (fread(buf, sizeof(*buf), sizeof(buf), f) > 0) {
|
||||
if (!strncmp(buf, "forceoff", 8) ||
|
||||
!strncmp(buf, "notsupported", 12))
|
||||
res = 0;
|
||||
}
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static void test_hv_cpuid(struct kvm_cpuid2 *hv_cpuid_entries,
|
||||
int evmcs_enabled)
|
||||
{
|
||||
|
@ -59,6 +78,14 @@ static void test_hv_cpuid(struct kvm_cpuid2 *hv_cpuid_entries,
|
|||
TEST_ASSERT(!entry->padding[0] && !entry->padding[1] &&
|
||||
!entry->padding[2], "padding should be zero");
|
||||
|
||||
if (entry->function == 0x40000004) {
|
||||
int nononarchcs = !!(entry->eax & (1UL << 18));
|
||||
|
||||
TEST_ASSERT(nononarchcs == !smt_possible(),
|
||||
"NoNonArchitecturalCoreSharing bit"
|
||||
" doesn't reflect SMT setting");
|
||||
}
|
||||
|
||||
/*
|
||||
* If needed for debug:
|
||||
* fprintf(stdout,
|
||||
|
|
Loading…
Reference in New Issue