|
@@ -780,18 +780,20 @@ out:
|
|
|
static int move_to_next_stateful_cpuid_entry(struct kvm_vcpu *vcpu, int i)
|
|
|
{
|
|
|
struct kvm_cpuid_entry2 *e = &vcpu->arch.cpuid_entries[i];
|
|
|
- int j, nent = vcpu->arch.cpuid_nent;
|
|
|
+ struct kvm_cpuid_entry2 *ej;
|
|
|
+ int j = i;
|
|
|
+ int nent = vcpu->arch.cpuid_nent;
|
|
|
|
|
|
e->flags &= ~KVM_CPUID_FLAG_STATE_READ_NEXT;
|
|
|
/* when no next entry is found, the current entry[i] is reselected */
|
|
|
- for (j = i + 1; ; j = (j + 1) % nent) {
|
|
|
- struct kvm_cpuid_entry2 *ej = &vcpu->arch.cpuid_entries[j];
|
|
|
- if (ej->function == e->function) {
|
|
|
- ej->flags |= KVM_CPUID_FLAG_STATE_READ_NEXT;
|
|
|
- return j;
|
|
|
- }
|
|
|
- }
|
|
|
- return 0; /* silence gcc, even though control never reaches here */
|
|
|
+ do {
|
|
|
+ j = (j + 1) % nent;
|
|
|
+ ej = &vcpu->arch.cpuid_entries[j];
|
|
|
+ } while (ej->function != e->function);
|
|
|
+
|
|
|
+ ej->flags |= KVM_CPUID_FLAG_STATE_READ_NEXT;
|
|
|
+
|
|
|
+ return j;
|
|
|
}
|
|
|
|
|
|
/* find an entry with matching function, matching index (if needed), and that
|