Linux 核心補丁提交核對表

以下是一些開發人員若想其核心補丁提交能更快被接受應做的基本事項。

這些都超出了Documentation/process/submitting-patches.rst及其他地方關於提交 Linux 核心補丁所提供的文件範圍。

審查你的程式碼

  1. 如果你使用了某個設施,那麼請 #include 定義/宣告該設施的檔案。不要依賴其他標頭檔案來引入你使用的檔案。

  2. 檢查你的補丁是否符合Documentation/process/coding-style.rst中詳述的通用程式碼風格。

  3. 所有記憶體屏障(例如 barrier()rmb()wmb())都需要在原始碼中附帶註釋,解釋其邏輯和原因。

審查 Kconfig 更改

  1. 任何新的或修改的 CONFIG 選項都不會弄亂配置選單,並且預設關閉,除非它們符合 Documentation/kbuild/kconfig-language.rst 中“選單屬性:預設值”部分記錄的例外標準。

  2. 所有新的 Kconfig 選項都有幫助文字。

  3. 已針對相關的 Kconfig 組合進行了仔細審查。這透過測試很難做到位——這裡需要智力投入。

提供文件

  1. 包括 kernel-doc 來記錄全域性核心 API。(對於靜態函式不是必需的,但包含也可。)

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

  3. 所有新的核心啟動引數都記錄在 Documentation/admin-guide/kernel-parameters.rst 中。

  4. 所有新的模組引數都使用 MODULE_PARM_DESC() 進行記錄

  5. 所有新的使用者空間介面都記錄在 Documentation/ABI/ 中。更多資訊請參閱Linux ABI 描述(或 Documentation/ABI/README)。修改使用者空間介面的補丁應抄送至 linux-api@vger.kernel.org

  6. 如果補丁添加了任何 ioctl,則還需更新 Documentation/userspace-api/ioctl/ioctl-number.rst

使用工具檢查你的程式碼

  1. 提交前使用補丁風格檢查器 (scripts/checkpatch.pl) 檢查是否存在輕微違規。你應該能夠解釋補丁中所有仍然存在的違規。

  2. 使用 sparse 乾淨地檢查。

  3. 使用 make checkstack 並修復發現的任何問題。請注意,checkstack 不會明確指出問題,但任何在棧上使用超過 512 位元組的函式都可能是需要更改的候選。

構建你的程式碼

  1. 乾淨地構建

  1. 使用適用或修改的 CONFIG 選項 =y=m=n。沒有 gcc 警告/錯誤,沒有連結器警告/錯誤。

  2. 透過 allnoconfigallmodconfig

  3. 使用 O=builddir 成功構建

  4. 所有 Documentation/ 更改都能成功構建,沒有新的警告/錯誤。使用 make htmldocsmake pdfdocs 檢查構建並修復任何問題。

  1. 透過使用本地交叉編譯工具或其他構建農場在多個 CPU 架構上構建。請注意,針對不同字長(32 位和 64 位)和不同位元組序(大端和小端)的架構進行測試,能有效地捕獲由於對可表示數量範圍、資料對齊或位元組序等方面的錯誤假設而導致的各種可移植性問題。

  2. 新新增的程式碼已使用 gcc -W 編譯(使用 make KCFLAGS=-W)。這會產生大量“噪音”,但對於發現“警告:有符號與無符號比較”等錯誤很有用。

  3. 如果你的修改後的原始碼依賴或使用了與以下 Kconfig 符號相關的任何核心 API 或功能,那麼請測試在停用和/或 =m(如果該選項可用)相關 Kconfig 符號時的多次構建 [不是同時啟用所有這些,只是它們的各種/隨機組合]

    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 結合)。

測試你的程式碼

  1. 已使用 CONFIG_PREEMPTCONFIG_DEBUG_PREEMPTCONFIG_SLUB_DEBUGCONFIG_DEBUG_PAGEALLOCCONFIG_DEBUG_MUTEXESCONFIG_DEBUG_SPINLOCKCONFIG_DEBUG_ATOMIC_SLEEPCONFIG_PROVE_RCUCONFIG_DEBUG_OBJECTS_RCU_HEAD 同時啟用進行測試。

  2. 已在啟用和不啟用 CONFIG_SMPCONFIG_PREEMPT 的情況下進行構建和執行時測試。

  3. 所有程式碼路徑都已在啟用所有 lockdep 功能的情況下進行演練。

  4. 已檢查並注入至少 slab 和頁面分配失敗。請參閱 Documentation/fault-injection/。如果新程式碼量大,則可能適合新增特定子系統的故障注入。

  5. 已使用最新的 linux-next 標籤進行測試,以確保其仍能與所有其他排隊補丁以及 VM、VFS 和其他子系統中的各種更改正常工作。