Glauber Costa | 09c9e81 | 2010-05-11 12:17:47 -0400 | [diff] [blame] | 1 | KVM CPUID bits |
| 2 | Glauber Costa <glommer@redhat.com>, Red Hat Inc, 2010 |
| 3 | ===================================================== |
| 4 | |
| 5 | A guest running on a kvm host, can check some of its features using |
| 6 | cpuid. This is not always guaranteed to work, since userspace can |
| 7 | mask-out some, or even all KVM-related cpuid features before launching |
| 8 | a guest. |
| 9 | |
| 10 | KVM cpuid functions are: |
| 11 | |
| 12 | function: KVM_CPUID_SIGNATURE (0x40000000) |
Michael S. Tsirkin | 57c22e5 | 2012-05-02 17:55:56 +0300 | [diff] [blame] | 13 | returns : eax = 0x40000001, |
Glauber Costa | 09c9e81 | 2010-05-11 12:17:47 -0400 | [diff] [blame] | 14 | ebx = 0x4b4d564b, |
| 15 | ecx = 0x564b4d56, |
| 16 | edx = 0x4d. |
| 17 | Note that this value in ebx, ecx and edx corresponds to the string "KVMKVMKVM". |
Michael S. Tsirkin | 57c22e5 | 2012-05-02 17:55:56 +0300 | [diff] [blame] | 18 | The value in eax corresponds to the maximum cpuid function present in this leaf, |
| 19 | and will be updated if more functions are added in the future. |
| 20 | Note also that old hosts set eax value to 0x0. This should |
| 21 | be interpreted as if the value was 0x40000001. |
Glauber Costa | 09c9e81 | 2010-05-11 12:17:47 -0400 | [diff] [blame] | 22 | This function queries the presence of KVM cpuid leafs. |
| 23 | |
| 24 | |
| 25 | function: define KVM_CPUID_FEATURES (0x40000001) |
| 26 | returns : ebx, ecx, edx = 0 |
| 27 | eax = and OR'ed group of (1 << flag), where each flags is: |
| 28 | |
| 29 | |
| 30 | flag || value || meaning |
| 31 | ============================================================================= |
| 32 | KVM_FEATURE_CLOCKSOURCE || 0 || kvmclock available at msrs |
| 33 | || || 0x11 and 0x12. |
| 34 | ------------------------------------------------------------------------------ |
| 35 | KVM_FEATURE_NOP_IO_DELAY || 1 || not necessary to perform delays |
| 36 | || || on PIO operations. |
| 37 | ------------------------------------------------------------------------------ |
| 38 | KVM_FEATURE_MMU_OP || 2 || deprecated. |
| 39 | ------------------------------------------------------------------------------ |
| 40 | KVM_FEATURE_CLOCKSOURCE2 || 3 || kvmclock available at msrs |
| 41 | || || 0x4b564d00 and 0x4b564d01 |
| 42 | ------------------------------------------------------------------------------ |
Gleb Natapov | 344d958 | 2010-10-14 11:22:50 +0200 | [diff] [blame] | 43 | KVM_FEATURE_ASYNC_PF || 4 || async pf can be enabled by |
| 44 | || || writing to msr 0x4b564d02 |
| 45 | ------------------------------------------------------------------------------ |
Raghavendra K T | 56aba60 | 2013-09-12 13:00:11 +0530 | [diff] [blame] | 46 | KVM_FEATURE_STEAL_TIME || 5 || steal time can be enabled by |
| 47 | || || writing to msr 0x4b564d03. |
| 48 | ------------------------------------------------------------------------------ |
| 49 | KVM_FEATURE_PV_EOI || 6 || paravirtualized end of interrupt |
| 50 | || || handler can be enabled by writing |
| 51 | || || to msr 0x4b564d04. |
| 52 | ------------------------------------------------------------------------------ |
Raghavendra K T | 9bc6cbe | 2013-08-26 14:18:36 +0530 | [diff] [blame] | 53 | KVM_FEATURE_PV_UNHALT || 7 || guest checks this feature bit |
| 54 | || || before enabling paravirtualized |
| 55 | || || spinlock support. |
| 56 | ------------------------------------------------------------------------------ |
Glauber Costa | 09c9e81 | 2010-05-11 12:17:47 -0400 | [diff] [blame] | 57 | KVM_FEATURE_CLOCKSOURCE_STABLE_BIT || 24 || host will warn if no guest-side |
| 58 | || || per-cpu warps are expected in |
| 59 | || || kvmclock. |
| 60 | ------------------------------------------------------------------------------ |