mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-27 12:57:53 +00:00
KVM: selftests: Extend cpuid_test to verify KVM_GET_CPUID2 "nent" updates
Verify that KVM reports the actual number of CPUID entries on success, but doesn't touch the userspace struct on failure (which for better or worse, is KVM's ABI). Link: https://lore.kernel.org/r/20230526210340.2799158-3-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
parent
ab322c43cc
commit
2c76131319
1 changed files with 21 additions and 0 deletions
|
@ -163,6 +163,25 @@ static void set_cpuid_after_run(struct kvm_vcpu *vcpu)
|
|||
ent->eax = eax;
|
||||
}
|
||||
|
||||
static void test_get_cpuid2(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
struct kvm_cpuid2 *cpuid = allocate_kvm_cpuid2(vcpu->cpuid->nent + 1);
|
||||
int i, r;
|
||||
|
||||
vcpu_ioctl(vcpu, KVM_GET_CPUID2, cpuid);
|
||||
TEST_ASSERT(cpuid->nent == vcpu->cpuid->nent,
|
||||
"KVM didn't update nent on success, wanted %u, got %u\n",
|
||||
vcpu->cpuid->nent, cpuid->nent);
|
||||
|
||||
for (i = 0; i < vcpu->cpuid->nent; i++) {
|
||||
cpuid->nent = i;
|
||||
r = __vcpu_ioctl(vcpu, KVM_GET_CPUID2, cpuid);
|
||||
TEST_ASSERT(r && errno == E2BIG, KVM_IOCTL_ERROR(KVM_GET_CPUID2, r));
|
||||
TEST_ASSERT(cpuid->nent == i, "KVM modified nent on failure");
|
||||
}
|
||||
free(cpuid);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
struct kvm_vcpu *vcpu;
|
||||
|
@ -183,5 +202,7 @@ int main(void)
|
|||
|
||||
set_cpuid_after_run(vcpu);
|
||||
|
||||
test_get_cpuid2(vcpu);
|
||||
|
||||
kvm_vm_free(vm);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue