mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-22 07:27:12 +08:00
Corrected a few spelling mistakes to improve the readability. Signed-off-by: Ranganath V N <vnranganath.20@gmail.com> Acked-by: Rob Herring (Arm) <robh@kernel.org> Reviewed-by: Randy Dunlap <rdunlap@infradead.org> Signed-off-by: Jonathan Corbet <corbet@lwn.net> Link: https://lore.kernel.org/r/20250902193822.6349-1-vnranganath.20@gmail.com
123 lines
5.6 KiB
ReStructuredText
123 lines
5.6 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0
|
|
|
|
================================
|
|
Review checklist for kvm patches
|
|
================================
|
|
|
|
1. The patch must follow Documentation/process/coding-style.rst and
|
|
Documentation/process/submitting-patches.rst.
|
|
|
|
2. Patches should be against kvm.git master or next branches.
|
|
|
|
3. If the patch introduces or modifies a new userspace API:
|
|
- the API must be documented in Documentation/virt/kvm/api.rst
|
|
- the API must be discoverable using KVM_CHECK_EXTENSION
|
|
|
|
4. New state must include support for save/restore.
|
|
|
|
5. New features must default to off (userspace should explicitly request them).
|
|
Performance improvements can and should default to on.
|
|
|
|
6. New cpu features should be exposed via KVM_GET_SUPPORTED_CPUID2,
|
|
or its equivalent for non-x86 architectures
|
|
|
|
7. The feature should be testable (see below).
|
|
|
|
8. Changes should be vendor neutral when possible. Changes to common code
|
|
are better than duplicating changes to vendor code.
|
|
|
|
9. Similarly, prefer changes to arch independent code than to arch dependent
|
|
code.
|
|
|
|
10. User/kernel interfaces and guest/host interfaces must be 64-bit clean
|
|
(all variables and sizes naturally aligned on 64-bit; use specific types
|
|
only - u64 rather than ulong).
|
|
|
|
11. New guest visible features must either be documented in a hardware manual
|
|
or be accompanied by documentation.
|
|
|
|
Testing of KVM code
|
|
-------------------
|
|
|
|
All features contributed to KVM, and in many cases bugfixes too, should be
|
|
accompanied by some kind of tests and/or enablement in open source guests
|
|
and VMMs. KVM is covered by multiple test suites:
|
|
|
|
*Selftests*
|
|
These are low level tests that allow granular testing of kernel APIs.
|
|
This includes API failure scenarios, invoking APIs after specific
|
|
guest instructions, and testing multiple calls to ``KVM_CREATE_VM``
|
|
within a single test. They are included in the kernel tree at
|
|
``tools/testing/selftests/kvm``.
|
|
|
|
``kvm-unit-tests``
|
|
A collection of small guests that test CPU and emulated device features
|
|
from a guest's perspective. They run under QEMU or ``kvmtool``, and
|
|
are generally not KVM-specific: they can be run with any accelerator
|
|
that QEMU support or even on bare metal, making it possible to compare
|
|
behavior across hypervisors and processor families.
|
|
|
|
Functional test suites
|
|
Various sets of functional tests exist, such as QEMU's ``tests/functional``
|
|
suite and `avocado-vt <https://avocado-vt.readthedocs.io/en/latest/>`__.
|
|
These typically involve running a full operating system in a virtual
|
|
machine.
|
|
|
|
The best testing approach depends on the feature's complexity and
|
|
operation. Here are some examples and guidelines:
|
|
|
|
New instructions (no new registers or APIs)
|
|
The corresponding CPU features (if applicable) should be made available
|
|
in QEMU. If the instructions require emulation support or other code in
|
|
KVM, it is worth adding coverage to ``kvm-unit-tests`` or selftests;
|
|
the latter can be a better choice if the instructions relate to an API
|
|
that already has good selftest coverage.
|
|
|
|
New hardware features (new registers, no new APIs)
|
|
These should be tested via ``kvm-unit-tests``; this more or less implies
|
|
supporting them in QEMU and/or ``kvmtool``. In some cases selftests
|
|
can be used instead, similar to the previous case, or specifically to
|
|
test corner cases in guest state save/restore.
|
|
|
|
Bug fixes and performance improvements
|
|
These usually do not introduce new APIs, but it's worth sharing
|
|
any benchmarks and tests that will validate your contribution,
|
|
ideally in the form of regression tests. Tests and benchmarks
|
|
can be included in either ``kvm-unit-tests`` or selftests, depending
|
|
on the specifics of your change. Selftests are especially useful for
|
|
regression tests because they are included directly in Linux's tree.
|
|
|
|
Large scale internal changes
|
|
While it's difficult to provide a single policy, you should ensure that
|
|
the changed code is covered by either ``kvm-unit-tests`` or selftests.
|
|
In some cases the affected code is run for any guests and functional
|
|
tests suffice. Explain your testing process in the cover letter,
|
|
as that can help identify gaps in existing test suites.
|
|
|
|
New APIs
|
|
It is important to demonstrate your use case. This can be as simple as
|
|
explaining that the feature is already in use on bare metal, or it can be
|
|
a proof-of-concept implementation in userspace. The latter need not be
|
|
open source, though that is of course preferable for easier testing.
|
|
Selftests should test corner cases of the APIs, and should also cover
|
|
basic host and guest operation if no open source VMM uses the feature.
|
|
|
|
Bigger features, usually spanning host and guest
|
|
These should be supported by Linux guests, with limited exceptions for
|
|
Hyper-V features that are testable on Windows guests. It is strongly
|
|
suggested that the feature be usable with an open source host VMM, such
|
|
as at least one of QEMU or crosvm, and guest firmware. Selftests should
|
|
test at least API error cases. Guest operation can be covered by
|
|
either selftests of ``kvm-unit-tests`` (this is especially important for
|
|
paravirtualized and Windows-only features). Strong selftest coverage
|
|
can also be a replacement for implementation in an open source VMM,
|
|
but this is generally not recommended.
|
|
|
|
Following the above suggestions for testing in selftests and
|
|
``kvm-unit-tests`` will make it easier for the maintainers to review
|
|
and accept your code. In fact, even before you contribute your changes
|
|
upstream it will make it easier for you to develop for KVM.
|
|
|
|
Of course, the KVM maintainers reserve the right to require more tests,
|
|
though they may also waive the requirement from time to time.
|