#include #include #include #include #include int main(void) { struct kvm_cpuid2 *cpuid; int kvm, r = 0, i, j; for (i = 0; i < 1000000; ++i) { kvm = open("/dev/kvm", O_RDWR); cpuid = malloc(sizeof(*cpuid) + sizeof(struct kvm_cpuid_entry2) * 100); cpuid->nent = 100; r = ioctl(kvm, KVM_GET_SUPPORTED_CPUID, cpuid); if (r) printf("KVM_GET_SUPPORTED_CPUID returned %d with errno %d\n", r, errno); else if (cpuid->nent > 31) { printf("Returned entries: %d\n", cpuid->nent); for (j = 0; j < cpuid->nent; ++j) { struct kvm_cpuid_entry2 *e = &cpuid->entries[j]; printf("func %08x ind %08x flags %08x -> %08x %08x %08x %08x\n", e->function, e->index, e->flags, e->eax, e->ebx, e->ecx, e->edx); } return 1; } free(cpuid); close(kvm); } return 0; }