Path: blob/master/tools/testing/selftests/kvm/x86/hwcr_msr_test.c
38245 views
// SPDX-License-Identifier: GPL-2.01/*2* Copyright (C) 2023, Google LLC.3*/4#include <sys/ioctl.h>56#include "test_util.h"7#include "kvm_util.h"8#include "vmx.h"910void test_hwcr_bit(struct kvm_vcpu *vcpu, unsigned int bit)11{12const uint64_t ignored = BIT_ULL(3) | BIT_ULL(6) | BIT_ULL(8);13const uint64_t valid = BIT_ULL(18) | BIT_ULL(24);14const uint64_t legal = ignored | valid;15uint64_t val = BIT_ULL(bit);16uint64_t actual;17int r;1819r = _vcpu_set_msr(vcpu, MSR_K7_HWCR, val);20TEST_ASSERT(val & ~legal ? !r : r == 1,21"Expected KVM_SET_MSRS(MSR_K7_HWCR) = 0x%lx to %s",22val, val & ~legal ? "fail" : "succeed");2324actual = vcpu_get_msr(vcpu, MSR_K7_HWCR);25TEST_ASSERT(actual == (val & valid),26"Bit %u: unexpected HWCR 0x%lx; expected 0x%lx",27bit, actual, (val & valid));2829vcpu_set_msr(vcpu, MSR_K7_HWCR, 0);30}3132int main(int argc, char *argv[])33{34struct kvm_vm *vm;35struct kvm_vcpu *vcpu;36unsigned int bit;3738vm = vm_create_with_one_vcpu(&vcpu, NULL);3940for (bit = 0; bit < BITS_PER_LONG; bit++)41test_hwcr_bit(vcpu, bit);4243kvm_vm_free(vm);44}454647