From: Jim Mattson <jmattson@google.com>
To: kvm@vger.kernel.org, "'Sean Christopherson '" <seanjc@google.com>,
"'Paolo Bonzini '" <pbonzini@redhat.com>
Cc: Jim Mattson <jmattson@google.com>
Subject: [PATCH v4 3/3] KVM: selftests: Test behavior of HWCR
Date: Fri, 29 Sep 2023 16:02:46 -0700 [thread overview]
Message-ID: <20230929230246.1954854-4-jmattson@google.com> (raw)
In-Reply-To: <20230929230246.1954854-1-jmattson@google.com>
Verify the following:
* Attempts to set bits 3, 6, or 8 are ignored
* Bits 18 and 24 are the only bits that can be set
* Any bit that can be set can also be cleared
Signed-off-by: Jim Mattson <jmattson@google.com>
---
tools/testing/selftests/kvm/Makefile | 1 +
.../selftests/kvm/x86_64/hwcr_msr_test.c | 52 +++++++++++++++++++
2 files changed, 53 insertions(+)
create mode 100644 tools/testing/selftests/kvm/x86_64/hwcr_msr_test.c
diff --git a/tools/testing/selftests/kvm/Makefile b/tools/testing/selftests/kvm/Makefile
index a3bb36fb3cfc..3b82c583c68d 100644
--- a/tools/testing/selftests/kvm/Makefile
+++ b/tools/testing/selftests/kvm/Makefile
@@ -119,6 +119,7 @@ TEST_GEN_PROGS_x86_64 += x86_64/amx_test
TEST_GEN_PROGS_x86_64 += x86_64/max_vcpuid_cap_test
TEST_GEN_PROGS_x86_64 += x86_64/triple_fault_event_test
TEST_GEN_PROGS_x86_64 += x86_64/recalc_apic_map_test
+TEST_GEN_PROGS_x86_64 += x86_64/hwcr_msr_test
TEST_GEN_PROGS_x86_64 += access_tracking_perf_test
TEST_GEN_PROGS_x86_64 += demand_paging_test
TEST_GEN_PROGS_x86_64 += dirty_log_test
diff --git a/tools/testing/selftests/kvm/x86_64/hwcr_msr_test.c b/tools/testing/selftests/kvm/x86_64/hwcr_msr_test.c
new file mode 100644
index 000000000000..1a6a09791ac3
--- /dev/null
+++ b/tools/testing/selftests/kvm/x86_64/hwcr_msr_test.c
@@ -0,0 +1,52 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2023, Google LLC.
+ *
+ * Tests for the K7_HWCR MSR.
+ */
+
+#define _GNU_SOURCE /* for program_invocation_short_name */
+#include <sys/ioctl.h>
+
+#include "test_util.h"
+#include "kvm_util.h"
+#include "vmx.h"
+
+void test_hwcr_bit(struct kvm_vcpu *vcpu, unsigned int bit)
+{
+ const unsigned long long ignored = BIT_ULL(3) | BIT_ULL(6) | BIT_ULL(8);
+ const unsigned long long valid = BIT_ULL(18) | BIT_ULL(24);
+ const unsigned long long legal = ignored | valid;
+ uint64_t val = BIT_ULL(bit);
+ uint64_t check;
+ int r;
+
+ r = _vcpu_set_msr(vcpu, MSR_K7_HWCR, val);
+ TEST_ASSERT((r == 1 && (val & legal)) || (r == 0 && !(val & legal)),
+ "Unexpected result (%d) when setting HWCR[bit %u]", r, bit);
+ check = vcpu_get_msr(vcpu, MSR_K7_HWCR);
+ if (val & valid) {
+ TEST_ASSERT(check == val,
+ "Bit %u: unexpected HWCR %lx; expected %lx", bit,
+ check, val);
+ vcpu_set_msr(vcpu, MSR_K7_HWCR, 0);
+ } else {
+ TEST_ASSERT(!check,
+ "Bit %u: unexpected HWCR %lx; expected 0", bit,
+ check);
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ struct kvm_vm *vm;
+ struct kvm_vcpu *vcpu;
+ unsigned int bit;
+
+ vm = vm_create_with_one_vcpu(&vcpu, NULL);
+
+ for (bit = 0; bit < BITS_PER_LONG; bit++)
+ test_hwcr_bit(vcpu, bit);
+
+ kvm_vm_free(vm);
+}
--
2.42.0.582.g8ccd20d70d-goog
next prev parent reply other threads:[~2023-09-29 23:03 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-29 23:02 [PATCH v4 0/3] KVM: x86: Update HWCR virtualization Jim Mattson
2023-09-29 23:02 ` [PATCH v4 1/3] KVM: x86: Allow HWCR.McStatusWrEn to be cleared once set Jim Mattson
2023-09-29 23:02 ` [PATCH v4 2/3] KVM: x86: Virtualize HWCR.TscFreqSel[bit 24] Jim Mattson
2023-09-29 23:02 ` Jim Mattson [this message]
2023-10-06 3:44 ` [PATCH v4 3/3] KVM: selftests: Test behavior of HWCR Sean Christopherson
2023-10-06 3:59 ` Jim Mattson
2023-10-09 20:05 ` [PATCH v4 0/3] KVM: x86: Update HWCR virtualization Sean Christopherson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230929230246.1954854-4-jmattson@google.com \
--to=jmattson@google.com \
--cc=kvm@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.