Note
此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。
- Original:
- Translator:
- Alex Shi <alexs@kernel.org> 
- Wu XiangCheng <bobwxc@email.cn> 
 
Linux内核补丁提交检查单¶
如果开发人员希望看到他们的内核补丁提交更快地被接受,那么他们应该做一些基本 的事情。
这些都是在 提交补丁:如何让你的改动进入内核 和其他有关提交Linux内核补丁的文档中提供的。
- 如果使用工具,则包括定义/声明该工具的文件。不要依赖其他头文件来引入您使用 的头文件。 
- 干净的编译: - 使用合适的 - CONFIG选项- =y、- =m和- =n。没有- gcc警告/错误,没有链接器警告/错误。
- 通过 - allnoconfig、- allmodconfig
- 使用 - O=builddir时可以成功编译
- 任何 Doucmentation/ 下的变更都能成功构建且不引入新警告/错误。 用 - make htmldocs或- make pdfdocs检验构建情况并修复问题。
 
- 通过使用本地交叉编译工具或其他一些构建设施在多个CPU体系结构上构建。 
- PPC64是一种很好的交叉编译检查体系结构,因为它倾向于对64位的数使用无符号 长整型。 
- 按 Linux 内核代码风格 所述检查您的 补丁是否为常规样式。在提交之前使用补丁样式检查器 - scripts/checkpatch.pl检查是否有轻微的冲突。您应该能够处理您的补丁中存在的所有 违规行为。
- 任何新的或修改过的 - CONFIG选项都不应搞乱配置菜单,并默认为关闭,除非 它们符合- Documentation/kbuild/kconfig-language.rst菜单属性:默认值中 记录的例外条件。
- 所有新的 - kconfig选项都有帮助文本。
- 已仔细审查了相关的 - Kconfig组合。这很难用测试来纠正——脑力在这里是有 回报的。
- 通过 sparse 清查。 (参见 Sparse ) 
- 使用 - make checkstack并修复他们发现的任何问题。- Note - checkstack并不会明确指出问题,但是任何一个在堆栈上使用超过512 字节的函数都可以进行更改。
- 包括 kernel-doc 内核文档以记录全局内核API。(静态 函数不需要,但也可以。)使用 - make htmldocs或- make pdfdocs检查 kernel-doc 并修复任何问题。
- 通过以下选项同时启用的测试: - CONFIG_PREEMPT,- CONFIG_DEBUG_PREEMPT,- CONFIG_DEBUG_SLAB,- CONFIG_DEBUG_PAGEALLOC,- CONFIG_DEBUG_MUTEXES,- CONFIG_DEBUG_SPINLOCK,- CONFIG_DEBUG_ATOMIC_SLEEP,- CONFIG_PROVE_RCU和- CONFIG_DEBUG_OBJECTS_RCU_HEAD。
- 在 - CONFIG_SMP,- CONFIG_PREEMPT开启和关闭的情况下都进行构建和运行 时测试。
- 所有代码路径都已在启用所有死锁检测(lockdep)功能的情况下运行。 
- 所有新的 - /proc条目都记录在- Documentation/
- 所有新的内核引导参数都记录在 The kernel’s command-line parameters 中。 
- 所有新的模块参数都记录在 - MODULE_PARM_DESC()
- 所有新的用户空间接口都记录在 - Documentation/ABI/中。有关详细信息, 请参阅 Linux ABI description (或- Documentation/ABI/README)。 更改用户空间接口的补丁应该抄送 linux-api@vger.kernel.org。
- 已通过至少注入slab和page分配失败进行检查。请参阅 - Documentation/fault-injection/。 如果新代码是实质性的,那么添加子系统特定的故障注入可能是合适的。
- 新添加的代码已经用 - gcc -W编译(使用- make EXTRA-CFLAGS=-W)。这 将产生大量噪声,但对于查找诸如“警告:有符号和无符号之间的比较”之类的错误 很有用。
- 在它被合并到-mm补丁集中之后进行测试,以确保它仍然与所有其他排队的补丁以 及VM、VFS和其他子系统中的各种更改一起工作。 
- 所有内存屏障(例如 - barrier(),- rmb(),- wmb())都需要源代码注 释来解释它们正在执行的操作及其原因的逻辑。
- 如果补丁添加了任何ioctl,那么也要更新 - Documentation/userspace-api/ioctl/ioctl-number.rst。
- 如果修改后的源代码依赖或使用与以下 - Kconfig符号相关的任何内核API或 功能,则在禁用相关- Kconfig符号和/或- =m(如果该选项可用)的情况 下测试以下多个构建[并非所有这些都同时存在,只是它们的各种/随机组合]:- CONFIG_SMP,- CONFIG_SYSFS,- CONFIG_PROC_FS,- CONFIG_INPUT,- CONFIG_PCI,- CONFIG_BLOCK,- CONFIG_PM,- CONFIG_MAGIC_SYSRQ,- CONFIG_NET,- CONFIG_INET=n(但是最后一个需要- CONFIG_NET=y)。