From: Sean Christopherson <seanjc@google.com>
To: Jim Mattson <jmattson@google.com>
Cc: kvm@vger.kernel.org, "'Paolo Bonzini '" <pbonzini@redhat.com>
Subject: Re: [PATCH v3 3/3] KVM: selftests: Test behavior of HWCR
Date: Fri, 29 Sep 2023 10:06:57 -0700 [thread overview]
Message-ID: <ZRcEMdOFKgfZotQD@google.com> (raw)
In-Reply-To: <20230928185128.824140-4-jmattson@google.com>
On Thu, Sep 28, 2023, Jim Mattson wrote:
> 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..6b0219ca65eb 100644
> --- a/tools/testing/selftests/kvm/Makefile
> +++ b/tools/testing/selftests/kvm/Makefile
> @@ -135,6 +135,7 @@ TEST_GEN_PROGS_x86_64 += set_memory_region_test
> TEST_GEN_PROGS_x86_64 += steal_time
> TEST_GEN_PROGS_x86_64 += kvm_binary_stats_test
> TEST_GEN_PROGS_x86_64 += system_counter_offset_test
> +TEST_GEN_PROGS_x86_64 += x86_64/hwcr_msr_test
Please place this with the other x86_64 specific tests.
Somewhat of a forward looking question, what do folks think about adding an
"msr_tests" subdirectory? I really want to effectively replace KUT's msr.c test
with a supserset of functionality in selftests, e.g. KUT can't test userspace
writes. But I don't want to end up with a single massive msr_test.c. If we add
a subdirectory, then I think that would make it easier to share "private" APIs
and infrastructure without creating a giant monolithic test.
> # Compiled outputs used by test targets
> TEST_GEN_PROGS_EXTENDED_x86_64 += x86_64/nx_huge_pages_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);
uint64_t instead of "unsigned long long".
> + 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
>
prev parent reply other threads:[~2023-09-29 17:07 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-28 18:51 KVM: x86: Update HWCR virtualization Jim Mattson
2023-09-28 18:51 ` [PATCH v3 1/3] KVM: x86: Allow HWCR.McStatusWrEn to be cleared once set Jim Mattson
2023-09-28 18:51 ` [PATCH v3 2/3] KVM: x86: Virtualize HWCR.TscFreqSel[bit 24] Jim Mattson
2023-09-29 0:56 ` Sean Christopherson
2023-09-29 13:18 ` Jim Mattson
2023-09-29 16:28 ` Sean Christopherson
2023-09-28 18:51 ` [PATCH v3 3/3] KVM: selftests: Test behavior of HWCR Jim Mattson
2023-09-29 17:06 ` Sean Christopherson [this message]
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=ZRcEMdOFKgfZotQD@google.com \
--to=seanjc@google.com \
--cc=jmattson@google.com \
--cc=kvm@vger.kernel.org \
--cc=pbonzini@redhat.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.