Warning

此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。

Note

如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<src.res@email.cn>。

Original:Linux Kernel patch submission checklist
Translator:Alex Shi <alex.shi@linux.alibaba.com> Hu Haowen <src.res@email.cn>

Linux內核補丁提交清單

如果開發人員希望看到他們的內核補丁提交更快地被接受,那麼他們應該做一些基本 的事情。

這些都是在 如何讓你的改動進入內核 和其他有關提交Linux內核補丁的文檔中提供的。

  1. 如果使用工具,則包括定義/聲明該工具的文件。不要依賴於其他頭文件拉入您使用 的頭文件。

  2. 乾淨的編譯:

    1. 使用適用或修改的 CONFIG 選項 =y=m=n 。沒有GCC 警告/錯誤,沒有連結器警告/錯誤。
    2. 通過allnoconfig、allmodconfig
    3. 使用 O=builddir 時可以成功編譯
  3. 通過使用本地交叉編譯工具或其他一些構建場在多個CPU體系結構上構建。

  4. PPC64是一種很好的交叉編譯檢查體系結構,因爲它傾向於對64位的數使用無符號 長整型。

  5. 如下所述 Linux 內核代碼風格. 檢查您的補丁是否爲常規樣式。在提交( scripts/check patch.pl )之前, 使用補丁樣式檢查器檢查是否有輕微的衝突。您應該能夠處理您的補丁中存在的所有 違規行爲。

  6. 任何新的或修改過的 CONFIG 選項都不會弄髒配置菜單,並默認爲關閉,除非 它們符合 Documentation/kbuild/kconfig-language.rst 中記錄的異常條件, 菜單屬性:默認值.

  7. 所有新的 kconfig 選項都有幫助文本。

  8. 已仔細審查了相關的 Kconfig 組合。這很難用測試來糾正——腦力在這裡是有 回報的。

  9. 用 sparse 檢查乾淨。

  10. 使用 make checkstackmake namespacecheck 並修復他們發現的任何 問題。

    Note

    checkstack 並沒有明確指出問題,但是任何一個在堆棧上使用超過512 字節的函數都可以進行更改。

  11. 包括 kernel-doc 內核文檔以記錄全局內核API。(靜態函數 不需要,但也可以。)使用 make htmldocsmake pdfdocs 檢查 kernel-doc 並修復任何問題。

  12. 通過以下選項同時啓用的測試 CONFIG_PREEMPT, CONFIG_DEBUG_PREEMPT, CONFIG_DEBUG_SLAB, CONFIG_DEBUG_PAGEALLOC, CONFIG_DEBUG_MUTEXES, CONFIG_DEBUG_SPINLOCK, CONFIG_DEBUG_ATOMIC_SLEEP, CONFIG_PROVE_RCU and CONFIG_DEBUG_OBJECTS_RCU_HEAD

  13. 已經過構建和運行時測試,包括有或沒有 CONFIG_SMP, CONFIG_PREEMPT.

  14. 如果補丁程序影響IO/磁碟等:使用或不使用 CONFIG_LBDAF 進行測試。

  15. 所有代碼路徑都已在啓用所有lockdep功能的情況下運行。

  16. 所有新的/proc條目都記錄在 Documentation/

  17. 所有新的內核引導參數都記錄在 The kernel’s command-line parameters 中。

  18. 所有新的模塊參數都記錄在 MODULE_PARM_DESC()

  19. 所有新的用戶空間接口都記錄在 Documentation/ABI/ 中。有關詳細信息, 請參閱 Documentation/ABI/README 。更改用戶空間接口的補丁應該抄送 linux-api@vger.kernel.org

  20. 已通過至少注入slab和page分配失敗進行檢查。請參閱 Documentation/fault-injection/ 如果新代碼是實質性的,那麼添加子系統特定的故障注入可能是合適的。

  21. 新添加的代碼已經用 gcc -W 編譯(使用 make EXTRA-CFLAGS=-W )。這 將產生大量噪聲,但對於查找諸如「警告:有符號和無符號之間的比較」之類的錯誤 很有用。

  22. 在它被合併到-mm補丁集中之後進行測試,以確保它仍然與所有其他排隊的補丁以 及VM、VFS和其他子系統中的各種更改一起工作。

  23. 所有內存屏障例如 barrier(), rmb(), wmb() 都需要原始碼中的注 釋來解釋它們正在執行的操作及其原因的邏輯。

  24. 如果補丁添加了任何ioctl,那麼也要更新 Documentation/userspace-api/ioctl/ioctl-number.rst

  25. 如果修改後的原始碼依賴或使用與以下 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).