| KVM CPUID bits |
| Glauber Costa <glommer@redhat.com>, Red Hat Inc, 2010 |
| ===================================================== |
| |
| A guest running on a kvm host, can check some of its features using |
| cpuid. This is not always guaranteed to work, since userspace can |
| mask-out some, or even all KVM-related cpuid features before launching |
| a guest. |
| |
| KVM cpuid functions are: |
| |
| function: KVM_CPUID_SIGNATURE (0x40000000) |
| returns : eax = 0x40000001, |
| ebx = 0x4b4d564b, |
| ecx = 0x564b4d56, |
| edx = 0x4d. |
| Note that this value in ebx, ecx and edx corresponds to the string "KVMKVMKVM". |
| The value in eax corresponds to the maximum cpuid function present in this leaf, |
| and will be updated if more functions are added in the future. |
| Note also that old hosts set eax value to 0x0. This should |
| be interpreted as if the value was 0x40000001. |
| This function queries the presence of KVM cpuid leafs. |
| |
| |
| function: define KVM_CPUID_FEATURES (0x40000001) |
| returns : ebx, ecx, edx = 0 |
| eax = and OR'ed group of (1 << flag), where each flags is: |
| |
| |
| flag || value || meaning |
| ============================================================================= |
| KVM_FEATURE_CLOCKSOURCE || 0 || kvmclock available at msrs |
| || || 0x11 and 0x12. |
| ------------------------------------------------------------------------------ |
| KVM_FEATURE_NOP_IO_DELAY || 1 || not necessary to perform delays |
| || || on PIO operations. |
| ------------------------------------------------------------------------------ |
| KVM_FEATURE_MMU_OP || 2 || deprecated. |
| ------------------------------------------------------------------------------ |
| KVM_FEATURE_CLOCKSOURCE2 || 3 || kvmclock available at msrs |
| || || 0x4b564d00 and 0x4b564d01 |
| ------------------------------------------------------------------------------ |
| KVM_FEATURE_ASYNC_PF || 4 || async pf can be enabled by |
| || || writing to msr 0x4b564d02 |
| ------------------------------------------------------------------------------ |
| KVM_FEATURE_STEAL_TIME || 5 || steal time can be enabled by |
| || || writing to msr 0x4b564d03. |
| ------------------------------------------------------------------------------ |
| KVM_FEATURE_PV_EOI || 6 || paravirtualized end of interrupt |
| || || handler can be enabled by writing |
| || || to msr 0x4b564d04. |
| ------------------------------------------------------------------------------ |
| KVM_FEATURE_PV_UNHALT || 7 || guest checks this feature bit |
| || || before enabling paravirtualized |
| || || spinlock support. |
| ------------------------------------------------------------------------------ |
| KVM_FEATURE_ASYNC_PF_VMEXIT || 10 || paravirtualized async PF VM exit |
| || || can be enabled by setting bit 2 |
| || || when writing to msr 0x4b564d02 |
| ------------------------------------------------------------------------------ |
| KVM_FEATURE_CLOCKSOURCE_STABLE_BIT || 24 || host will warn if no guest-side |
| || || per-cpu warps are expected in |
| || || kvmclock. |
| ------------------------------------------------------------------------------ |