125 lines
5.3 KiB
ReStructuredText
125 lines
5.3 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0
|
|
|
|
==============
|
|
KVM CPUID bits
|
|
==============
|
|
|
|
:Author: Glauber Costa <glommer@gmail.com>
|
|
|
|
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
|
|
================== ============ =================================
|