123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- .. SPDX-License-Identifier: GPL-2.0
- ==============
- KVM CPUID bits
- ==============
- :Author: Glauber Costa <[email protected]>
- 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
- eax = an OR'ed group of (1 << flag)
- where ``flag`` is defined as below:
- ================================== =========== ================================
- 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_PV_TLB_FLUSH 9 guest checks this feature bit
- before enabling paravirtualized
- tlb flush
- 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_PV_SEND_IPI 11 guest checks this feature bit
- before enabling paravirtualized
- send IPIs
- KVM_FEATURE_POLL_CONTROL 12 host-side polling on HLT can
- be disabled by writing
- to msr 0x4b564d05.
- KVM_FEATURE_PV_SCHED_YIELD 13 guest checks this feature bit
- before using paravirtualized
- sched yield.
- KVM_FEATURE_ASYNC_PF_INT 14 guest checks this feature bit
- before using the second async
- pf control msr 0x4b564d06 and
- async pf acknowledgment msr
- 0x4b564d07.
- KVM_FEATURE_MSI_EXT_DEST_ID 15 guest checks this feature bit
- before using extended destination
- ID bits in MSI address bits 11-5.
- KVM_FEATURE_HC_MAP_GPA_RANGE 16 guest checks this feature bit before
- using the map gpa range hypercall
- to notify the page state change
- KVM_FEATURE_MIGRATION_CONTROL 17 guest checks this feature bit before
- using MSR_KVM_MIGRATION_CONTROL
- KVM_FEATURE_CLOCKSOURCE_STABLE_BIT 24 host will warn if no guest-side
- per-cpu warps are expected in
- kvmclock
- ================================== =========== ================================
- ::
- edx = an OR'ed group of (1 << flag)
- Where ``flag`` here is defined as below:
- ================== ============ =================================
- flag value meaning
- ================== ============ =================================
- KVM_HINTS_REALTIME 0 guest checks this feature bit to
- determine that vCPUs are never
- preempted for an unlimited time
- allowing optimizations
- ================== ============ =================================
|