Skip to content

Commit

Permalink
KVM: selftests: hyperv_cpuid: add check for NoNonArchitecturalCoreSha…
Browse files Browse the repository at this point in the history
…ring 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>
  • Loading branch information
Vitaly Kuznetsov authored and Paolo Bonzini committed Sep 24, 2019
1 parent b2d8b16 commit e738772
Showing 1 changed file with 27 additions and 0 deletions.
27 changes: 27 additions & 0 deletions tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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,
Expand Down

0 comments on commit e738772

Please sign in to comment.