diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2016-07-12 11:04:26 +0200 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2017-12-14 09:26:40 +0100 |
commit | fb6d4d340e0532032c808a9933eaaa7b8de435ab (patch) | |
tree | 1f9e0f298144cba4793db07ffaafd6228597ee60 /arch/x86/kvm/cpuid.c | |
parent | 0367f205a3b7c0efe774634eef1f4697c79a4132 (diff) | |
download | lwn-fb6d4d340e0532032c808a9933eaaa7b8de435ab.tar.gz lwn-fb6d4d340e0532032c808a9933eaaa7b8de435ab.zip |
KVM: x86: emulate RDPID
This is encoded as F3 0F C7 /7 with a register argument. The register
argument is the second array in the group9 GroupDual, while F3 is the
fourth element of a Prefix.
Reviewed-by: Wanpeng Li <wanpeng.li@hotmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/x86/kvm/cpuid.c')
-rw-r--r-- | arch/x86/kvm/cpuid.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index 2b3b06458f6f..b94371146533 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -293,13 +293,18 @@ static int __do_cpuid_ent_emulated(struct kvm_cpuid_entry2 *entry, { switch (func) { case 0: - entry->eax = 1; /* only one leaf currently */ + entry->eax = 7; ++*nent; break; case 1: entry->ecx = F(MOVBE); ++*nent; break; + case 7: + entry->flags |= KVM_CPUID_FLAG_SIGNIFCANT_INDEX; + if (index == 0) + entry->ecx = F(RDPID); + ++*nent; default: break; } |