Messages in this thread | | | From | Vitaly Kuznetsov <> | Subject | Re: [PATCH v2 2/4] KVM: x86: Partially allow KVM_SET_CPUID{,2} after KVM_RUN | Date | Tue, 18 Jan 2022 15:37:01 +0100 |
| |
Vitaly Kuznetsov <vkuznets@redhat.com> writes:
> Paolo Bonzini <pbonzini@redhat.com> writes: > >> On 1/17/22 16:05, Vitaly Kuznetsov wrote: >>> >>> +/* Check whether the supplied CPUID data is equal to what is already set for the vCPU. */ >>> +static int kvm_cpuid_check_equal(struct kvm_vcpu *vcpu, struct kvm_cpuid_entry2 *e2, >>> + int nent) >>> +{ >>> + struct kvm_cpuid_entry2 *best; >>> + int i; >>> + >>> + for (i = 0; i < nent; i++) { >>> + best = kvm_find_cpuid_entry(vcpu, e2[i].function, e2[i].index); >>> + if (!best) >>> + return -EINVAL; >>> + >>> + if (e2[i].eax != best->eax || e2[i].ebx != best->ebx || >>> + e2[i].ecx != best->ecx || e2[i].edx != best->edx) >>> + return -EINVAL; >>> + } >>> + >>> + return 0; >>> +} >> >> What about this alternative implementation: >> ... >> >> avoiding the repeated calls to kvm_find_cpuid_entry? >> > > My version is a bit more permissive as it allows supplying CPUID entries > in any order, not necessarily matching the original. I *guess* this > doesn't matter much for the QEMU problem we're trying to workaround, > I'll have to check.
I tried this with QEMU and nothing blew up, during CPU hotplug entries come in the same order as the original. v3 which I've just sent implements this suggestion.
-- Vitaly
| |