Documentation: KVM: add API issues section
[ Upstream commit cde363ab7ca7aea7a853851cd6a6745a9e1aaf5e ] Add a section to document all the different ways in which the KVM API sucks. I am sure there are way more, give people a place to vent so that userspace authors are aware. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Message-Id: <20220322110712.222449-4-pbonzini@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
caaea2ab6b
commit
0027164b24
@@ -6398,3 +6398,49 @@ When enabled, KVM will disable paravirtual features provided to the
|
|||||||
guest according to the bits in the KVM_CPUID_FEATURES CPUID leaf
|
guest according to the bits in the KVM_CPUID_FEATURES CPUID leaf
|
||||||
(0x40000001). Otherwise, a guest may use the paravirtual features
|
(0x40000001). Otherwise, a guest may use the paravirtual features
|
||||||
regardless of what has actually been exposed through the CPUID leaf.
|
regardless of what has actually been exposed through the CPUID leaf.
|
||||||
|
|
||||||
|
9. Known KVM API problems
|
||||||
|
=========================
|
||||||
|
|
||||||
|
In some cases, KVM's API has some inconsistencies or common pitfalls
|
||||||
|
that userspace need to be aware of. This section details some of
|
||||||
|
these issues.
|
||||||
|
|
||||||
|
Most of them are architecture specific, so the section is split by
|
||||||
|
architecture.
|
||||||
|
|
||||||
|
9.1. x86
|
||||||
|
--------
|
||||||
|
|
||||||
|
``KVM_GET_SUPPORTED_CPUID`` issues
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
In general, ``KVM_GET_SUPPORTED_CPUID`` is designed so that it is possible
|
||||||
|
to take its result and pass it directly to ``KVM_SET_CPUID2``. This section
|
||||||
|
documents some cases in which that requires some care.
|
||||||
|
|
||||||
|
Local APIC features
|
||||||
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
CPU[EAX=1]:ECX[21] (X2APIC) is reported by ``KVM_GET_SUPPORTED_CPUID``,
|
||||||
|
but it can only be enabled if ``KVM_CREATE_IRQCHIP`` or
|
||||||
|
``KVM_ENABLE_CAP(KVM_CAP_IRQCHIP_SPLIT)`` are used to enable in-kernel emulation of
|
||||||
|
the local APIC.
|
||||||
|
|
||||||
|
The same is true for the ``KVM_FEATURE_PV_UNHALT`` paravirtualized feature.
|
||||||
|
|
||||||
|
CPU[EAX=1]:ECX[24] (TSC_DEADLINE) is not reported by ``KVM_GET_SUPPORTED_CPUID``.
|
||||||
|
It can be enabled if ``KVM_CAP_TSC_DEADLINE_TIMER`` is present and the kernel
|
||||||
|
has enabled in-kernel emulation of the local APIC.
|
||||||
|
|
||||||
|
Obsolete ioctls and capabilities
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
KVM_CAP_DISABLE_QUIRKS does not let userspace know which quirks are actually
|
||||||
|
available. Use ``KVM_CHECK_EXTENSION(KVM_CAP_DISABLE_QUIRKS2)`` instead if
|
||||||
|
available.
|
||||||
|
|
||||||
|
Ordering of KVM_GET_*/KVM_SET_* ioctls
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
TBD
|
||||||
|
Reference in New Issue
Block a user