KVM: selftests: Use vcpu_get_cpuid_entry() in PV features test (sort of)
Add a new helper, vcpu_clear_cpuid_entry(), to do a RMW operation on the vCPU's CPUID model to clear a given CPUID entry, and use it to clear KVM's paravirt feature instead of operating on kvm_get_supported_cpuid()'s static "cpuid" variable. This also eliminates a user of the soon-be-defunct set_cpuid() helper. Signed-off-by: Sean Christopherson <seanjc@google.com> Link: https://lore.kernel.org/r/20220614200707.3315957-26-seanjc@google.com
This commit is contained in:
parent
b78843be77
commit
3a5d36b32b
@ -660,6 +660,7 @@ static inline void vcpu_set_cpuid(struct kvm_vcpu *vcpu)
|
||||
|
||||
void vcpu_set_cpuid_maxphyaddr(struct kvm_vcpu *vcpu, uint8_t maxphyaddr);
|
||||
|
||||
void vcpu_clear_cpuid_entry(struct kvm_vcpu *vcpu, uint32_t function);
|
||||
void vcpu_set_or_clear_cpuid_feature(struct kvm_vcpu *vcpu,
|
||||
struct kvm_x86_cpu_feature feature,
|
||||
bool set);
|
||||
|
@ -770,6 +770,17 @@ void vcpu_set_cpuid_maxphyaddr(struct kvm_vcpu *vcpu, uint8_t maxphyaddr)
|
||||
vcpu_set_cpuid(vcpu);
|
||||
}
|
||||
|
||||
void vcpu_clear_cpuid_entry(struct kvm_vcpu *vcpu, uint32_t function)
|
||||
{
|
||||
struct kvm_cpuid_entry2 *entry = vcpu_get_cpuid_entry(vcpu, function);
|
||||
|
||||
entry->eax = 0;
|
||||
entry->ebx = 0;
|
||||
entry->ecx = 0;
|
||||
entry->edx = 0;
|
||||
vcpu_set_cpuid(vcpu);
|
||||
}
|
||||
|
||||
void vcpu_set_or_clear_cpuid_feature(struct kvm_vcpu *vcpu,
|
||||
struct kvm_x86_cpu_feature feature,
|
||||
bool set)
|
||||
|
@ -95,15 +95,6 @@ static void guest_main(void)
|
||||
GUEST_DONE();
|
||||
}
|
||||
|
||||
static void clear_kvm_cpuid_features(struct kvm_cpuid2 *cpuid)
|
||||
{
|
||||
struct kvm_cpuid_entry2 ent = {0};
|
||||
|
||||
ent.function = KVM_CPUID_FEATURES;
|
||||
TEST_ASSERT(set_cpuid(cpuid, &ent),
|
||||
"failed to clear KVM_CPUID_FEATURES leaf");
|
||||
}
|
||||
|
||||
static void pr_msr(struct ucall *uc)
|
||||
{
|
||||
struct msr_data *msr = (struct msr_data *)uc->args[0];
|
||||
@ -156,8 +147,7 @@ int main(void)
|
||||
|
||||
vcpu_enable_cap(vcpu, KVM_CAP_ENFORCE_PV_FEATURE_CPUID, 1);
|
||||
|
||||
clear_kvm_cpuid_features(vcpu->cpuid);
|
||||
vcpu_set_cpuid(vcpu);
|
||||
vcpu_clear_cpuid_entry(vcpu, KVM_CPUID_FEATURES);
|
||||
|
||||
vm_init_descriptor_tables(vm);
|
||||
vcpu_init_descriptor_tables(vcpu);
|
||||
|
Loading…
Reference in New Issue
Block a user