samples/kprobes: Add ARM support
[linux-block.git] / Documentation / process / submit-checklist.rst
CommitLineData
dca22a63
MCC
1.. _submitchecklist:
2
8b7ecb11 3Linux Kernel patch submission checklist
7a71a809 4~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
915a56d2 5
e54695a5
AM
6Here are some basic things that developers should do if they want to see their
7kernel patch submissions accepted more quickly.
915a56d2 8
e54695a5 9These are all above and beyond the documentation that is provided in
8c27ceff 10:ref:`Documentation/process/submitting-patches.rst <submittingpatches>`
7a71a809 11and elsewhere regarding submitting Linux kernel patches.
915a56d2
RD
12
13
7a71a809 141) If you use a facility then #include the file that defines/declares
b5247c85
RD
15 that facility. Don't depend on other header files pulling in ones
16 that you use.
17
7a71a809 182) Builds cleanly:
915a56d2 19
7a71a809
MCC
20 a) with applicable or modified ``CONFIG`` options ``=y``, ``=m``, and
21 ``=n``. No ``gcc`` warnings/errors, no linker warnings/errors.
915a56d2 22
7a71a809 23 b) Passes ``allnoconfig``, ``allmodconfig``
85f9642e 24
7a71a809
MCC
25 c) Builds successfully when using ``O=builddir``
26
9334e34f
RD
27 d) Any Documentation/ changes build successfully without new warnings/errors.
28 Use ``make htmldocs`` or ``make pdfdocs`` to check the build and
29 fix any issues.
30
7a71a809 313) Builds on multiple CPU architectures by using local cross-compile tools
7de3369c 32 or some other build farm.
915a56d2 33
7a71a809
MCC
344) ppc64 is a good architecture for cross-compilation checking because it
35 tends to use ``unsigned long`` for 64-bit quantities.
915a56d2 36
dca22a63 375) Check your patch for general style as detailed in
8c27ceff 38 :ref:`Documentation/process/coding-style.rst <codingstyle>`.
7a71a809
MCC
39 Check for trivial violations with the patch style checker prior to
40 submission (``scripts/checkpatch.pl``).
df24d9a6
BF
41 You should be able to justify all violations that remain in
42 your patch.
915a56d2 43
241f67c8 446) Any new or modified ``CONFIG`` options do not muck up the config menu and
012e93cb 45 default to off unless they meet the exception criteria documented in
cd238eff 46 ``Documentation/kbuild/kconfig-language.rst`` Menu attributes: default value.
915a56d2 47
7a71a809 487) All new ``Kconfig`` options have help text.
915a56d2 49
7a71a809 508) Has been carefully reviewed with respect to relevant ``Kconfig``
e54695a5
AM
51 combinations. This is very hard to get right with testing -- brainpower
52 pays off here.
915a56d2 53
7a71a809
MCC
549) Check cleanly with sparse.
55
7dfbea4c 5610) Use ``make checkstack`` and fix any problems that it finds.
7a71a809
MCC
57
58 .. note::
915a56d2 59
7a71a809
MCC
60 ``checkstack`` does not point out problems explicitly,
61 but any one function that uses more than 512 bytes on the stack is a
62 candidate for change.
915a56d2 63
dca22a63 6411) Include :ref:`kernel-doc <kernel_doc>` to document global kernel APIs.
0cef67aa
MCC
65 (Not required for static functions, but OK there also.) Use
66 ``make htmldocs`` or ``make pdfdocs`` to check the
67 :ref:`kernel-doc <kernel_doc>` and fix any issues.
915a56d2 68
7a71a809
MCC
6912) Has been tested with ``CONFIG_PREEMPT``, ``CONFIG_DEBUG_PREEMPT``,
70 ``CONFIG_DEBUG_SLAB``, ``CONFIG_DEBUG_PAGEALLOC``, ``CONFIG_DEBUG_MUTEXES``,
71 ``CONFIG_DEBUG_SPINLOCK``, ``CONFIG_DEBUG_ATOMIC_SLEEP``,
72 ``CONFIG_PROVE_RCU`` and ``CONFIG_DEBUG_OBJECTS_RCU_HEAD`` all
73 simultaneously enabled.
915a56d2 74
7a71a809
MCC
7513) Has been build- and runtime tested with and without ``CONFIG_SMP`` and
76 ``CONFIG_PREEMPT.``
915a56d2 77
27ab873e 7814) All codepaths have been exercised with all lockdep features enabled.
915a56d2 79
27ab873e 8015) All new ``/proc`` entries are documented under ``Documentation/``
915a56d2 81
27ab873e 8216) All new kernel boot parameters are documented in
8c27ceff 83 ``Documentation/admin-guide/kernel-parameters.rst``.
e54695a5 84
27ab873e 8517) All new module parameters are documented with ``MODULE_PARM_DESC()``
1a036cdd 86
27ab873e 8718) All new userspace interfaces are documented in ``Documentation/ABI/``.
7a71a809 88 See ``Documentation/ABI/README`` for more information.
1d992ce9
MK
89 Patches that change userspace interfaces should be CCed to
90 linux-api@vger.kernel.org.
ce584f91 91
27ab873e 9219) Check that it all passes ``make headers_check``.
0dd4e5b8 93
27ab873e 9420) Has been checked with injection of at least slab and page-allocation
7a71a809 95 failures. See ``Documentation/fault-injection/``.
0dd4e5b8
AM
96
97 If the new code is substantial, addition of subsystem-specific fault
98 injection might be appropriate.
a517b9f9 99
27ab873e 10021) Newly-added code has been compiled with ``gcc -W`` (use
7a71a809
MCC
101 ``make EXTRA_CFLAGS=-W``). This will generate lots of noise, but is good
102 for finding bugs like "warning: comparison between signed and unsigned".
244474b2 103
27ab873e 10422) Tested after it has been merged into the -mm patchset to make sure
244474b2
RD
105 that it still works with all of the other queued patches and various
106 changes in the VM, VFS, and other subsystems.
8033fe65 107
27ab873e 10823) All memory barriers {e.g., ``barrier()``, ``rmb()``, ``wmb()``} need a
7a71a809
MCC
109 comment in the source code that explains the logic of what they are doing
110 and why.
7de3369c 111
27ab873e 11224) If any ioctl's are added by the patch, then also update
72ef5e52 113 ``Documentation/userspace-api/ioctl/ioctl-number.rst``.
85f9642e 114
27ab873e 11525) If your modified source code depends on or uses any of the kernel
7a71a809
MCC
116 APIs or features that are related to the following ``Kconfig`` symbols,
117 then test multiple builds with the related ``Kconfig`` symbols disabled
118 and/or ``=m`` (if that option is available) [not all of these at the
85f9642e
RD
119 same time, just various/random combinations of them]:
120
7a71a809
MCC
121 ``CONFIG_SMP``, ``CONFIG_SYSFS``, ``CONFIG_PROC_FS``, ``CONFIG_INPUT``, ``CONFIG_PCI``, ``CONFIG_BLOCK``, ``CONFIG_PM``, ``CONFIG_MAGIC_SYSRQ``,
122 ``CONFIG_NET``, ``CONFIG_INET=n`` (but latter with ``CONFIG_NET=y``).