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