@@ -11,110 +11,121 @@ These are all above and beyond the documentation that is provided in
11
11
and elsewhere regarding submitting Linux kernel patches.
12
12
13
13
14
+ *Review your code: *
15
+
14
16
1) If you use a facility then #include the file that defines/declares
15
17
that facility. Don't depend on other header files pulling in ones
16
18
that you use.
17
19
18
- 2) Builds cleanly:
20
+ 2) Check your patch for general style as detailed in
21
+ :ref: `Documentation/process/coding-style.rst <codingstyle >`.
19
22
20
- a) with applicable or modified ``CONFIG `` options ``=y ``, ``=m ``, and
21
- ``=n ``. No ``gcc `` warnings/errors, no linker warnings/errors.
23
+ 3) All memory barriers {e.g., ``barrier() ``, ``rmb() ``, ``wmb() ``} need a
24
+ comment in the source code that explains the logic of what they are doing
25
+ and why.
22
26
23
- b) Passes ``allnoconfig ``, ``allmodconfig ``
24
27
25
- c) Builds successfully when using `` O=builddir ``
28
+ * Review Kconfig changes: *
26
29
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
+ 1 ) Any new or modified `` CONFIG `` options do not muck up the config menu and
31
+ default to off unless they meet the exception criteria documented in
32
+ `` Documentation/kbuild/kconfig-language.rst `` Menu attributes: default value .
30
33
31
- 3) Builds on multiple CPU architectures by using local cross-compile tools
32
- or some other build farm.
34
+ 2) All new ``Kconfig `` options have help text.
33
35
34
- 4) ppc64 is a good architecture for cross-compilation checking because it
35
- tends to use ``unsigned long `` for 64-bit quantities.
36
+ 3) Has been carefully reviewed with respect to relevant ``Kconfig ``
37
+ combinations. This is very hard to get right with testing---brainpower
38
+ pays off here.
36
39
37
- 5) Check your patch for general style as detailed in
38
- :ref: `Documentation/process/coding-style.rst <codingstyle >`.
39
- Check for trivial violations with the patch style checker prior to
40
- submission (``scripts/checkpatch.pl ``).
41
- You should be able to justify all violations that remain in
42
- your patch.
40
+ *Provide documentation: *
43
41
44
- 6) Any new or modified ``CONFIG `` options do not muck up the config menu and
45
- default to off unless they meet the exception criteria documented in
46
- ``Documentation/kbuild/kconfig-language.rst `` Menu attributes: default value.
42
+ 1) Include :ref: `kernel-doc <kernel_doc >` to document global kernel APIs.
43
+ (Not required for static functions, but OK there also.)
47
44
48
- 7 ) All new ``Kconfig `` options have help text.
45
+ 2 ) All new ``/proc `` entries are documented under `` Documentation/ ``
49
46
50
- 8) Has been carefully reviewed with respect to relevant ``Kconfig ``
51
- combinations. This is very hard to get right with testing -- brainpower
52
- pays off here.
47
+ 3) All new kernel boot parameters are documented in
48
+ ``Documentation/admin-guide/kernel-parameters.rst ``.
49
+
50
+ 4) All new module parameters are documented with ``MODULE_PARM_DESC() ``
53
51
54
- 9) Check cleanly with sparse.
52
+ 5) All new userspace interfaces are documented in ``Documentation/ABI/ ``.
53
+ See ``Documentation/ABI/README `` for more information.
54
+ Patches that change userspace interfaces should be CCed to
55
+
55
56
56
- 10) Use ``make checkstack `` and fix any problems that it finds.
57
+ 6) If any ioctl's are added by the patch, then also update
58
+ ``Documentation/userspace-api/ioctl/ioctl-number.rst ``.
57
59
58
- .. note ::
59
60
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.
61
+ *Check your code with tools: *
63
62
64
- 11) Include :ref: ` kernel-doc < kernel_doc >` to document global kernel APIs.
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 .
63
+ 1) Check for trivial violations with the patch style checker prior to
64
+ submission (`` scripts/checkpatch.pl ``).
65
+ You should be able to justify all violations that remain in
66
+ your patch .
68
67
69
- 12) 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.
68
+ 2) Check cleanly with sparse.
74
69
75
- 13) Has been build- and runtime tested with and without ``CONFIG_SMP `` and
76
- ``CONFIG_PREEMPT. ``
70
+ 3) Use ``make checkstack `` and fix any problems that it finds.
71
+ Note that ``checkstack `` does not point out problems explicitly,
72
+ but any one function that uses more than 512 bytes on the stack is a
73
+ candidate for change.
77
74
78
- 14) All codepaths have been exercised with all lockdep features enabled.
79
75
80
- 15) All new ``/proc `` entries are documented under ``Documentation/ ``
76
+ *Build your code: *
77
+
78
+ 1) Builds cleanly:
79
+
80
+ a) with applicable or modified ``CONFIG `` options ``=y ``, ``=m ``, and
81
+ ``=n ``. No ``gcc `` warnings/errors, no linker warnings/errors.
82
+
83
+ b) Passes ``allnoconfig ``, ``allmodconfig ``
84
+
85
+ c) Builds successfully when using ``O=builddir ``
86
+
87
+ d) Any Documentation/ changes build successfully without new warnings/errors.
88
+ Use ``make htmldocs `` or ``make pdfdocs `` to check the build and
89
+ fix any issues.
81
90
82
- 16) All new kernel boot parameters are documented in
83
- ``Documentation/admin-guide/kernel-parameters.rst ``.
91
+ 2) Builds on multiple CPU architectures by using local cross-compile tools
92
+ or some other build farm. Note that ppc64 is a good architecture for
93
+ cross-compilation checking because it tends to use ``unsigned long `` for
94
+ 64-bit quantities.
84
95
85
- 17) All new module parameters are documented with ``MODULE_PARM_DESC() ``
96
+ 3) Newly-added code has been compiled with ``gcc -W `` (use
97
+ ``make KCFLAGS=-W ``). This will generate lots of noise, but is good
98
+ for finding bugs like "warning: comparison between signed and unsigned".
86
99
87
- 18) All new userspace interfaces are documented in ``Documentation/ABI/ ``.
88
- See ``Documentation/ABI/README `` for more information.
89
- Patches that change userspace interfaces should be CCed to
90
-
100
+ 4) If your modified source code depends on or uses any of the kernel
101
+ APIs or features that are related to the following ``Kconfig `` symbols,
102
+ then test multiple builds with the related ``Kconfig `` symbols disabled
103
+ and/or ``=m `` (if that option is available) [not all of these at the
104
+ same time, just various/random combinations of them]:
91
105
92
- 19) Has been checked with injection of at least slab and page-allocation
93
- failures. See ``Documentation/fault-injection/ ``.
106
+ ``CONFIG_SMP ``, ``CONFIG_SYSFS ``, ``CONFIG_PROC_FS ``, ``CONFIG_INPUT ``,
107
+ ``CONFIG_PCI ``, ``CONFIG_BLOCK ``, ``CONFIG_PM ``, ``CONFIG_MAGIC_SYSRQ ``,
108
+ ``CONFIG_NET ``, ``CONFIG_INET=n `` (but latter with ``CONFIG_NET=y ``).
94
109
95
- If the new code is substantial, addition of subsystem-specific fault
96
- injection might be appropriate.
97
110
98
- 20) Newly-added code has been compiled with ``gcc -W `` (use
99
- ``make KCFLAGS=-W ``). This will generate lots of noise, but is good
100
- for finding bugs like "warning: comparison between signed and unsigned".
111
+ *Test your code: *
101
112
102
- 21) Tested after it has been merged into the -mm patchset to make sure
103
- that it still works with all of the other queued patches and various
104
- changes in the VM, VFS, and other subsystems.
113
+ 1) Has been tested with ``CONFIG_PREEMPT ``, ``CONFIG_DEBUG_PREEMPT ``,
114
+ ``CONFIG_SLUB_DEBUG ``, ``CONFIG_DEBUG_PAGEALLOC ``, ``CONFIG_DEBUG_MUTEXES ``,
115
+ ``CONFIG_DEBUG_SPINLOCK ``, ``CONFIG_DEBUG_ATOMIC_SLEEP ``,
116
+ ``CONFIG_PROVE_RCU `` and ``CONFIG_DEBUG_OBJECTS_RCU_HEAD `` all
117
+ simultaneously enabled.
105
118
106
- 22) All memory barriers {e.g., ``barrier() ``, ``rmb() ``, ``wmb() ``} need a
107
- comment in the source code that explains the logic of what they are doing
108
- and why.
119
+ 2) Has been build- and runtime tested with and without ``CONFIG_SMP `` and
120
+ ``CONFIG_PREEMPT. ``
109
121
110
- 23) If any ioctl's are added by the patch, then also update
111
- ``Documentation/userspace-api/ioctl/ioctl-number.rst ``.
122
+ 3) All codepaths have been exercised with all lockdep features enabled.
112
123
113
- 24) If your modified source code depends on or uses any of the kernel
114
- APIs or features that are related to the following ``Kconfig `` symbols,
115
- then test multiple builds with the related ``Kconfig `` symbols disabled
116
- and/or ``=m `` (if that option is available) [not all of these at the
117
- same time, just various/random combinations of them]:
124
+ 4) Has been checked with injection of at least slab and page-allocation
125
+ failures. See ``Documentation/fault-injection/ ``.
126
+ If the new code is substantial, addition of subsystem-specific fault
127
+ injection might be appropriate.
118
128
119
- ``CONFIG_SMP ``, ``CONFIG_SYSFS ``, ``CONFIG_PROC_FS ``, ``CONFIG_INPUT ``, ``CONFIG_PCI ``, ``CONFIG_BLOCK ``, ``CONFIG_PM ``, ``CONFIG_MAGIC_SYSRQ ``,
120
- ``CONFIG_NET ``, ``CONFIG_INET=n `` (but latter with ``CONFIG_NET=y ``).
129
+ 5) Tested with the most recent tag of linux-next to make sure that it still
130
+ works with all of the other queued patches and various changes in the VM,
131
+ VFS, and other subsystems.
0 commit comments