1390f915aSHu Haowen.. SPDX-License-Identifier: GPL-2.0
2390f915aSHu Haowen
3390f915aSHu Haowen.. include:: ../disclaimer-zh_TW.rst
4390f915aSHu Haowen
5390f915aSHu Haowen:Original: :ref:`Documentation/process/submit-checklist.rst <submitchecklist>`
6390f915aSHu Haowen:Translator: Alex Shi <alex.shi@linux.alibaba.com>
7*44a54e25SHu Haowen             Hu Haowen <src.res.211@gmail.com>
8390f915aSHu Haowen
9390f915aSHu Haowen.. _tw_submitchecklist:
10390f915aSHu Haowen
11390f915aSHu HaowenLinux內核補丁提交清單
12390f915aSHu Haowen~~~~~~~~~~~~~~~~~~~~~
13390f915aSHu Haowen
14390f915aSHu Haowen如果開發人員希望看到他們的內核補丁提交更快地被接受,那麼他們應該做一些基本
15390f915aSHu Haowen的事情。
16390f915aSHu Haowen
17390f915aSHu Haowen這些都是在
18390f915aSHu Haowen:ref:`Documentation/translations/zh_TW/process/submitting-patches.rst <tw_submittingpatches>`
19390f915aSHu Haowen和其他有關提交Linux內核補丁的文檔中提供的。
20390f915aSHu Haowen
21390f915aSHu Haowen1) 如果使用工具,則包括定義/聲明該工具的文件。不要依賴於其他頭文件拉入您使用
22390f915aSHu Haowen   的頭文件。
23390f915aSHu Haowen
24390f915aSHu Haowen2) 乾淨的編譯:
25390f915aSHu Haowen
26390f915aSHu Haowen   a) 使用適用或修改的 ``CONFIG`` 選項 ``=y``、``=m`` 和 ``=n`` 。沒有GCC
27390f915aSHu Haowen      警告/錯誤,沒有連結器警告/錯誤。
28390f915aSHu Haowen
29390f915aSHu Haowen   b) 通過allnoconfig、allmodconfig
30390f915aSHu Haowen
31390f915aSHu Haowen   c) 使用 ``O=builddir`` 時可以成功編譯
32390f915aSHu Haowen
33390f915aSHu Haowen3) 通過使用本地交叉編譯工具或其他一些構建場在多個CPU體系結構上構建。
34390f915aSHu Haowen
35390f915aSHu Haowen4) PPC64是一種很好的交叉編譯檢查體系結構,因爲它傾向於對64位的數使用無符號
36390f915aSHu Haowen   長整型。
37390f915aSHu Haowen
38390f915aSHu Haowen5) 如下所述 :ref:`Documentation/translations/zh_TW/process/coding-style.rst <tw_codingstyle>`.
39390f915aSHu Haowen   檢查您的補丁是否爲常規樣式。在提交( ``scripts/check patch.pl`` )之前,
40390f915aSHu Haowen   使用補丁樣式檢查器檢查是否有輕微的衝突。您應該能夠處理您的補丁中存在的所有
41390f915aSHu Haowen   違規行爲。
42390f915aSHu Haowen
43390f915aSHu Haowen6) 任何新的或修改過的 ``CONFIG`` 選項都不會弄髒配置菜單,並默認爲關閉,除非
44390f915aSHu Haowen   它們符合 ``Documentation/kbuild/kconfig-language.rst`` 中記錄的異常條件,
45390f915aSHu Haowen   菜單屬性:默認值.
46390f915aSHu Haowen
47390f915aSHu Haowen7) 所有新的 ``kconfig`` 選項都有幫助文本。
48390f915aSHu Haowen
49390f915aSHu Haowen8) 已仔細審查了相關的 ``Kconfig`` 組合。這很難用測試來糾正——腦力在這裡是有
50390f915aSHu Haowen   回報的。
51390f915aSHu Haowen
52390f915aSHu Haowen9) 用 sparse 檢查乾淨。
53390f915aSHu Haowen
54390f915aSHu Haowen10) 使用 ``make checkstack`` 和 ``make namespacecheck`` 並修復他們發現的任何
55390f915aSHu Haowen    問題。
56390f915aSHu Haowen
57390f915aSHu Haowen    .. note::
58390f915aSHu Haowen
59390f915aSHu Haowen        ``checkstack`` 並沒有明確指出問題,但是任何一個在堆棧上使用超過512
60390f915aSHu Haowen        字節的函數都可以進行更改。
61390f915aSHu Haowen
62390f915aSHu Haowen11) 包括 :ref:`kernel-doc <kernel_doc>` 內核文檔以記錄全局內核API。(靜態函數
63390f915aSHu Haowen    不需要,但也可以。)使用 ``make htmldocs`` 或 ``make pdfdocs`` 檢查
64390f915aSHu Haowen    :ref:`kernel-doc <kernel_doc>` 並修復任何問題。
65390f915aSHu Haowen
66390f915aSHu Haowen12) 通過以下選項同時啓用的測試 ``CONFIG_PREEMPT``, ``CONFIG_DEBUG_PREEMPT``,
67390f915aSHu Haowen    ``CONFIG_DEBUG_SLAB``, ``CONFIG_DEBUG_PAGEALLOC``, ``CONFIG_DEBUG_MUTEXES``,
68390f915aSHu Haowen    ``CONFIG_DEBUG_SPINLOCK``, ``CONFIG_DEBUG_ATOMIC_SLEEP``,
69390f915aSHu Haowen    ``CONFIG_PROVE_RCU`` and ``CONFIG_DEBUG_OBJECTS_RCU_HEAD``
70390f915aSHu Haowen
71390f915aSHu Haowen13) 已經過構建和運行時測試,包括有或沒有 ``CONFIG_SMP``, ``CONFIG_PREEMPT``.
72390f915aSHu Haowen
73390f915aSHu Haowen14) 如果補丁程序影響IO/磁碟等:使用或不使用 ``CONFIG_LBDAF`` 進行測試。
74390f915aSHu Haowen
75390f915aSHu Haowen15) 所有代碼路徑都已在啓用所有lockdep功能的情況下運行。
76390f915aSHu Haowen
77390f915aSHu Haowen16) 所有新的/proc條目都記錄在 ``Documentation/``
78390f915aSHu Haowen
79390f915aSHu Haowen17) 所有新的內核引導參數都記錄在
80390f915aSHu Haowen    Documentation/admin-guide/kernel-parameters.rst 中。
81390f915aSHu Haowen
82390f915aSHu Haowen18) 所有新的模塊參數都記錄在 ``MODULE_PARM_DESC()``
83390f915aSHu Haowen
84390f915aSHu Haowen19) 所有新的用戶空間接口都記錄在 ``Documentation/ABI/`` 中。有關詳細信息,
85390f915aSHu Haowen    請參閱 ``Documentation/ABI/README`` 。更改用戶空間接口的補丁應該抄送
86390f915aSHu Haowen    linux-api@vger.kernel.org。
87390f915aSHu Haowen
88390f915aSHu Haowen20) 已通過至少注入slab和page分配失敗進行檢查。請參閱 ``Documentation/fault-injection/``
89390f915aSHu Haowen    如果新代碼是實質性的,那麼添加子系統特定的故障注入可能是合適的。
90390f915aSHu Haowen
91390f915aSHu Haowen21) 新添加的代碼已經用 ``gcc -W`` 編譯(使用 ``make EXTRA-CFLAGS=-W`` )。這
92390f915aSHu Haowen    將產生大量噪聲,但對於查找諸如「警告:有符號和無符號之間的比較」之類的錯誤
93390f915aSHu Haowen    很有用。
94390f915aSHu Haowen
95390f915aSHu Haowen22) 在它被合併到-mm補丁集中之後進行測試,以確保它仍然與所有其他排隊的補丁以
96390f915aSHu Haowen    及VM、VFS和其他子系統中的各種更改一起工作。
97390f915aSHu Haowen
98390f915aSHu Haowen23) 所有內存屏障例如 ``barrier()``, ``rmb()``, ``wmb()`` 都需要原始碼中的注
99390f915aSHu Haowen    釋來解釋它們正在執行的操作及其原因的邏輯。
100390f915aSHu Haowen
101390f915aSHu Haowen24) 如果補丁添加了任何ioctl,那麼也要更新 ``Documentation/userspace-api/ioctl/ioctl-number.rst``
102390f915aSHu Haowen
103390f915aSHu Haowen25) 如果修改後的原始碼依賴或使用與以下 ``Kconfig`` 符號相關的任何內核API或
104390f915aSHu Haowen    功能,則在禁用相關 ``Kconfig`` 符號和/或 ``=m`` (如果該選項可用)的情況
105390f915aSHu Haowen    下測試以下多個構建[並非所有這些都同時存在,只是它們的各種/隨機組合]:
106390f915aSHu Haowen
107390f915aSHu Haowen    ``CONFIG_SMP``, ``CONFIG_SYSFS``, ``CONFIG_PROC_FS``, ``CONFIG_INPUT``, ``CONFIG_PCI``, ``CONFIG_BLOCK``, ``CONFIG_PM``, ``CONFIG_MAGIC_SYSRQ``,
108390f915aSHu Haowen    ``CONFIG_NET``, ``CONFIG_INET=n`` (但是後者伴隨 ``CONFIG_NET=y``).
109390f915aSHu Haowen
110