xref: /linux/Documentation/virt/kvm/x86/cpuid.rst (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1*daec8d40SPaolo Bonzini.. SPDX-License-Identifier: GPL-2.0
2*daec8d40SPaolo Bonzini
3*daec8d40SPaolo Bonzini==============
4*daec8d40SPaolo BonziniKVM CPUID bits
5*daec8d40SPaolo Bonzini==============
6*daec8d40SPaolo Bonzini
7*daec8d40SPaolo Bonzini:Author: Glauber Costa <glommer@gmail.com>
8*daec8d40SPaolo Bonzini
9*daec8d40SPaolo BonziniA guest running on a kvm host, can check some of its features using
10*daec8d40SPaolo Bonzinicpuid. This is not always guaranteed to work, since userspace can
11*daec8d40SPaolo Bonzinimask-out some, or even all KVM-related cpuid features before launching
12*daec8d40SPaolo Bonzinia guest.
13*daec8d40SPaolo Bonzini
14*daec8d40SPaolo BonziniKVM cpuid functions are:
15*daec8d40SPaolo Bonzini
16*daec8d40SPaolo Bonzinifunction: KVM_CPUID_SIGNATURE (0x40000000)
17*daec8d40SPaolo Bonzini
18*daec8d40SPaolo Bonzinireturns::
19*daec8d40SPaolo Bonzini
20*daec8d40SPaolo Bonzini   eax = 0x40000001
21*daec8d40SPaolo Bonzini   ebx = 0x4b4d564b
22*daec8d40SPaolo Bonzini   ecx = 0x564b4d56
23*daec8d40SPaolo Bonzini   edx = 0x4d
24*daec8d40SPaolo Bonzini
25*daec8d40SPaolo BonziniNote that this value in ebx, ecx and edx corresponds to the string "KVMKVMKVM".
26*daec8d40SPaolo BonziniThe value in eax corresponds to the maximum cpuid function present in this leaf,
27*daec8d40SPaolo Bonziniand will be updated if more functions are added in the future.
28*daec8d40SPaolo BonziniNote also that old hosts set eax value to 0x0. This should
29*daec8d40SPaolo Bonzinibe interpreted as if the value was 0x40000001.
30*daec8d40SPaolo BonziniThis function queries the presence of KVM cpuid leafs.
31*daec8d40SPaolo Bonzini
32*daec8d40SPaolo Bonzinifunction: define KVM_CPUID_FEATURES (0x40000001)
33*daec8d40SPaolo Bonzini
34*daec8d40SPaolo Bonzinireturns::
35*daec8d40SPaolo Bonzini
36*daec8d40SPaolo Bonzini          ebx, ecx
37*daec8d40SPaolo Bonzini          eax = an OR'ed group of (1 << flag)
38*daec8d40SPaolo Bonzini
39*daec8d40SPaolo Bonziniwhere ``flag`` is defined as below:
40*daec8d40SPaolo Bonzini
41*daec8d40SPaolo Bonzini================================== =========== ================================
42*daec8d40SPaolo Bonziniflag                               value       meaning
43*daec8d40SPaolo Bonzini================================== =========== ================================
44*daec8d40SPaolo BonziniKVM_FEATURE_CLOCKSOURCE            0           kvmclock available at msrs
45*daec8d40SPaolo Bonzini                                               0x11 and 0x12
46*daec8d40SPaolo Bonzini
47*daec8d40SPaolo BonziniKVM_FEATURE_NOP_IO_DELAY           1           not necessary to perform delays
48*daec8d40SPaolo Bonzini                                               on PIO operations
49*daec8d40SPaolo Bonzini
50*daec8d40SPaolo BonziniKVM_FEATURE_MMU_OP                 2           deprecated
51*daec8d40SPaolo Bonzini
52*daec8d40SPaolo BonziniKVM_FEATURE_CLOCKSOURCE2           3           kvmclock available at msrs
53*daec8d40SPaolo Bonzini                                               0x4b564d00 and 0x4b564d01
54*daec8d40SPaolo Bonzini
55*daec8d40SPaolo BonziniKVM_FEATURE_ASYNC_PF               4           async pf can be enabled by
56*daec8d40SPaolo Bonzini                                               writing to msr 0x4b564d02
57*daec8d40SPaolo Bonzini
58*daec8d40SPaolo BonziniKVM_FEATURE_STEAL_TIME             5           steal time can be enabled by
59*daec8d40SPaolo Bonzini                                               writing to msr 0x4b564d03
60*daec8d40SPaolo Bonzini
61*daec8d40SPaolo BonziniKVM_FEATURE_PV_EOI                 6           paravirtualized end of interrupt
62*daec8d40SPaolo Bonzini                                               handler can be enabled by
63*daec8d40SPaolo Bonzini                                               writing to msr 0x4b564d04
64*daec8d40SPaolo Bonzini
65*daec8d40SPaolo BonziniKVM_FEATURE_PV_UNHALT              7           guest checks this feature bit
66*daec8d40SPaolo Bonzini                                               before enabling paravirtualized
67*daec8d40SPaolo Bonzini                                               spinlock support
68*daec8d40SPaolo Bonzini
69*daec8d40SPaolo BonziniKVM_FEATURE_PV_TLB_FLUSH           9           guest checks this feature bit
70*daec8d40SPaolo Bonzini                                               before enabling paravirtualized
71*daec8d40SPaolo Bonzini                                               tlb flush
72*daec8d40SPaolo Bonzini
73*daec8d40SPaolo BonziniKVM_FEATURE_ASYNC_PF_VMEXIT        10          paravirtualized async PF VM EXIT
74*daec8d40SPaolo Bonzini                                               can be enabled by setting bit 2
75*daec8d40SPaolo Bonzini                                               when writing to msr 0x4b564d02
76*daec8d40SPaolo Bonzini
77*daec8d40SPaolo BonziniKVM_FEATURE_PV_SEND_IPI            11          guest checks this feature bit
78*daec8d40SPaolo Bonzini                                               before enabling paravirtualized
79*daec8d40SPaolo Bonzini                                               send IPIs
80*daec8d40SPaolo Bonzini
81*daec8d40SPaolo BonziniKVM_FEATURE_POLL_CONTROL           12          host-side polling on HLT can
82*daec8d40SPaolo Bonzini                                               be disabled by writing
83*daec8d40SPaolo Bonzini                                               to msr 0x4b564d05.
84*daec8d40SPaolo Bonzini
85*daec8d40SPaolo BonziniKVM_FEATURE_PV_SCHED_YIELD         13          guest checks this feature bit
86*daec8d40SPaolo Bonzini                                               before using paravirtualized
87*daec8d40SPaolo Bonzini                                               sched yield.
88*daec8d40SPaolo Bonzini
89*daec8d40SPaolo BonziniKVM_FEATURE_ASYNC_PF_INT           14          guest checks this feature bit
90*daec8d40SPaolo Bonzini                                               before using the second async
91*daec8d40SPaolo Bonzini                                               pf control msr 0x4b564d06 and
92*daec8d40SPaolo Bonzini                                               async pf acknowledgment msr
93*daec8d40SPaolo Bonzini                                               0x4b564d07.
94*daec8d40SPaolo Bonzini
95*daec8d40SPaolo BonziniKVM_FEATURE_MSI_EXT_DEST_ID        15          guest checks this feature bit
96*daec8d40SPaolo Bonzini                                               before using extended destination
97*daec8d40SPaolo Bonzini                                               ID bits in MSI address bits 11-5.
98*daec8d40SPaolo Bonzini
99*daec8d40SPaolo BonziniKVM_FEATURE_HC_MAP_GPA_RANGE       16          guest checks this feature bit before
100*daec8d40SPaolo Bonzini                                               using the map gpa range hypercall
101*daec8d40SPaolo Bonzini                                               to notify the page state change
102*daec8d40SPaolo Bonzini
103*daec8d40SPaolo BonziniKVM_FEATURE_MIGRATION_CONTROL      17          guest checks this feature bit before
104*daec8d40SPaolo Bonzini                                               using MSR_KVM_MIGRATION_CONTROL
105*daec8d40SPaolo Bonzini
106*daec8d40SPaolo BonziniKVM_FEATURE_CLOCKSOURCE_STABLE_BIT 24          host will warn if no guest-side
107*daec8d40SPaolo Bonzini                                               per-cpu warps are expected in
108*daec8d40SPaolo Bonzini                                               kvmclock
109*daec8d40SPaolo Bonzini================================== =========== ================================
110*daec8d40SPaolo Bonzini
111*daec8d40SPaolo Bonzini::
112*daec8d40SPaolo Bonzini
113*daec8d40SPaolo Bonzini      edx = an OR'ed group of (1 << flag)
114*daec8d40SPaolo Bonzini
115*daec8d40SPaolo BonziniWhere ``flag`` here is defined as below:
116*daec8d40SPaolo Bonzini
117*daec8d40SPaolo Bonzini================== ============ =================================
118*daec8d40SPaolo Bonziniflag               value        meaning
119*daec8d40SPaolo Bonzini================== ============ =================================
120*daec8d40SPaolo BonziniKVM_HINTS_REALTIME 0            guest checks this feature bit to
121*daec8d40SPaolo Bonzini                                determine that vCPUs are never
122*daec8d40SPaolo Bonzini                                preempted for an unlimited time
123*daec8d40SPaolo Bonzini                                allowing optimizations
124*daec8d40SPaolo Bonzini================== ============ =================================
125