| From dad1005b3501947da0a8e85e31656b6824932e35 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 22 Mar 2022 12:07:12 +0100 |
| Subject: Documentation: KVM: add API issues section |
| |
| From: Paolo Bonzini <pbonzini@redhat.com> |
| |
| [ 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> |
| --- |
| Documentation/virt/kvm/api.rst | 46 ++++++++++++++++++++++++++++++++++ |
| 1 file changed, 46 insertions(+) |
| |
| diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst |
| index a6729c8cf063..8826f8023f06 100644 |
| --- a/Documentation/virt/kvm/api.rst |
| +++ b/Documentation/virt/kvm/api.rst |
| @@ -7265,3 +7265,49 @@ The argument to KVM_ENABLE_CAP is also a bitmask, and must be a subset |
| of the result of KVM_CHECK_EXTENSION. KVM will forward to userspace |
| the hypercalls whose corresponding bit is in the argument, and return |
| ENOSYS for the others. |
| + |
| +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 |
| -- |
| 2.35.1 |
| |