Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'docs-6.8' of git://git.lwn.net/linux

Pull documentation update from Jonathan Corbet:
"Another moderately busy cycle for documentation, including:

- The minimum Sphinx requirement has been raised to 2.4.4, following
a warning that was added in 6.2

- Some reworking of the Documentation/process front page to,
hopefully, make it more useful

- Various kernel-doc tweaks to, for example, make it deal properly
with __counted_by annotations

- We have also restored a warning for documentation of nonexistent
structure members that disappeared a while back. That had the
delightful consequence of adding some 600 warnings to the docs
build. A sustained effort by Randy, Vegard, and myself has
addressed almost all of those, bringing the documentation back into
sync with the code. The fixes are going through the appropriate
maintainer trees

- Various improvements to the HTML rendered docs, including automatic
links to Git revisions and a nice new pulldown to make translations
easy to access

- Speaking of translations, more of those for Spanish and Chinese

... plus the usual stream of documentation updates and typo fixes"

* tag 'docs-6.8' of git://git.lwn.net/linux: (57 commits)
MAINTAINERS: use tabs for indent of CONFIDENTIAL COMPUTING THREAT MODEL
A reworked process/index.rst
ring-buffer/Documentation: Add documentation on buffer_percent file
Translated the RISC-V architecture boot documentation.
Docs: remove mentions of fdformat from util-linux
Docs/zh_CN: Fix the meaning of DEBUG to pr_debug()
Documentation: move driver-api/dcdbas to userspace-api/
Documentation: move driver-api/isapnp to userspace-api/
Documentation/core-api : fix typo in workqueue
Documentation/trace: Fixed typos in the ftrace FLAGS section
kernel-doc: handle a void function without producing a warning
scripts/get_abi.pl: ignore some temp files
docs: kernel_abi.py: fix command injection
scripts/get_abi: fix source path leak
CREDITS, MAINTAINERS, docs/process/howto: Update man-pages' maintainer
docs: translations: add translations links when they exist
kernel-doc: Align quick help and the code
MAINTAINERS: add reviewer for Spanish translations
docs: ignore __counted_by attribute in structure definitions
scripts: kernel-doc: Clarify missing struct member description
..

+3215 -803
+7
CREDITS
··· 1835 1835 S: 160 00 Praha 6 1836 1836 S: Czech Republic 1837 1837 1838 + N: Michael Kerrisk 1839 + E: mtk.manpages@gmail.com 1840 + W: https://man7.org/ 1841 + P: 4096R/3A35CE5E E522 595B 52ED A4E6 BFCC CB5E 8561 9911 3A35 CE5E 1842 + D: Maintainer of the Linux man-pages project 1843 + D: Linux man pages online, at <https://man7.org/linux/man-pages/> 1844 + 1838 1845 N: Niels Kristian Bech Jensen 1839 1846 E: nkbj1970@hotmail.com 1840 1847 D: Miscellaneous kernel updates and fixes.
+1 -1
Documentation/admin-guide/abi-obsolete.rst
··· 7 7 The description of the interface will document the reason why it is 8 8 obsolete and when it can be expected to be removed. 9 9 10 - .. kernel-abi:: $srctree/Documentation/ABI/obsolete 10 + .. kernel-abi:: ABI/obsolete 11 11 :rst:
+1 -1
Documentation/admin-guide/abi-removed.rst
··· 1 1 ABI removed symbols 2 2 =================== 3 3 4 - .. kernel-abi:: $srctree/Documentation/ABI/removed 4 + .. kernel-abi:: ABI/removed 5 5 :rst:
+1 -1
Documentation/admin-guide/abi-stable.rst
··· 10 10 Most interfaces (like syscalls) are expected to never change and always 11 11 be available. 12 12 13 - .. kernel-abi:: $srctree/Documentation/ABI/stable 13 + .. kernel-abi:: ABI/stable 14 14 :rst:
+1 -1
Documentation/admin-guide/abi-testing.rst
··· 16 16 name to the description of these interfaces, so that the kernel 17 17 developers can easily notify them if any changes occur. 18 18 19 - .. kernel-abi:: $srctree/Documentation/ABI/testing 19 + .. kernel-abi:: ABI/testing 20 20 :rst:
+3 -3
Documentation/admin-guide/dynamic-debug-howto.rst
··· 321 321 :#> ddcmd 'format "nfsd: READ" +p' 322 322 323 323 // enable messages in files of which the paths include string "usb" 324 - :#> ddcmd 'file *usb* +p' > /proc/dynamic_debug/control 324 + :#> ddcmd 'file *usb* +p' 325 325 326 326 // enable all messages 327 - :#> ddcmd '+p' > /proc/dynamic_debug/control 327 + :#> ddcmd '+p' 328 328 329 329 // add module, function to all enabled messages 330 - :#> ddcmd '+mf' > /proc/dynamic_debug/control 330 + :#> ddcmd '+mf' 331 331 332 332 // boot-args example, with newlines and comments for readability 333 333 Kernel command line: ...
+11
Documentation/admin-guide/kernel-parameters.txt
··· 1 + accept_memory= [MM] 2 + Format: { eager | lazy } 3 + default: lazy 4 + By default, unaccepted memory is accepted lazily to 5 + avoid prolonged boot times. The lazy option will add 6 + some runtime overhead until all memory is eventually 7 + accepted. In most cases the overhead is negligible. 8 + For some workloads or for debugging purposes 9 + accept_memory=eager can be used to accept all memory 10 + at once during boot. 11 + 1 12 acpi= [HW,ACPI,X86,ARM64,RISCV64] 2 13 Advanced Configuration and Power Interface 3 14 Format: { force | on | off | strict | noirq | rsdt |
+1 -9
Documentation/admin-guide/media/index.rst
··· 20 20 - for driver development information and Kernel APIs used by 21 21 media devices; 22 22 23 - The media subsystem 24 - =================== 25 - 26 - .. only:: html 27 - 28 - .. class:: toc-title 29 - 30 - Table of Contents 31 - 32 23 .. toctree:: 24 + :caption: Table of Contents 33 25 :maxdepth: 2 34 26 :numbered: 35 27
+1 -1
Documentation/arch/x86/boot.rst
··· 71 71 72 72 Protocol 2.14 BURNT BY INCORRECT COMMIT 73 73 ae7e1238e68f2a472a125673ab506d49158c1889 74 - (x86/boot: Add ACPI RSDP address to setup_header) 74 + ("x86/boot: Add ACPI RSDP address to setup_header") 75 75 DO NOT USE!!! ASSUME SAME AS 2.13. 76 76 77 77 Protocol 2.15 (Kernel 5.5) Added the kernel_info and kernel_info.setup_type_max.
+2 -4
Documentation/bpf/btf.rst
··· 272 272 * ``BTF_INT_OFFSET()`` must be 0. 273 273 * ``BTF_INT_BITS()`` must be equal to ``{1,2,4,8,16} * 8``. 274 274 275 - The following kernel patch introduced ``kind_flag`` and explained why both 276 - modes exist: 277 - 278 - https://github.com/torvalds/linux/commit/9d5f9f701b1891466fb3dbb1806ad97716f95cc3#diff-fa650a64fdd3968396883d2fe8215ff3 275 + Commit 9d5f9f701b18 introduced ``kind_flag`` and explains why both modes 276 + exist. 279 277 280 278 2.2.6 BTF_KIND_ENUM 281 279 ~~~~~~~~~~~~~~~~~~~
+7 -2
Documentation/conf.py
··· 47 47 # -- General configuration ------------------------------------------------ 48 48 49 49 # If your documentation needs a minimal Sphinx version, state it here. 50 - needs_sphinx = '1.7' 50 + needs_sphinx = '2.4.4' 51 51 52 52 # Add any Sphinx extension module names here, as strings. They can be 53 53 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ··· 55 55 extensions = ['kerneldoc', 'rstFlatTable', 'kernel_include', 56 56 'kfigure', 'sphinx.ext.ifconfig', 'automarkup', 57 57 'maintainers_include', 'sphinx.ext.autosectionlabel', 58 - 'kernel_abi', 'kernel_feat'] 58 + 'kernel_abi', 'kernel_feat', 'translations'] 59 59 60 60 if major >= 3: 61 61 if (major > 3) or (minor > 0 or patch >= 2): ··· 106 106 "__weak", 107 107 "noinline", 108 108 "__fix_address", 109 + "__counted_by", 109 110 110 111 # include/linux/memblock.h: 111 112 "__init_memblock", ··· 357 356 # about.html is available for alabaster theme. Add it at the front. 358 357 if html_theme == 'alabaster': 359 358 html_sidebars['**'].insert(0, 'about.html') 359 + 360 + # The name of an image file (relative to this directory) to place at the top 361 + # of the sidebar. 362 + html_logo = 'images/logo.svg' 360 363 361 364 # Output file base name for HTML help builder. 362 365 htmlhelp_basename = 'TheLinuxKerneldoc'
+1 -1
Documentation/core-api/dma-api-howto.rst
··· 8 8 9 9 This is a guide to device driver writers on how to use the DMA API 10 10 with example pseudo-code. For a concise description of the API, see 11 - DMA-API.txt. 11 + Documentation/core-api/dma-api.rst. 12 12 13 13 CPU and DMA addresses 14 14 =====================
+1 -1
Documentation/core-api/dma-api.rst
··· 448 448 449 449 Synchronise a single contiguous or scatter/gather mapping for the CPU 450 450 and device. With the sync_sg API, all the parameters must be the same 451 - as those passed into the single mapping API. With the sync_single API, 451 + as those passed into the sg mapping API. With the sync_single API, 452 452 you can use dma_handle and size parameters that aren't identical to 453 453 those passed into the single mapping API to do a partial sync. 454 454
+1 -1
Documentation/core-api/workqueue.rst
··· 379 379 cases. This is the default affinity scope. 380 380 381 381 ``numa`` 382 - CPUs are grouped according to NUMA bounaries. 382 + CPUs are grouped according to NUMA boundaries. 383 383 384 384 ``system`` 385 385 All CPUs are put in the same group. Workqueue makes no effort to process a
+1 -4
Documentation/crypto/api.rst
··· 1 1 Programming Interface 2 2 ===================== 3 3 4 - .. class:: toc-title 5 - 6 - Table of contents 7 - 8 4 .. toctree:: 5 + :caption: Table of contents 9 6 :maxdepth: 2 10 7 11 8 api-skcipher
+1 -4
Documentation/crypto/index.rst
··· 9 9 concepts, details about developing cipher implementations, employment of the API 10 10 for cryptographic use cases, as well as programming examples. 11 11 12 - .. class:: toc-title 13 - 14 - Table of contents 15 - 16 12 .. toctree:: 13 + :caption: Table of contents 17 14 :maxdepth: 2 18 15 19 16 intro
+1 -4
Documentation/dev-tools/index.rst
··· 10 10 A brief overview of testing-specific tools can be found in 11 11 Documentation/dev-tools/testing-overview.rst 12 12 13 - .. class:: toc-title 14 - 15 - Table of contents 16 - 17 13 .. toctree:: 14 + :caption: Table of contents 18 15 :maxdepth: 2 19 16 20 17 testing-overview
+10 -1
Documentation/doc-guide/sphinx.rst
··· 28 28 ============== 29 29 30 30 The ReST markups currently used by the Documentation/ files are meant to be 31 - built with ``Sphinx`` version 1.7 or higher. 31 + built with ``Sphinx`` version 2.4.4 or higher. 32 32 33 33 There's a script that checks for the Sphinx requirements. Please see 34 34 :ref:`sphinx-pre-install` for further details. ··· 434 434 435 435 For information on cross-referencing to kernel-doc functions or types, see 436 436 Documentation/doc-guide/kernel-doc.rst. 437 + 438 + Referencing commits 439 + ~~~~~~~~~~~~~~~~~~~ 440 + 441 + References to git commits are automatically hyperlinked given that they are 442 + written in one of these formats:: 443 + 444 + commit 72bf4f1767f0 445 + commit 72bf4f1767f0 ("net: do not leave an empty skb in write queue") 437 446 438 447 .. _sphinx_kfigure: 439 448
Documentation/driver-api/dcdbas.rst Documentation/userspace-api/dcdbas.rst
+2 -6
Documentation/driver-api/index.rst
··· 9 9 of some of those interfaces — it will hopefully get better over time! The 10 10 available subsections can be seen below. 11 11 12 - .. class:: toc-title 13 - 14 - Table of contents 15 - 16 12 .. toctree:: 13 + :caption: Table of contents 17 14 :maxdepth: 2 18 15 19 16 driver-model/index ··· 78 81 backlight/lp855x-driver.rst 79 82 connector 80 83 console 81 - dcdbas 82 84 eisa 83 85 isa 84 - isapnp 85 86 io-mapping 86 87 io_ordering 87 88 generic-counter ··· 112 117 dpll 113 118 wbrf 114 119 crypto/index 120 + tee 115 121 116 122 .. only:: subproject and html 117 123
+4 -4
Documentation/driver-api/isapnp.rst Documentation/userspace-api/isapnp.rst
··· 1 - ========================================================== 2 - ISA Plug & Play support by Jaroslav Kysela <perex@suse.cz> 3 - ========================================================== 1 + ======================= 2 + ISA Plug & Play support 3 + ======================= 4 4 5 5 Interface /proc/isapnp 6 6 ====================== 7 7 8 - The interface has been removed. See pnp.txt for more details. 8 + The interface was removed in kernel 2.5.53. See pnp.rst for more details. 9 9 10 10 Interface /proc/bus/isapnp 11 11 ==========================
+1 -6
Documentation/driver-api/media/index.rst
··· 20 20 - for the userspace APIs used on media devices. 21 21 22 22 23 - .. only:: html 24 - 25 - .. class:: toc-title 26 - 27 - Table of Contents 28 - 29 23 .. toctree:: 24 + :caption: Table of Contents 30 25 :maxdepth: 5 31 26 :numbered: 32 27
+1 -6
Documentation/driver-api/mei/index.rst
··· 9 9 **Copyright** |copy| 2019 Intel Corporation 10 10 11 11 12 - .. only:: html 13 - 14 - .. class:: toc-title 15 - 16 - Table of Contents 17 - 18 12 .. toctree:: 13 + :caption: Table of Contents 19 14 :maxdepth: 3 20 15 21 16 mei
+7 -1
Documentation/driver-api/nvmem.rst
··· 41 41 nvmem configuration to nvmem_register(), on success core would return a valid 42 42 nvmem_device pointer. 43 43 44 - nvmem_unregister(nvmem) is used to unregister a previously registered provider. 44 + nvmem_unregister() is used to unregister a previously registered provider. 45 45 46 46 For example, a simple nvram case:: 47 47 ··· 200 200 Another use case for layouts is the post processing of cells. With layouts, 201 201 it is possible to associate a custom post processing hook to a cell. It 202 202 even possible to add this hook to cells not created by the layout itself. 203 + 204 + 9. Internal kernel API 205 + ====================== 206 + 207 + .. kernel-doc:: drivers/nvmem/core.c 208 + :export:
+1 -4
Documentation/driver-api/pci/index.rst
··· 4 4 The Linux PCI driver implementer's API guide 5 5 ============================================ 6 6 7 - .. class:: toc-title 8 - 9 - Table of contents 10 - 11 7 .. toctree:: 8 + :caption: Table of contents 12 9 :maxdepth: 2 13 10 14 11 pci
+66
Documentation/driver-api/tee.rst
··· 1 + .. SPDX-License-Identifier: GPL-2.0 2 + 3 + =============================================== 4 + TEE (Trusted Execution Environment) driver API 5 + =============================================== 6 + 7 + Kernel provides a TEE bus infrastructure where a Trusted Application is 8 + represented as a device identified via Universally Unique Identifier (UUID) and 9 + client drivers register a table of supported device UUIDs. 10 + 11 + TEE bus infrastructure registers following APIs: 12 + 13 + match(): 14 + iterates over the client driver UUID table to find a corresponding 15 + match for device UUID. If a match is found, then this particular device is 16 + probed via corresponding probe API registered by the client driver. This 17 + process happens whenever a device or a client driver is registered with TEE 18 + bus. 19 + 20 + uevent(): 21 + notifies user-space (udev) whenever a new device is registered on 22 + TEE bus for auto-loading of modularized client drivers. 23 + 24 + TEE bus device enumeration is specific to underlying TEE implementation, so it 25 + is left open for TEE drivers to provide corresponding implementation. 26 + 27 + Then TEE client driver can talk to a matched Trusted Application using APIs 28 + listed in include/linux/tee_drv.h. 29 + 30 + TEE client driver example 31 + ------------------------- 32 + 33 + Suppose a TEE client driver needs to communicate with a Trusted Application 34 + having UUID: ``ac6a4085-0e82-4c33-bf98-8eb8e118b6c2``, so driver registration 35 + snippet would look like:: 36 + 37 + static const struct tee_client_device_id client_id_table[] = { 38 + {UUID_INIT(0xac6a4085, 0x0e82, 0x4c33, 39 + 0xbf, 0x98, 0x8e, 0xb8, 0xe1, 0x18, 0xb6, 0xc2)}, 40 + {} 41 + }; 42 + 43 + MODULE_DEVICE_TABLE(tee, client_id_table); 44 + 45 + static struct tee_client_driver client_driver = { 46 + .id_table = client_id_table, 47 + .driver = { 48 + .name = DRIVER_NAME, 49 + .bus = &tee_bus_type, 50 + .probe = client_probe, 51 + .remove = client_remove, 52 + }, 53 + }; 54 + 55 + static int __init client_init(void) 56 + { 57 + return driver_register(&client_driver.driver); 58 + } 59 + 60 + static void __exit client_exit(void) 61 + { 62 + driver_unregister(&client_driver.driver); 63 + } 64 + 65 + module_init(client_init); 66 + module_exit(client_exit);
+1 -1
Documentation/filesystems/vfs.rst
··· 437 437 the methods that can be performed on individual inodes. 438 438 439 439 440 - struct xattr_handlers 440 + struct xattr_handler 441 441 --------------------- 442 442 443 443 On filesystems that support extended attributes (xattrs), the s_xattr
+1 -4
Documentation/input/input_kapi.rst
··· 4 4 Linux Input Subsystem kernel API 5 5 ################################ 6 6 7 - .. class:: toc-title 8 - 9 - Table of Contents 10 - 11 7 .. toctree:: 8 + :caption: Table of Contents 12 9 :maxdepth: 2 13 10 :numbered: 14 11
+1 -4
Documentation/input/input_uapi.rst
··· 4 4 Linux Input Subsystem userspace API 5 5 ################################### 6 6 7 - .. class:: toc-title 8 - 9 - Table of Contents 10 - 11 7 .. toctree:: 8 + :caption: Table of Contents 12 9 :maxdepth: 2 13 10 :numbered: 14 11
+1 -4
Documentation/input/joydev/index.rst
··· 6 6 7 7 :Copyright: |copy| 1996-2000 Vojtech Pavlik <vojtech@ucw.cz> - Sponsored by SuSE 8 8 9 - .. class:: toc-title 10 - 11 - Table of Contents 12 - 13 9 .. toctree:: 10 + :caption: Table of Contents 14 11 :maxdepth: 3 15 12 16 13 joystick
+2 -2
Documentation/livepatch/callbacks.rst
··· 110 110 ------------------ 111 111 112 112 A pre-patch callback can be useful to update a global variable. For 113 - example, 75ff39ccc1bd ("tcp: make challenge acks less predictable") 113 + example, commit 75ff39ccc1bd ("tcp: make challenge acks less predictable") 114 114 changes a global sysctl, as well as patches the tcp_send_challenge_ack() 115 115 function. 116 116 ··· 126 126 may be possible to implement similar updates via pre/post-patch 127 127 callbacks. 128 128 129 - The commit ``48900cb6af42 ("virtio-net: drop NETIF_F_FRAGLIST")`` change the way that 129 + The commit 48900cb6af42 ("virtio-net: drop NETIF_F_FRAGLIST") change the way that 130 130 virtnet_probe() initialized its driver's net_device features. A 131 131 pre/post-patch callback could iterate over all such devices, making a 132 132 similar change to their hw_features value. (Client functions of the
+1 -4
Documentation/misc-devices/index.rst
··· 7 7 This documentation contains information for assorted devices that do not 8 8 fit into other categories. 9 9 10 - .. class:: toc-title 11 - 12 - Table of contents 13 - 14 10 .. toctree:: 11 + :caption: Table of contents 15 12 :maxdepth: 2 16 13 17 14 ad525x_dpot
+6 -10
Documentation/networking/snmp_counter.rst
··· 313 313 314 314 * TcpExtTCPOrigDataSent 315 315 316 - This counter is explained by `kernel commit f19c29e3e391`_, I pasted the 316 + This counter is explained by kernel commit f19c29e3e391, I pasted the 317 317 explanation below:: 318 318 319 319 TCPOrigDataSent: number of outgoing packets with original data (excluding ··· 323 323 324 324 * TCPSynRetrans 325 325 326 - This counter is explained by `kernel commit f19c29e3e391`_, I pasted the 326 + This counter is explained by kernel commit f19c29e3e391, I pasted the 327 327 explanation below:: 328 328 329 329 TCPSynRetrans: number of SYN and SYN/ACK retransmits to break down ··· 331 331 332 332 * TCPFastOpenActiveFail 333 333 334 - This counter is explained by `kernel commit f19c29e3e391`_, I pasted the 334 + This counter is explained by kernel commit f19c29e3e391, I pasted the 335 335 explanation below:: 336 336 337 337 TCPFastOpenActiveFail: Fast Open attempts (SYN/data) failed because 338 338 the remote does not accept it or the attempts timed out. 339 - 340 - .. _kernel commit f19c29e3e391: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f19c29e3e391a66a273e9afebaf01917245148cd 341 339 342 340 * TcpExtListenOverflows and TcpExtListenDrops 343 341 ··· 696 698 of the function tcp_is_sackblock_valid in the kernel source code. A 697 699 SACK option could have up to 4 blocks, they are checked 698 700 individually. E.g., if 3 blocks of a SACk is invalid, the 699 - corresponding counter would be updated 3 times. The comment of the 700 - `Add counters for discarded SACK blocks`_ patch has additional 701 - explanation: 702 - 703 - .. _Add counters for discarded SACK blocks: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=18f02545a9a16c9a89778b91a162ad16d510bb32 701 + corresponding counter would be updated 3 times. The comment of commit 702 + 18f02545a9a1 ("[TCP] MIB: Add counters for discarded SACK blocks") 703 + has additional explanation: 704 704 705 705 * TcpExtTCPSACKDiscard 706 706
+3 -3
Documentation/process/changes.rst
··· 39 39 flex 2.5.35 flex --version 40 40 bison 2.0 bison --version 41 41 pahole 1.16 pahole --version 42 - util-linux 2.10o fdformat --version 42 + util-linux 2.10o mount --version 43 43 kmod 13 depmod -V 44 44 e2fsprogs 1.41.4 e2fsck -V 45 45 jfsutils 1.1.3 fsck.jfs -V ··· 58 58 iptables 1.4.2 iptables -V 59 59 openssl & libcrypto 1.0.0 openssl version 60 60 bc 1.06.95 bc --version 61 - Sphinx\ [#f1]_ 1.7 sphinx-build --version 61 + Sphinx\ [#f1]_ 2.4.4 sphinx-build --version 62 62 cpio any cpio --version 63 63 GNU tar 1.28 tar --version 64 64 gtags (optional) 6.6.5 gtags --version ··· 213 213 214 214 New versions of util-linux provide ``fdisk`` support for larger disks, 215 215 support new options to mount, recognize more supported partition 216 - types, have a fdformat which works with 2.4 kernels, and similar goodies. 216 + types, and similar goodies. 217 217 You'll probably want to upgrade. 218 218 219 219 Ksymoops
+9 -10
Documentation/process/development-process.rst
··· 3 3 A guide to the Kernel Development Process 4 4 ========================================= 5 5 6 - Contents: 6 + The purpose of this document is to help developers (and their managers) 7 + work with the development community with a minimum of frustration. It is 8 + an attempt to document how this community works in a way which is 9 + accessible to those who are not intimately familiar with Linux kernel 10 + development (or, indeed, free software development in general). While 11 + there is some technical material here, this is very much a process-oriented 12 + discussion which does not require a deep knowledge of kernel programming to 13 + understand. 7 14 8 15 .. toctree:: 16 + :caption: Contents 9 17 :numbered: 10 18 :maxdepth: 2 11 19 ··· 25 17 6.Followthrough 26 18 7.AdvancedTopics 27 19 8.Conclusion 28 - 29 - The purpose of this document is to help developers (and their managers) 30 - work with the development community with a minimum of frustration. It is 31 - an attempt to document how this community works in a way which is 32 - accessible to those who are not intimately familiar with Linux kernel 33 - development (or, indeed, free software development in general). While 34 - there is some technical material here, this is very much a process-oriented 35 - discussion which does not require a deep knowledge of kernel programming to 36 - understand.
+1 -2
Documentation/process/howto.rst
··· 82 82 When a kernel change causes the interface that the kernel exposes to 83 83 userspace to change, it is recommended that you send the information or 84 84 a patch to the manual pages explaining the change to the manual pages 85 - maintainer at mtk.manpages@gmail.com, and CC the list 86 - linux-api@vger.kernel.org. 85 + maintainer at alx@kernel.org, and CC the list linux-api@vger.kernel.org. 87 86 88 87 Here is a list of files that are in the kernel source tree that are 89 88 required reading:
+72 -30
Documentation/process/index.rst
··· 15 15 it much easier for you to get your changes merged with a minimum of 16 16 trouble. 17 17 18 - Below are the essential guides that every developer should read. 18 + An introduction to how kernel development works 19 + ----------------------------------------------- 20 + 21 + Read these documents first: an understanding of the material here will ease 22 + your entry into the kernel community. 19 23 20 24 .. toctree:: 21 25 :maxdepth: 1 22 26 23 - license-rules 24 27 howto 25 - code-of-conduct 26 - code-of-conduct-interpretation 27 28 development-process 28 29 submitting-patches 29 - handling-regressions 30 - programming-language 31 - coding-style 32 - maintainer-handbooks 33 - maintainer-pgp-guide 34 - email-clients 35 - kernel-enforcement-statement 36 - kernel-driver-statement 30 + submit-checklist 37 31 38 - For security issues, see: 32 + Tools and technical guides for kernel developers 33 + ------------------------------------------------ 39 34 40 - .. toctree:: 41 - :maxdepth: 1 42 - 43 - security-bugs 44 - embargoed-hardware-issues 45 - 46 - Other guides to the community that are of interest to most developers are: 35 + This is a collection of material that kernel developers should be familiar 36 + with. 47 37 48 38 .. toctree:: 49 39 :maxdepth: 1 50 40 51 41 changes 42 + programming-language 43 + coding-style 44 + maintainer-pgp-guide 45 + email-clients 46 + applying-patches 47 + backporting 48 + adding-syscalls 49 + volatile-considered-harmful 50 + botching-up-ioctls 51 + 52 + Policy guides and developer statements 53 + -------------------------------------- 54 + 55 + These are the rules that we try to live by in the kernel community (and 56 + beyond). 57 + 58 + .. toctree:: 59 + :maxdepth: 1 60 + 61 + license-rules 62 + code-of-conduct 63 + code-of-conduct-interpretation 64 + contribution-maturity-model 65 + kernel-enforcement-statement 66 + kernel-driver-statement 52 67 stable-api-nonsense 53 - management-style 54 68 stable-kernel-rules 55 - submit-checklist 69 + management-style 70 + researcher-guidelines 71 + 72 + Dealing with bugs 73 + ----------------- 74 + 75 + Bugs are a fact of life; it is important that we handle them properly. 76 + The documents below describe our policies around the handling of a couple 77 + of special classes of bugs: regressions and security problems. 78 + 79 + .. toctree:: 80 + :maxdepth: 1 81 + 82 + handling-regressions 83 + security-bugs 84 + embargoed-hardware-issues 85 + 86 + Maintainer information 87 + ---------------------- 88 + 89 + How to find the people who will accept your patches. 90 + 91 + .. toctree:: 92 + :maxdepth: 1 93 + 94 + maintainer-handbooks 95 + maintainers 96 + 97 + Other material 98 + -------------- 99 + 100 + Here are some other guides to the community that are of interest to most 101 + developers: 102 + 103 + .. toctree:: 104 + :maxdepth: 1 105 + 56 106 kernel-docs 57 107 deprecated 58 - maintainers 59 - researcher-guidelines 60 - contribution-maturity-model 61 108 62 109 These are some overall technical guides that have been put here for now for 63 110 lack of a better place. ··· 112 65 .. toctree:: 113 66 :maxdepth: 1 114 67 115 - applying-patches 116 - backporting 117 - adding-syscalls 118 68 magic-number 119 - volatile-considered-harmful 120 - botching-up-ioctls 121 69 clang-format 122 70 ../arch/riscv/patch-acceptance 123 71 ../core-api/unaligned-memory-access
+11 -4
Documentation/process/submitting-patches.rst
··· 790 790 ------------------------------- 791 791 792 792 When other developers receive your patches and start the review process, 793 - it is often useful for them to know where in the tree history they 794 - should place your work. This is particularly useful for automated CI 795 - processes that attempt to run a series of tests in order to establish 796 - the quality of your submission before the maintainer starts the review. 793 + it is absolutely necessary for them to know what is the base 794 + commit/branch your work applies on, considering the sheer amount of 795 + maintainer trees present nowadays. Note again the **T:** entry in the 796 + MAINTAINERS file explained above. 797 + 798 + This is even more important for automated CI processes that attempt to 799 + run a series of tests in order to establish the quality of your 800 + submission before the maintainer starts the review. 797 801 798 802 If you are using ``git format-patch`` to generate your patches, you can 799 803 automatically include the base tree information in your submission by ··· 840 836 either below the ``---`` line or at the very bottom of all other 841 837 content, right before your email signature. 842 838 839 + Make sure that base commit is in an official maintainer/mainline tree 840 + and not in some internal, accessible only to you tree - otherwise it 841 + would be worthless. 843 842 844 843 References 845 844 ----------
+1 -1
Documentation/security/keys/trusted-encrypted.rst
··· 88 88 (2) TEE 89 89 90 90 TEEs have well-documented, standardized client interface and APIs. For 91 - more details refer to ``Documentation/staging/tee.rst``. 91 + more details refer to ``Documentation/driver-api/tee.rst``. 92 92 93 93 (3) CAAM 94 94
+63
Documentation/sphinx-static/custom.css
··· 7 7 div.body h1 { font-size: 180%; } 8 8 div.body h2 { font-size: 150%; } 9 9 div.body h3 { font-size: 130%; } 10 + div.body h4 { font-size: 110%; } 11 + 12 + /* toctree captions are styled like h2 */ 13 + div.toctree-wrapper p.caption[role=heading] { font-size: 150%; } 10 14 11 15 /* Tighten up the layout slightly */ 12 16 div.body { padding: 0 15px 0 10px; } ··· 22 18 div.document { 23 19 margin: 20px 10px 0 10px; 24 20 width: auto; 21 + } 22 + 23 + /* Size the logo appropriately */ 24 + img.logo { 25 + width: 104px; 26 + margin-bottom: 20px; 25 27 } 26 28 27 29 /* ··· 82 72 } 83 73 h3.kernel-toc-contents { display: inline; } 84 74 div.kerneltoc a { color: black; } 75 + } 76 + 77 + /* Language selection menu */ 78 + 79 + div.admonition { 80 + /* 81 + * Make sure we don't overlap notes and warnings at the top of the 82 + * document. 83 + */ 84 + clear: both; 85 + } 86 + 87 + div.language-selection { 88 + background: #eeeeee; 89 + border: 1px solid #cccccc; 90 + margin-bottom: 1em; 91 + padding: .5em; 92 + 93 + position: relative; 94 + float: right; 95 + } 96 + 97 + div.language-selection a { 98 + display: block; 99 + padding: 0.5em; 100 + color: #333333; 101 + text-decoration: none; 102 + } 103 + 104 + div.language-selection ul { 105 + display: none; 106 + position: absolute; 107 + 108 + /* Align with the parent div */ 109 + top: 100%; 110 + right: 0; 111 + margin: 0; 112 + 113 + list-style: none; 114 + 115 + background: #fafafa; 116 + border: 1px solid #cccccc; 117 + 118 + /* Never break menu item lines */ 119 + white-space: nowrap; 120 + } 121 + 122 + div.language-selection:hover ul { 123 + display: block; 124 + } 125 + 126 + div.language-selection ul li:hover { 127 + background: #dddddd; 85 128 }
-5
Documentation/sphinx-static/theme_overrides.css
··· 81 81 * - hide the permalink symbol as long as link is not hovered 82 82 */ 83 83 84 - .toc-title { 85 - font-size: 150%; 86 - font-weight: bold; 87 - } 88 - 89 84 caption, .wy-table caption, .rst-content table.field-list caption { 90 85 font-size: 100%; 91 86 }
+20 -6
Documentation/sphinx/automarkup.py
··· 7 7 from docutils import nodes 8 8 import sphinx 9 9 from sphinx import addnodes 10 - if sphinx.version_info[0] < 2 or \ 11 - sphinx.version_info[0] == 2 and sphinx.version_info[1] < 1: 12 - from sphinx.environment import NoUri 13 - else: 14 - from sphinx.errors import NoUri 10 + from sphinx.errors import NoUri 15 11 import re 16 12 from itertools import chain 17 13 ··· 70 74 71 75 c_namespace = '' 72 76 77 + # 78 + # Detect references to commits. 79 + # 80 + RE_git = re.compile(r'commit\s+(?P<rev>[0-9a-f]{12,40})(?:\s+\(".*?"\))?', 81 + flags=re.IGNORECASE | re.DOTALL) 82 + 73 83 def markup_refs(docname, app, node): 74 84 t = node.astext() 75 85 done = 0 ··· 92 90 RE_struct: markup_c_ref, 93 91 RE_union: markup_c_ref, 94 92 RE_enum: markup_c_ref, 95 - RE_typedef: markup_c_ref} 93 + RE_typedef: markup_c_ref, 94 + RE_git: markup_git} 96 95 97 96 if sphinx.version_info[0] >= 3: 98 97 markup_func = markup_func_sphinx3 ··· 278 275 if match: 279 276 return match.group(1) 280 277 return '' 278 + 279 + def markup_git(docname, app, match): 280 + # While we could probably assume that we are running in a git 281 + # repository, we can't know for sure, so let's just mechanically 282 + # turn them into git.kernel.org links without checking their 283 + # validity. (Maybe we can do something in the future to warn about 284 + # these references if this is explicitly requested.) 285 + text = match.group(0) 286 + rev = match.group('rev') 287 + return nodes.reference('', nodes.Text(text), 288 + refuri=f'https://git.kernel.org/torvalds/c/{rev}') 281 289 282 290 def auto_markup(app, doctree, name): 283 291 global c_namespace
+1 -5
Documentation/sphinx/cdomain.py
··· 127 127 128 128 # Handle easy Sphinx 3.1+ simple new tags: :c:expr and .. c:namespace:: 129 129 app.connect('source-read', c_markups) 130 - 131 - if (major == 1 and minor < 8): 132 - app.override_domain(CDomain) 133 - else: 134 - app.add_domain(CDomain, override=True) 130 + app.add_domain(CDomain, override=True) 135 131 136 132 return dict( 137 133 version = __version__,
+10 -46
Documentation/sphinx/kernel_abi.py
··· 39 39 import re 40 40 import kernellog 41 41 42 - from os import path 43 - 44 42 from docutils import nodes, statemachine 45 43 from docutils.statemachine import ViewList 46 44 from docutils.parsers.rst import directives, Directive ··· 71 73 } 72 74 73 75 def run(self): 74 - 75 76 doc = self.state.document 76 77 if not doc.settings.file_insertion_enabled: 77 78 raise self.warning("docutils: file insertion disabled") 78 79 79 - env = doc.settings.env 80 - cwd = path.dirname(doc.current_source) 81 - cmd = "get_abi.pl rest --enable-lineno --dir " 82 - cmd += self.arguments[0] 80 + srctree = os.path.abspath(os.environ["srctree"]) 81 + 82 + args = [ 83 + os.path.join(srctree, 'scripts/get_abi.pl'), 84 + 'rest', 85 + '--enable-lineno', 86 + '--dir', os.path.join(srctree, 'Documentation', self.arguments[0]), 87 + ] 83 88 84 89 if 'rst' in self.options: 85 - cmd += " --rst-source" 90 + args.append('--rst-source') 86 91 87 - srctree = path.abspath(os.environ["srctree"]) 88 - 89 - fname = cmd 90 - 91 - # extend PATH with $(srctree)/scripts 92 - path_env = os.pathsep.join([ 93 - srctree + os.sep + "scripts", 94 - os.environ["PATH"] 95 - ]) 96 - shell_env = os.environ.copy() 97 - shell_env["PATH"] = path_env 98 - shell_env["srctree"] = srctree 99 - 100 - lines = self.runCmd(cmd, shell=True, cwd=cwd, env=shell_env) 92 + lines = subprocess.check_output(args, cwd=os.path.dirname(doc.current_source)).decode('utf-8') 101 93 nodeList = self.nestedParse(lines, self.arguments[0]) 102 94 return nodeList 103 - 104 - def runCmd(self, cmd, **kwargs): 105 - u"""Run command ``cmd`` and return its stdout as unicode.""" 106 - 107 - try: 108 - proc = subprocess.Popen( 109 - cmd 110 - , stdout = subprocess.PIPE 111 - , stderr = subprocess.PIPE 112 - , **kwargs 113 - ) 114 - out, err = proc.communicate() 115 - 116 - out, err = codecs.decode(out, 'utf-8'), codecs.decode(err, 'utf-8') 117 - 118 - if proc.returncode != 0: 119 - raise self.severe( 120 - u"command '%s' failed with return code %d" 121 - % (cmd, proc.returncode) 122 - ) 123 - except OSError as exc: 124 - raise self.severe(u"problems with '%s' directive: %s." 125 - % (self.name, ErrorString(exc))) 126 - return out 127 95 128 96 def nestedParse(self, lines, fname): 129 97 env = self.state.document.settings.env
+1 -7
Documentation/sphinx/kfigure.py
··· 61 61 from sphinx.util.nodes import clean_astext 62 62 import kernellog 63 63 64 - # Get Sphinx version 65 - major, minor, patch = sphinx.version_info[:3] 66 - if major == 1 and minor > 3: 67 - # patches.Figure only landed in Sphinx 1.4 68 - from sphinx.directives.patches import Figure # pylint: disable=C0413 69 - else: 70 - Figure = images.Figure 64 + Figure = images.Figure 71 65 72 66 __version__ = '1.0.0' 73 67
+15
Documentation/sphinx/templates/translations.html
··· 1 + <!-- SPDX-License-Identifier: GPL-2.0 --> 2 + <!-- Copyright © 2023, Oracle and/or its affiliates. --> 3 + 4 + {# Create a language menu for translations #} 5 + {% if languages|length > 0: %} 6 + <div class="language-selection"> 7 + {{ current_language }} 8 + 9 + <ul> 10 + {% for ref in languages: %} 11 + <li><a href="{{ ref.refuri }}">{{ ref.astext() }}</a></li> 12 + {% endfor %} 13 + </ul> 14 + </div> 15 + {% endif %}
+101
Documentation/sphinx/translations.py
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + # 3 + # Copyright © 2023, Oracle and/or its affiliates. 4 + # Author: Vegard Nossum <vegard.nossum@oracle.com> 5 + # 6 + # Add translation links to the top of the document. 7 + # 8 + 9 + import os 10 + 11 + from docutils import nodes 12 + from docutils.transforms import Transform 13 + 14 + import sphinx 15 + from sphinx import addnodes 16 + from sphinx.errors import NoUri 17 + 18 + all_languages = { 19 + # English is always first 20 + None: 'English', 21 + 22 + # Keep the rest sorted alphabetically 23 + 'zh_CN': 'Chinese (Simplified)', 24 + 'zh_TW': 'Chinese (Traditional)', 25 + 'it_IT': 'Italian', 26 + 'ja_JP': 'Japanese', 27 + 'ko_KR': 'Korean', 28 + 'sp_SP': 'Spanish', 29 + } 30 + 31 + class LanguagesNode(nodes.Element): 32 + def __init__(self, current_language, *args, **kwargs): 33 + super().__init__(*args, **kwargs) 34 + 35 + self.current_language = current_language 36 + 37 + class TranslationsTransform(Transform): 38 + default_priority = 900 39 + 40 + def apply(self): 41 + app = self.document.settings.env.app 42 + docname = self.document.settings.env.docname 43 + 44 + this_lang_code = None 45 + components = docname.split(os.sep) 46 + if components[0] == 'translations' and len(components) > 2: 47 + this_lang_code = components[1] 48 + 49 + # normalize docname to be the untranslated one 50 + docname = os.path.join(*components[2:]) 51 + 52 + new_nodes = LanguagesNode(all_languages[this_lang_code]) 53 + 54 + for lang_code, lang_name in all_languages.items(): 55 + if lang_code == this_lang_code: 56 + continue 57 + 58 + if lang_code is None: 59 + target_name = docname 60 + else: 61 + target_name = os.path.join('translations', lang_code, docname) 62 + 63 + pxref = addnodes.pending_xref('', refdomain='std', 64 + reftype='doc', reftarget='/' + target_name, modname=None, 65 + classname=None, refexplicit=True) 66 + pxref += nodes.Text(lang_name) 67 + new_nodes += pxref 68 + 69 + self.document.insert(0, new_nodes) 70 + 71 + def process_languages(app, doctree, docname): 72 + for node in doctree.traverse(LanguagesNode): 73 + if app.builder.format not in ['html']: 74 + node.parent.remove(node) 75 + continue 76 + 77 + languages = [] 78 + 79 + # Iterate over the child nodes; any resolved links will have 80 + # the type 'nodes.reference', while unresolved links will be 81 + # type 'nodes.Text'. 82 + languages = list(filter(lambda xref: 83 + isinstance(xref, nodes.reference), node.children)) 84 + 85 + html_content = app.builder.templates.render('translations.html', 86 + context={ 87 + 'current_language': node.current_language, 88 + 'languages': languages, 89 + }) 90 + 91 + node.replace_self(nodes.raw('', html_content, format='html')) 92 + 93 + def setup(app): 94 + app.add_node(LanguagesNode) 95 + app.add_transform(TranslationsTransform) 96 + app.connect('doctree-resolved', process_languages) 97 + 98 + return { 99 + 'parallel_read_safe': True, 100 + 'parallel_write_safe': True, 101 + }
-1
Documentation/staging/index.rst
··· 12 12 rpmsg 13 13 speculation 14 14 static-keys 15 - tee 16 15 xz
-364
Documentation/staging/tee.rst
··· 1 - ============= 2 - TEE subsystem 3 - ============= 4 - 5 - This document describes the TEE subsystem in Linux. 6 - 7 - A TEE (Trusted Execution Environment) is a trusted OS running in some 8 - secure environment, for example, TrustZone on ARM CPUs, or a separate 9 - secure co-processor etc. A TEE driver handles the details needed to 10 - communicate with the TEE. 11 - 12 - This subsystem deals with: 13 - 14 - - Registration of TEE drivers 15 - 16 - - Managing shared memory between Linux and the TEE 17 - 18 - - Providing a generic API to the TEE 19 - 20 - The TEE interface 21 - ================= 22 - 23 - include/uapi/linux/tee.h defines the generic interface to a TEE. 24 - 25 - User space (the client) connects to the driver by opening /dev/tee[0-9]* or 26 - /dev/teepriv[0-9]*. 27 - 28 - - TEE_IOC_SHM_ALLOC allocates shared memory and returns a file descriptor 29 - which user space can mmap. When user space doesn't need the file 30 - descriptor any more, it should be closed. When shared memory isn't needed 31 - any longer it should be unmapped with munmap() to allow the reuse of 32 - memory. 33 - 34 - - TEE_IOC_VERSION lets user space know which TEE this driver handles and 35 - its capabilities. 36 - 37 - - TEE_IOC_OPEN_SESSION opens a new session to a Trusted Application. 38 - 39 - - TEE_IOC_INVOKE invokes a function in a Trusted Application. 40 - 41 - - TEE_IOC_CANCEL may cancel an ongoing TEE_IOC_OPEN_SESSION or TEE_IOC_INVOKE. 42 - 43 - - TEE_IOC_CLOSE_SESSION closes a session to a Trusted Application. 44 - 45 - There are two classes of clients, normal clients and supplicants. The latter is 46 - a helper process for the TEE to access resources in Linux, for example file 47 - system access. A normal client opens /dev/tee[0-9]* and a supplicant opens 48 - /dev/teepriv[0-9]. 49 - 50 - Much of the communication between clients and the TEE is opaque to the 51 - driver. The main job for the driver is to receive requests from the 52 - clients, forward them to the TEE and send back the results. In the case of 53 - supplicants the communication goes in the other direction, the TEE sends 54 - requests to the supplicant which then sends back the result. 55 - 56 - The TEE kernel interface 57 - ======================== 58 - 59 - Kernel provides a TEE bus infrastructure where a Trusted Application is 60 - represented as a device identified via Universally Unique Identifier (UUID) and 61 - client drivers register a table of supported device UUIDs. 62 - 63 - TEE bus infrastructure registers following APIs: 64 - 65 - match(): 66 - iterates over the client driver UUID table to find a corresponding 67 - match for device UUID. If a match is found, then this particular device is 68 - probed via corresponding probe API registered by the client driver. This 69 - process happens whenever a device or a client driver is registered with TEE 70 - bus. 71 - 72 - uevent(): 73 - notifies user-space (udev) whenever a new device is registered on 74 - TEE bus for auto-loading of modularized client drivers. 75 - 76 - TEE bus device enumeration is specific to underlying TEE implementation, so it 77 - is left open for TEE drivers to provide corresponding implementation. 78 - 79 - Then TEE client driver can talk to a matched Trusted Application using APIs 80 - listed in include/linux/tee_drv.h. 81 - 82 - TEE client driver example 83 - ------------------------- 84 - 85 - Suppose a TEE client driver needs to communicate with a Trusted Application 86 - having UUID: ``ac6a4085-0e82-4c33-bf98-8eb8e118b6c2``, so driver registration 87 - snippet would look like:: 88 - 89 - static const struct tee_client_device_id client_id_table[] = { 90 - {UUID_INIT(0xac6a4085, 0x0e82, 0x4c33, 91 - 0xbf, 0x98, 0x8e, 0xb8, 0xe1, 0x18, 0xb6, 0xc2)}, 92 - {} 93 - }; 94 - 95 - MODULE_DEVICE_TABLE(tee, client_id_table); 96 - 97 - static struct tee_client_driver client_driver = { 98 - .id_table = client_id_table, 99 - .driver = { 100 - .name = DRIVER_NAME, 101 - .bus = &tee_bus_type, 102 - .probe = client_probe, 103 - .remove = client_remove, 104 - }, 105 - }; 106 - 107 - static int __init client_init(void) 108 - { 109 - return driver_register(&client_driver.driver); 110 - } 111 - 112 - static void __exit client_exit(void) 113 - { 114 - driver_unregister(&client_driver.driver); 115 - } 116 - 117 - module_init(client_init); 118 - module_exit(client_exit); 119 - 120 - OP-TEE driver 121 - ============= 122 - 123 - The OP-TEE driver handles OP-TEE [1] based TEEs. Currently it is only the ARM 124 - TrustZone based OP-TEE solution that is supported. 125 - 126 - Lowest level of communication with OP-TEE builds on ARM SMC Calling 127 - Convention (SMCCC) [2], which is the foundation for OP-TEE's SMC interface 128 - [3] used internally by the driver. Stacked on top of that is OP-TEE Message 129 - Protocol [4]. 130 - 131 - OP-TEE SMC interface provides the basic functions required by SMCCC and some 132 - additional functions specific for OP-TEE. The most interesting functions are: 133 - 134 - - OPTEE_SMC_FUNCID_CALLS_UID (part of SMCCC) returns the version information 135 - which is then returned by TEE_IOC_VERSION 136 - 137 - - OPTEE_SMC_CALL_GET_OS_UUID returns the particular OP-TEE implementation, used 138 - to tell, for instance, a TrustZone OP-TEE apart from an OP-TEE running on a 139 - separate secure co-processor. 140 - 141 - - OPTEE_SMC_CALL_WITH_ARG drives the OP-TEE message protocol 142 - 143 - - OPTEE_SMC_GET_SHM_CONFIG lets the driver and OP-TEE agree on which memory 144 - range to used for shared memory between Linux and OP-TEE. 145 - 146 - The GlobalPlatform TEE Client API [5] is implemented on top of the generic 147 - TEE API. 148 - 149 - Picture of the relationship between the different components in the 150 - OP-TEE architecture:: 151 - 152 - User space Kernel Secure world 153 - ~~~~~~~~~~ ~~~~~~ ~~~~~~~~~~~~ 154 - +--------+ +-------------+ 155 - | Client | | Trusted | 156 - +--------+ | Application | 157 - /\ +-------------+ 158 - || +----------+ /\ 159 - || |tee- | || 160 - || |supplicant| \/ 161 - || +----------+ +-------------+ 162 - \/ /\ | TEE Internal| 163 - +-------+ || | API | 164 - + TEE | || +--------+--------+ +-------------+ 165 - | Client| || | TEE | OP-TEE | | OP-TEE | 166 - | API | \/ | subsys | driver | | Trusted OS | 167 - +-------+----------------+----+-------+----+-----------+-------------+ 168 - | Generic TEE API | | OP-TEE MSG | 169 - | IOCTL (TEE_IOC_*) | | SMCCC (OPTEE_SMC_CALL_*) | 170 - +-----------------------------+ +------------------------------+ 171 - 172 - RPC (Remote Procedure Call) are requests from secure world to kernel driver 173 - or tee-supplicant. An RPC is identified by a special range of SMCCC return 174 - values from OPTEE_SMC_CALL_WITH_ARG. RPC messages which are intended for the 175 - kernel are handled by the kernel driver. Other RPC messages will be forwarded to 176 - tee-supplicant without further involvement of the driver, except switching 177 - shared memory buffer representation. 178 - 179 - OP-TEE device enumeration 180 - ------------------------- 181 - 182 - OP-TEE provides a pseudo Trusted Application: drivers/tee/optee/device.c in 183 - order to support device enumeration. In other words, OP-TEE driver invokes this 184 - application to retrieve a list of Trusted Applications which can be registered 185 - as devices on the TEE bus. 186 - 187 - OP-TEE notifications 188 - -------------------- 189 - 190 - There are two kinds of notifications that secure world can use to make 191 - normal world aware of some event. 192 - 193 - 1. Synchronous notifications delivered with ``OPTEE_RPC_CMD_NOTIFICATION`` 194 - using the ``OPTEE_RPC_NOTIFICATION_SEND`` parameter. 195 - 2. Asynchronous notifications delivered with a combination of a non-secure 196 - edge-triggered interrupt and a fast call from the non-secure interrupt 197 - handler. 198 - 199 - Synchronous notifications are limited by depending on RPC for delivery, 200 - this is only usable when secure world is entered with a yielding call via 201 - ``OPTEE_SMC_CALL_WITH_ARG``. This excludes such notifications from secure 202 - world interrupt handlers. 203 - 204 - An asynchronous notification is delivered via a non-secure edge-triggered 205 - interrupt to an interrupt handler registered in the OP-TEE driver. The 206 - actual notification value are retrieved with the fast call 207 - ``OPTEE_SMC_GET_ASYNC_NOTIF_VALUE``. Note that one interrupt can represent 208 - multiple notifications. 209 - 210 - One notification value ``OPTEE_SMC_ASYNC_NOTIF_VALUE_DO_BOTTOM_HALF`` has a 211 - special meaning. When this value is received it means that normal world is 212 - supposed to make a yielding call ``OPTEE_MSG_CMD_DO_BOTTOM_HALF``. This 213 - call is done from the thread assisting the interrupt handler. This is a 214 - building block for OP-TEE OS in secure world to implement the top half and 215 - bottom half style of device drivers. 216 - 217 - OPTEE_INSECURE_LOAD_IMAGE Kconfig option 218 - ---------------------------------------- 219 - 220 - The OPTEE_INSECURE_LOAD_IMAGE Kconfig option enables the ability to load the 221 - BL32 OP-TEE image from the kernel after the kernel boots, rather than loading 222 - it from the firmware before the kernel boots. This also requires enabling the 223 - corresponding option in Trusted Firmware for Arm. The Trusted Firmware for Arm 224 - documentation [8] explains the security threat associated with enabling this as 225 - well as mitigations at the firmware and platform level. 226 - 227 - There are additional attack vectors/mitigations for the kernel that should be 228 - addressed when using this option. 229 - 230 - 1. Boot chain security. 231 - 232 - * Attack vector: Replace the OP-TEE OS image in the rootfs to gain control of 233 - the system. 234 - 235 - * Mitigation: There must be boot chain security that verifies the kernel and 236 - rootfs, otherwise an attacker can modify the loaded OP-TEE binary by 237 - modifying it in the rootfs. 238 - 239 - 2. Alternate boot modes. 240 - 241 - * Attack vector: Using an alternate boot mode (i.e. recovery mode), the 242 - OP-TEE driver isn't loaded, leaving the SMC hole open. 243 - 244 - * Mitigation: If there are alternate methods of booting the device, such as a 245 - recovery mode, it should be ensured that the same mitigations are applied 246 - in that mode. 247 - 248 - 3. Attacks prior to SMC invocation. 249 - 250 - * Attack vector: Code that is executed prior to issuing the SMC call to load 251 - OP-TEE can be exploited to then load an alternate OS image. 252 - 253 - * Mitigation: The OP-TEE driver must be loaded before any potential attack 254 - vectors are opened up. This should include mounting of any modifiable 255 - filesystems, opening of network ports or communicating with external 256 - devices (e.g. USB). 257 - 258 - 4. Blocking SMC call to load OP-TEE. 259 - 260 - * Attack vector: Prevent the driver from being probed, so the SMC call to 261 - load OP-TEE isn't executed when desired, leaving it open to being executed 262 - later and loading a modified OS. 263 - 264 - * Mitigation: It is recommended to build the OP-TEE driver as builtin driver 265 - rather than as a module to prevent exploits that may cause the module to 266 - not be loaded. 267 - 268 - AMD-TEE driver 269 - ============== 270 - 271 - The AMD-TEE driver handles the communication with AMD's TEE environment. The 272 - TEE environment is provided by AMD Secure Processor. 273 - 274 - The AMD Secure Processor (formerly called Platform Security Processor or PSP) 275 - is a dedicated processor that features ARM TrustZone technology, along with a 276 - software-based Trusted Execution Environment (TEE) designed to enable 277 - third-party Trusted Applications. This feature is currently enabled only for 278 - APUs. 279 - 280 - The following picture shows a high level overview of AMD-TEE:: 281 - 282 - | 283 - x86 | 284 - | 285 - User space (Kernel space) | AMD Secure Processor (PSP) 286 - ~~~~~~~~~~ ~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~~~~~~~~~ 287 - | 288 - +--------+ | +-------------+ 289 - | Client | | | Trusted | 290 - +--------+ | | Application | 291 - /\ | +-------------+ 292 - || | /\ 293 - || | || 294 - || | \/ 295 - || | +----------+ 296 - || | | TEE | 297 - || | | Internal | 298 - \/ | | API | 299 - +---------+ +-----------+---------+ +----------+ 300 - | TEE | | TEE | AMD-TEE | | AMD-TEE | 301 - | Client | | subsystem | driver | | Trusted | 302 - | API | | | | | OS | 303 - +---------+-----------+----+------+---------+---------+----------+ 304 - | Generic TEE API | | ASP | Mailbox | 305 - | IOCTL (TEE_IOC_*) | | driver | Register Protocol | 306 - +--------------------------+ +---------+--------------------+ 307 - 308 - At the lowest level (in x86), the AMD Secure Processor (ASP) driver uses the 309 - CPU to PSP mailbox register to submit commands to the PSP. The format of the 310 - command buffer is opaque to the ASP driver. It's role is to submit commands to 311 - the secure processor and return results to AMD-TEE driver. The interface 312 - between AMD-TEE driver and AMD Secure Processor driver can be found in [6]. 313 - 314 - The AMD-TEE driver packages the command buffer payload for processing in TEE. 315 - The command buffer format for the different TEE commands can be found in [7]. 316 - 317 - The TEE commands supported by AMD-TEE Trusted OS are: 318 - 319 - * TEE_CMD_ID_LOAD_TA - loads a Trusted Application (TA) binary into 320 - TEE environment. 321 - * TEE_CMD_ID_UNLOAD_TA - unloads TA binary from TEE environment. 322 - * TEE_CMD_ID_OPEN_SESSION - opens a session with a loaded TA. 323 - * TEE_CMD_ID_CLOSE_SESSION - closes session with loaded TA 324 - * TEE_CMD_ID_INVOKE_CMD - invokes a command with loaded TA 325 - * TEE_CMD_ID_MAP_SHARED_MEM - maps shared memory 326 - * TEE_CMD_ID_UNMAP_SHARED_MEM - unmaps shared memory 327 - 328 - AMD-TEE Trusted OS is the firmware running on AMD Secure Processor. 329 - 330 - The AMD-TEE driver registers itself with TEE subsystem and implements the 331 - following driver function callbacks: 332 - 333 - * get_version - returns the driver implementation id and capability. 334 - * open - sets up the driver context data structure. 335 - * release - frees up driver resources. 336 - * open_session - loads the TA binary and opens session with loaded TA. 337 - * close_session - closes session with loaded TA and unloads it. 338 - * invoke_func - invokes a command with loaded TA. 339 - 340 - cancel_req driver callback is not supported by AMD-TEE. 341 - 342 - The GlobalPlatform TEE Client API [5] can be used by the user space (client) to 343 - talk to AMD's TEE. AMD's TEE provides a secure environment for loading, opening 344 - a session, invoking commands and closing session with TA. 345 - 346 - References 347 - ========== 348 - 349 - [1] https://github.com/OP-TEE/optee_os 350 - 351 - [2] http://infocenter.arm.com/help/topic/com.arm.doc.den0028a/index.html 352 - 353 - [3] drivers/tee/optee/optee_smc.h 354 - 355 - [4] drivers/tee/optee/optee_msg.h 356 - 357 - [5] http://www.globalplatform.org/specificationsdevice.asp look for 358 - "TEE Client API Specification v1.0" and click download. 359 - 360 - [6] include/linux/psp-tee.h 361 - 362 - [7] drivers/tee/amdtee/amdtee_if.h 363 - 364 - [8] https://trustedfirmware-a.readthedocs.io/en/latest/threat_model/threat_model.html
+1
Documentation/subsystem-apis.rst
··· 86 86 misc-devices/index 87 87 peci/index 88 88 wmi/index 89 + tee/index
+90
Documentation/tee/amd-tee.rst
··· 1 + .. SPDX-License-Identifier: GPL-2.0 2 + 3 + ============================================= 4 + AMD-TEE (AMD's Trusted Execution Environment) 5 + ============================================= 6 + 7 + The AMD-TEE driver handles the communication with AMD's TEE environment. The 8 + TEE environment is provided by AMD Secure Processor. 9 + 10 + The AMD Secure Processor (formerly called Platform Security Processor or PSP) 11 + is a dedicated processor that features ARM TrustZone technology, along with a 12 + software-based Trusted Execution Environment (TEE) designed to enable 13 + third-party Trusted Applications. This feature is currently enabled only for 14 + APUs. 15 + 16 + The following picture shows a high level overview of AMD-TEE:: 17 + 18 + | 19 + x86 | 20 + | 21 + User space (Kernel space) | AMD Secure Processor (PSP) 22 + ~~~~~~~~~~ ~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~~~~~~~~~ 23 + | 24 + +--------+ | +-------------+ 25 + | Client | | | Trusted | 26 + +--------+ | | Application | 27 + /\ | +-------------+ 28 + || | /\ 29 + || | || 30 + || | \/ 31 + || | +----------+ 32 + || | | TEE | 33 + || | | Internal | 34 + \/ | | API | 35 + +---------+ +-----------+---------+ +----------+ 36 + | TEE | | TEE | AMD-TEE | | AMD-TEE | 37 + | Client | | subsystem | driver | | Trusted | 38 + | API | | | | | OS | 39 + +---------+-----------+----+------+---------+---------+----------+ 40 + | Generic TEE API | | ASP | Mailbox | 41 + | IOCTL (TEE_IOC_*) | | driver | Register Protocol | 42 + +--------------------------+ +---------+--------------------+ 43 + 44 + At the lowest level (in x86), the AMD Secure Processor (ASP) driver uses the 45 + CPU to PSP mailbox register to submit commands to the PSP. The format of the 46 + command buffer is opaque to the ASP driver. It's role is to submit commands to 47 + the secure processor and return results to AMD-TEE driver. The interface 48 + between AMD-TEE driver and AMD Secure Processor driver can be found in [1]. 49 + 50 + The AMD-TEE driver packages the command buffer payload for processing in TEE. 51 + The command buffer format for the different TEE commands can be found in [2]. 52 + 53 + The TEE commands supported by AMD-TEE Trusted OS are: 54 + 55 + * TEE_CMD_ID_LOAD_TA - loads a Trusted Application (TA) binary into 56 + TEE environment. 57 + * TEE_CMD_ID_UNLOAD_TA - unloads TA binary from TEE environment. 58 + * TEE_CMD_ID_OPEN_SESSION - opens a session with a loaded TA. 59 + * TEE_CMD_ID_CLOSE_SESSION - closes session with loaded TA 60 + * TEE_CMD_ID_INVOKE_CMD - invokes a command with loaded TA 61 + * TEE_CMD_ID_MAP_SHARED_MEM - maps shared memory 62 + * TEE_CMD_ID_UNMAP_SHARED_MEM - unmaps shared memory 63 + 64 + AMD-TEE Trusted OS is the firmware running on AMD Secure Processor. 65 + 66 + The AMD-TEE driver registers itself with TEE subsystem and implements the 67 + following driver function callbacks: 68 + 69 + * get_version - returns the driver implementation id and capability. 70 + * open - sets up the driver context data structure. 71 + * release - frees up driver resources. 72 + * open_session - loads the TA binary and opens session with loaded TA. 73 + * close_session - closes session with loaded TA and unloads it. 74 + * invoke_func - invokes a command with loaded TA. 75 + 76 + cancel_req driver callback is not supported by AMD-TEE. 77 + 78 + The GlobalPlatform TEE Client API [3] can be used by the user space (client) to 79 + talk to AMD's TEE. AMD's TEE provides a secure environment for loading, opening 80 + a session, invoking commands and closing session with TA. 81 + 82 + References 83 + ========== 84 + 85 + [1] include/linux/psp-tee.h 86 + 87 + [2] drivers/tee/amdtee/amdtee_if.h 88 + 89 + [3] http://www.globalplatform.org/specificationsdevice.asp look for 90 + "TEE Client API Specification v1.0" and click download.
+19
Documentation/tee/index.rst
··· 1 + .. SPDX-License-Identifier: GPL-2.0 2 + 3 + ============= 4 + TEE Subsystem 5 + ============= 6 + 7 + .. toctree:: 8 + :maxdepth: 1 9 + 10 + tee 11 + op-tee 12 + amd-tee 13 + 14 + .. only:: subproject and html 15 + 16 + Indices 17 + ======= 18 + 19 + * :ref:`genindex`
+166
Documentation/tee/op-tee.rst
··· 1 + .. SPDX-License-Identifier: GPL-2.0 2 + 3 + ==================================================== 4 + OP-TEE (Open Portable Trusted Execution Environment) 5 + ==================================================== 6 + 7 + The OP-TEE driver handles OP-TEE [1] based TEEs. Currently it is only the ARM 8 + TrustZone based OP-TEE solution that is supported. 9 + 10 + Lowest level of communication with OP-TEE builds on ARM SMC Calling 11 + Convention (SMCCC) [2], which is the foundation for OP-TEE's SMC interface 12 + [3] used internally by the driver. Stacked on top of that is OP-TEE Message 13 + Protocol [4]. 14 + 15 + OP-TEE SMC interface provides the basic functions required by SMCCC and some 16 + additional functions specific for OP-TEE. The most interesting functions are: 17 + 18 + - OPTEE_SMC_FUNCID_CALLS_UID (part of SMCCC) returns the version information 19 + which is then returned by TEE_IOC_VERSION 20 + 21 + - OPTEE_SMC_CALL_GET_OS_UUID returns the particular OP-TEE implementation, used 22 + to tell, for instance, a TrustZone OP-TEE apart from an OP-TEE running on a 23 + separate secure co-processor. 24 + 25 + - OPTEE_SMC_CALL_WITH_ARG drives the OP-TEE message protocol 26 + 27 + - OPTEE_SMC_GET_SHM_CONFIG lets the driver and OP-TEE agree on which memory 28 + range to used for shared memory between Linux and OP-TEE. 29 + 30 + The GlobalPlatform TEE Client API [5] is implemented on top of the generic 31 + TEE API. 32 + 33 + Picture of the relationship between the different components in the 34 + OP-TEE architecture:: 35 + 36 + User space Kernel Secure world 37 + ~~~~~~~~~~ ~~~~~~ ~~~~~~~~~~~~ 38 + +--------+ +-------------+ 39 + | Client | | Trusted | 40 + +--------+ | Application | 41 + /\ +-------------+ 42 + || +----------+ /\ 43 + || |tee- | || 44 + || |supplicant| \/ 45 + || +----------+ +-------------+ 46 + \/ /\ | TEE Internal| 47 + +-------+ || | API | 48 + + TEE | || +--------+--------+ +-------------+ 49 + | Client| || | TEE | OP-TEE | | OP-TEE | 50 + | API | \/ | subsys | driver | | Trusted OS | 51 + +-------+----------------+----+-------+----+-----------+-------------+ 52 + | Generic TEE API | | OP-TEE MSG | 53 + | IOCTL (TEE_IOC_*) | | SMCCC (OPTEE_SMC_CALL_*) | 54 + +-----------------------------+ +------------------------------+ 55 + 56 + RPC (Remote Procedure Call) are requests from secure world to kernel driver 57 + or tee-supplicant. An RPC is identified by a special range of SMCCC return 58 + values from OPTEE_SMC_CALL_WITH_ARG. RPC messages which are intended for the 59 + kernel are handled by the kernel driver. Other RPC messages will be forwarded to 60 + tee-supplicant without further involvement of the driver, except switching 61 + shared memory buffer representation. 62 + 63 + OP-TEE device enumeration 64 + ------------------------- 65 + 66 + OP-TEE provides a pseudo Trusted Application: drivers/tee/optee/device.c in 67 + order to support device enumeration. In other words, OP-TEE driver invokes this 68 + application to retrieve a list of Trusted Applications which can be registered 69 + as devices on the TEE bus. 70 + 71 + OP-TEE notifications 72 + -------------------- 73 + 74 + There are two kinds of notifications that secure world can use to make 75 + normal world aware of some event. 76 + 77 + 1. Synchronous notifications delivered with ``OPTEE_RPC_CMD_NOTIFICATION`` 78 + using the ``OPTEE_RPC_NOTIFICATION_SEND`` parameter. 79 + 2. Asynchronous notifications delivered with a combination of a non-secure 80 + edge-triggered interrupt and a fast call from the non-secure interrupt 81 + handler. 82 + 83 + Synchronous notifications are limited by depending on RPC for delivery, 84 + this is only usable when secure world is entered with a yielding call via 85 + ``OPTEE_SMC_CALL_WITH_ARG``. This excludes such notifications from secure 86 + world interrupt handlers. 87 + 88 + An asynchronous notification is delivered via a non-secure edge-triggered 89 + interrupt to an interrupt handler registered in the OP-TEE driver. The 90 + actual notification value are retrieved with the fast call 91 + ``OPTEE_SMC_GET_ASYNC_NOTIF_VALUE``. Note that one interrupt can represent 92 + multiple notifications. 93 + 94 + One notification value ``OPTEE_SMC_ASYNC_NOTIF_VALUE_DO_BOTTOM_HALF`` has a 95 + special meaning. When this value is received it means that normal world is 96 + supposed to make a yielding call ``OPTEE_MSG_CMD_DO_BOTTOM_HALF``. This 97 + call is done from the thread assisting the interrupt handler. This is a 98 + building block for OP-TEE OS in secure world to implement the top half and 99 + bottom half style of device drivers. 100 + 101 + OPTEE_INSECURE_LOAD_IMAGE Kconfig option 102 + ---------------------------------------- 103 + 104 + The OPTEE_INSECURE_LOAD_IMAGE Kconfig option enables the ability to load the 105 + BL32 OP-TEE image from the kernel after the kernel boots, rather than loading 106 + it from the firmware before the kernel boots. This also requires enabling the 107 + corresponding option in Trusted Firmware for Arm. The Trusted Firmware for Arm 108 + documentation [6] explains the security threat associated with enabling this as 109 + well as mitigations at the firmware and platform level. 110 + 111 + There are additional attack vectors/mitigations for the kernel that should be 112 + addressed when using this option. 113 + 114 + 1. Boot chain security. 115 + 116 + * Attack vector: Replace the OP-TEE OS image in the rootfs to gain control of 117 + the system. 118 + 119 + * Mitigation: There must be boot chain security that verifies the kernel and 120 + rootfs, otherwise an attacker can modify the loaded OP-TEE binary by 121 + modifying it in the rootfs. 122 + 123 + 2. Alternate boot modes. 124 + 125 + * Attack vector: Using an alternate boot mode (i.e. recovery mode), the 126 + OP-TEE driver isn't loaded, leaving the SMC hole open. 127 + 128 + * Mitigation: If there are alternate methods of booting the device, such as a 129 + recovery mode, it should be ensured that the same mitigations are applied 130 + in that mode. 131 + 132 + 3. Attacks prior to SMC invocation. 133 + 134 + * Attack vector: Code that is executed prior to issuing the SMC call to load 135 + OP-TEE can be exploited to then load an alternate OS image. 136 + 137 + * Mitigation: The OP-TEE driver must be loaded before any potential attack 138 + vectors are opened up. This should include mounting of any modifiable 139 + filesystems, opening of network ports or communicating with external 140 + devices (e.g. USB). 141 + 142 + 4. Blocking SMC call to load OP-TEE. 143 + 144 + * Attack vector: Prevent the driver from being probed, so the SMC call to 145 + load OP-TEE isn't executed when desired, leaving it open to being executed 146 + later and loading a modified OS. 147 + 148 + * Mitigation: It is recommended to build the OP-TEE driver as builtin driver 149 + rather than as a module to prevent exploits that may cause the module to 150 + not be loaded. 151 + 152 + References 153 + ========== 154 + 155 + [1] https://github.com/OP-TEE/optee_os 156 + 157 + [2] http://infocenter.arm.com/help/topic/com.arm.doc.den0028a/index.html 158 + 159 + [3] drivers/tee/optee/optee_smc.h 160 + 161 + [4] drivers/tee/optee/optee_msg.h 162 + 163 + [5] http://www.globalplatform.org/specificationsdevice.asp look for 164 + "TEE Client API Specification v1.0" and click download. 165 + 166 + [6] https://trustedfirmware-a.readthedocs.io/en/latest/threat_model/threat_model.html
+22
Documentation/tee/tee.rst
··· 1 + .. SPDX-License-Identifier: GPL-2.0 2 + 3 + =================================== 4 + TEE (Trusted Execution Environment) 5 + =================================== 6 + 7 + This document describes the TEE subsystem in Linux. 8 + 9 + Overview 10 + ======== 11 + 12 + A TEE is a trusted OS running in some secure environment, for example, 13 + TrustZone on ARM CPUs, or a separate secure co-processor etc. A TEE driver 14 + handles the details needed to communicate with the TEE. 15 + 16 + This subsystem deals with: 17 + 18 + - Registration of TEE drivers 19 + 20 + - Managing shared memory between Linux and the TEE 21 + 22 + - Providing a generic API to the TEE
+2 -2
Documentation/trace/ftrace-uses.rst
··· 182 182 183 183 FTRACE_OPS_FL_RECURSION 184 184 By default, it is expected that the callback can handle recursion. 185 - But if the callback is not that worried about overehead, then 185 + But if the callback is not that worried about overhead, then 186 186 setting this bit will add the recursion protection around the 187 187 callback by calling a helper function that will do the recursion 188 188 protection and only call the callback if it did not recurse. ··· 190 190 Note, if this flag is not set, and recursion does occur, it could 191 191 cause the system to crash, and possibly reboot via a triple fault. 192 192 193 - Not, if this flag is set, then the callback will always be called 193 + Note, if this flag is set, then the callback will always be called 194 194 with preemption disabled. If it is not set, then it is possible 195 195 (but not guaranteed) that the callback will be called in 196 196 preemptable context.
+16 -1
Documentation/trace/ftrace.rst
··· 180 180 Only active when the file contains a number greater than 0. 181 181 (in microseconds) 182 182 183 + buffer_percent: 184 + 185 + This is the watermark for how much the ring buffer needs to be filled 186 + before a waiter is woken up. That is, if an application calls a 187 + blocking read syscall on one of the per_cpu trace_pipe_raw files, it 188 + will block until the given amount of data specified by buffer_percent 189 + is in the ring buffer before it wakes the reader up. This also 190 + controls how the splice system calls are blocked on this file:: 191 + 192 + 0 - means to wake up as soon as there is any data in the ring buffer. 193 + 50 - means to wake up when roughly half of the ring buffer sub-buffers 194 + are full. 195 + 100 - means to block until the ring buffer is totally full and is 196 + about to start overwriting the older data. 197 + 183 198 buffer_size_kb: 184 199 185 200 This sets or displays the number of kilobytes each CPU ··· 2589 2574 2590 2575 - The cpu number on which the function executed is default 2591 2576 enabled. It is sometimes better to only trace one cpu (see 2592 - tracing_cpu_mask file) or you might sometimes see unordered 2577 + tracing_cpumask file) or you might sometimes see unordered 2593 2578 function calls while cpu tracing switch. 2594 2579 2595 2580 - hide: echo nofuncgraph-cpu > trace_options
+9 -10
Documentation/translations/it_IT/process/development-process.rst
··· 8 8 Una guida al processo di sviluppo del Kernel 9 9 ============================================ 10 10 11 - Contenuti: 11 + Lo scopo di questo documento è quello di aiutare gli sviluppatori (ed i loro 12 + supervisori) a lavorare con la communità di sviluppo con il minimo sforzo. È 13 + un tentativo di documentare il funzionamento di questa communità in modo che 14 + sia accessibile anche a coloro che non hanno famigliarità con lo sviluppo del 15 + Kernel Linux (o, anzi, con lo sviluppo di software libero in generale). Benchè 16 + qui sia presente del materiale tecnico, questa è una discussione rivolta in 17 + particolare al procedimento, e quindi per essere compreso non richiede una 18 + conoscenza approfondità sullo sviluppo del kernel. 12 19 13 20 .. toctree:: 21 + :caption: Contenuti 14 22 :numbered: 15 23 :maxdepth: 2 16 24 ··· 30 22 6.Followthrough 31 23 7.AdvancedTopics 32 24 8.Conclusion 33 - 34 - Lo scopo di questo documento è quello di aiutare gli sviluppatori (ed i loro 35 - supervisori) a lavorare con la communità di sviluppo con il minimo sforzo. È 36 - un tentativo di documentare il funzionamento di questa communità in modo che 37 - sia accessibile anche a coloro che non hanno famigliarità con lo sviluppo del 38 - Kernel Linux (o, anzi, con lo sviluppo di software libero in generale). Benchè 39 - qui sia presente del materiale tecnico, questa è una discussione rivolta in 40 - particolare al procedimento, e quindi per essere compreso non richiede una 41 - conoscenza approfondità sullo sviluppo del kernel.
+3
Documentation/translations/sp_SP/disclaimer-sp.rst
··· 4 4 Si tiene alguna duda sobre la exactitud del contenido de esta 5 5 traducción, la única referencia válida es la documentación oficial en 6 6 inglés. 7 + Además, por defecto, los enlaces a documentos redirigen a la 8 + documentación en inglés, incluso si existe una versión traducida. 9 + Consulte el índice para más información.
+1 -1
Documentation/translations/sp_SP/howto.rst Documentation/translations/sp_SP/process/howto.rst
··· 1 - .. include:: ./disclaimer-sp.rst 1 + .. include:: ../disclaimer-sp.rst 2 2 3 3 :Original: :ref:`Documentation/process/howto.rst <process_howto>` 4 4 :Translator: Carlos Bilbao <carlos.bilbao@amd.com>
-1
Documentation/translations/sp_SP/index.rst
··· 76 76 .. toctree:: 77 77 :maxdepth: 1 78 78 79 - howto 80 79 process/index 81 80 wrappers/memory-barriers
+797
Documentation/translations/sp_SP/process/handling-regressions.rst
··· 1 + .. include:: ../disclaimer-sp.rst 2 + 3 + :Translator: Sergio González Collado <sergio.collado@gmail.com> 4 + 5 + .. _sp_handling_regressions: 6 + 7 + Gestión de regresiones 8 + ++++++++++++++++++++++ 9 + 10 + *No causamos regresiones* -- este documento describe la que es la "primera 11 + regla del desarrollo del kernel de Linux" y que implica en la práctica para 12 + los desarrolladores. Y complementa la documentación: 13 + Documentation/admin-guide/reporting-regressions.rst, que cubre el tema 14 + desde el punto de vista de un usuario; si nunca ha leído ese texto, realice 15 + al menos una lectura rápida del mismo antes de continuar. 16 + 17 + Las partes importantes (el "TL;DR") 18 + =================================== 19 + 20 + #. Asegúrese de que los suscriptores a la lista `regression mailing list 21 + <https://lore.kernel.org/regressions/>`_ (regressions@lists.linux.dev) 22 + son conocedores con rapidez de cualquier nuevo informe de regresión: 23 + 24 + * Cuando se reciba un correo que no incluyó a la lista, inclúyalo en la 25 + conversación de los correos, mandando un breve "Reply-all" con la 26 + lista en CCed. 27 + 28 + * Mande o redirija cualquier informe originado en los gestores de bugs 29 + a la lista. 30 + 31 + #. Haga que el bot del kernel de Linux "regzbot" realice el seguimiento del 32 + incidente (esto es opcional, pero recomendado). 33 + 34 + * Para reportes enviados por correo, verificar si contiene alguna línea 35 + como ``#regzbot introduced v5.13..v5.14-rc1``. Si no, mandar una 36 + respuesta (con la lista de regresiones en CC) que contenga un párrafo 37 + como el siguiente, lo que le indica a regzbot cuando empezó a suceder 38 + el incidente:: 39 + 40 + #regzbot ^introduced 1f2e3d4c5b6a 41 + 42 + * Cuando se mandan informes desde un gestor de incidentes a la lista de 43 + regresiones(ver más arriba), incluir un párrafo como el siguiente:: 44 + 45 + #regzbot introduced: v5.13..v5.14-rc1 46 + #regzbot from: Some N. Ice Human <some.human@example.com> 47 + #regzbot monitor: http://some.bugtracker.example.com/ticket?id=123456789 48 + 49 + #. Cuando se manden correcciones para las regresiones, añadir etiquetas 50 + "Link:" a la descripción, apuntado a todos los sitios donde se informó 51 + del incidente, como se indica en el documento: 52 + Documentation/process/submitting-patches.rst y 53 + :ref:`Documentation/process/5.Posting.rst <development_posting>`. 54 + 55 + #. Intente arreglar las regresiones rápidamente una vez la causa haya sido 56 + identificada; las correcciones para la mayor parte de las regresiones 57 + deberían ser integradas en menos de dos semanas, pero algunas pueden 58 + resolverse en dos o tres días. 59 + 60 + Detalles importantes para desarrolladores en la regresiones de kernel de Linux 61 + ============================================================================== 62 + 63 + Puntos básicos importantes más en detalle 64 + ----------------------------------------- 65 + 66 + Qué hacer cuando se recibe un aviso de regresión. 67 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 68 + 69 + Asegúrese de que el programa de gestión de regresiones del kernel de Linux 70 + y los subscritos a la lista de correo `regression mailing list 71 + <https://lore.kernel.org/regressions/>`_ (regressions@lists.linux.dev) son 72 + conocedores de cualquier nuevo informe de regresión: 73 + 74 + * Cuando se recibe un informe por email que no tiene en CC la lista, 75 + inmediatamente meterla en el la cadena de emails mandado al menos un 76 + breve "Reply-all" con la lista en CC; Intentar asegurar que la lista es 77 + añadida en CC de nuevo en caso de que alguna respuesta la omita de la 78 + lista. 79 + 80 + * Si un informe enviado a un gestor de defectos, llega a su correo, 81 + reenvíelo o redirijalo a la lista. Considere verificar los archivos de 82 + la lista de antemano, si la persona que lo ha informado, lo ha enviado 83 + anteriormente, como se indica en: 84 + Documentation/admin-guide/reporting-issues.rst. 85 + 86 + Cuando se realice cualquiera de las acciones anteriores, considere 87 + inmediatamente iniciar el seguimiento de la regresión con "regzbot" el 88 + gestor de regresiones del kernel de Linux. 89 + 90 + * Para los informes enviados por email, verificar si se ha incluido un 91 + comando a "regzbot", como ``#regzbot introduced 1f2e3d4c5b6a``. Si no es 92 + así, envíe una respuesta (con la lista de regresiones en CC) con un 93 + párrafo como el siguiente:: 94 + 95 + #regzbot ^introduced: v5.13..v5.14-rc1 96 + 97 + Esto indica a regzbot el rango de versiones en el cual es defecto 98 + comenzó a suceder; Puede especificar un rango usando los identificadores 99 + de los commits así como un único commit, en caso en el que el informante 100 + haya identificado el commit causante con 'bisect'. 101 + 102 + Tenga en cuenta que el acento circunflejo (^) antes de "introduced": 103 + Esto indica a regzbot, que debe tratar el email padre (el que ha sido 104 + respondido) como el informeinicial para la regresión que quiere ser 105 + seguida. Esto es importante, ya que regzbot buscará más tarde parches 106 + con etiquetas "Link:" que apunten al al informe de losarchivos de 107 + lore.kernel.org. 108 + 109 + * Cuando mande informes de regresiones a un gestor de defectos, incluya un 110 + párrafo con los siguientes comandos a regzbot:: 111 + 112 + #regzbot introduced: 1f2e3d4c5b6a 113 + #regzbot from: Some N. Ice Human <some.human@example.com> 114 + #regzbot monitor: http://some.bugtracker.example.com/ticket?id=123456789 115 + 116 + Regzbot asociará automáticamente parches con el informe que contengan 117 + las etiquetas "Link:" apuntando a su email o el ticket indicado. 118 + 119 + Qué es importante cuando se corrigen regresiones 120 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 121 + 122 + No se necesita hacer nada especial cuando se mandan las correcciones para 123 + las regresiones únicamente recordar lo que se explica en los documentos: 124 + Documentation/process/submitting-patches.rst, 125 + :ref:`Documentation/process/5.Posting.rst <development_posting>`, y 126 + Documentation/process/stable-kernel-rules.rst 127 + 128 + * Apunte a todos los lugares donde el incidente se reportó usando la 129 + etiqueta "Link:" :: 130 + 131 + Link: https://lore.kernel.org/r/30th.anniversary.repost@klaava.Helsinki.FI/ 132 + Link: https://bugzilla.kernel.org/show_bug.cgi?id=1234567890 133 + 134 + * Añada la etiqueta "Fixes:" para indicar el commit causante de la 135 + regresión. 136 + 137 + * Si el culpable ha sido "mergeado" en un ciclo de desarrollo anterior, 138 + marque explícitamente el fix para retro-importarlo usando la etiqueta 139 + ``Cc: stable@vger.kernel.org`` tag. 140 + 141 + Todo esto se espera y es importante en una regresión, ya que estas 142 + etiquetas son de gran valor para todos (incluido usted) que pueda estar 143 + mirando en ese incidente semanas, meses o años después. Estas etiquetas son 144 + también cruciales para las herramientas y scripts usados por otros 145 + desarrolladores del kernel o distribuciones de Linux; una de esas 146 + herramientas es regzbot, el cual depende mucho de las etiquetas "Link:" 147 + para asociar los informes por regresiones con los cambios que las 148 + resuelven. 149 + 150 + 151 + Priorización del trabajo en arreglar regresiones 152 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 153 + 154 + Al final, los desarrolladores deberían hacer lo posible para evitar a los 155 + usuarios situaciones donde una regresión les deje solo tres opciones: 156 + 157 + * Ejecutar el kernel con una regresión que afecta seriamente al uso. 158 + 159 + * Cambiar a un kernel nuevo o mas antiguo -- rebajarse a una versión 160 + soportada del kernel que no tenga las funcionalidades requeridas. 161 + 162 + * Continuar ejecutando una versión desfasada y potencialmente insegura del 163 + kernel por más de dos semanas después de que el causante de una regresión 164 + fuese identificado. 165 + 166 + Cómo se ejecuta esto depende mucho de la situación. A continuación se 167 + presentan unas reglas generales, en orden de importancia: 168 + 169 + * Priorice el trabajo en la gestión de los informes de la regresión y 170 + arreglar la regresión por encima de cualquier otro trabajo en el kernel 171 + de Linux, a menos que lo último afecte profundamente a efectos de 172 + seguridad, o cause errores en los que haya pérdida o daño de datos. 173 + 174 + * Considere siempre revertir los commits responsables y re-aplicarlos 175 + después, junto con las correcciones necesarias, ya que esto puede la 176 + forma menos peligrosa y más rápida de arreglar la regresión. 177 + 178 + * Los desarrolladores deberían gestionar la regresión en todos los kernels 179 + soportados de la serie, pero son libres de delegar el trabajo al equipo 180 + permanente el incidente no hubiese ocurrido en la línea principal. 181 + 182 + * Intente resolver cualquier regresión que apareciera en el ciclo de 183 + desarrollo antes de que este acabe. Si se teme que una corrección 184 + pudiera ser demasiado arriesgada para aplicarla días antes de una 185 + liberación de la línea principal de desarrollo, dejar decidir a Linus: 186 + mande la corrección a él de forma separada, tan pronto como sea posible 187 + con una explicación de la situación. El podrá decidir, y posponer la 188 + liberación si fuese necesario, por ejemplo si aparecieran múltiples 189 + cambios como ese. 190 + 191 + * Gestione las regresiones en la rama estable, de largo término, o la 192 + propia rama principal de las versiones, con más urgencia que la 193 + regresiones en las preliberaciones. Esto cambia después de la liberación 194 + de la quinta pre-liberación, aka "-rc5": la rama principal entonces se 195 + vuelve más importante, asegurar que todas las mejoras y correcciones son 196 + idealmente testeados juntos por al menos una semana antes de que Linux 197 + libere la nueva versión en la rama principal. 198 + 199 + * Intente arreglar regresiones en un intervalo de una semana después de 200 + que se ha identificado el responsable, si el incidente fue introducido 201 + en alguno de los siguientes casos: 202 + 203 + * una versión estable/largo-plazo reciente 204 + 205 + * en el último ciclo de desarrollo de la rama principal 206 + 207 + En el último caso (por ejemplo v5.14), intentar gestionar las 208 + regresiones incluso más rápido, si la versión estable precedente (v5.13) 209 + ha de ser abandonada pronto o ya se ha etiquetado como de final de vida 210 + (EOL de las siglas en inglés End-of-Life) -- esto sucede usualmente 211 + sobre tres o cuatro semanas después de una liberación de una versión en 212 + la rama principal. 213 + 214 + * Intente arreglar cualquier otra regresión en un periodo de dos semanas 215 + después de que el culpable haya sido identificado. Dos o tres semanas 216 + adicionales son aceptables para regresiones de rendimiento y otros 217 + incidentes que son molestos, pero no bloquean a nadie la ejecución de 218 + Linux (a menos que se un incidente en el ciclo de desarrollo actual, en 219 + ese caso se debería gestionar antes de la liberación de la versión). 220 + Unas semanas son aceptables si la regresión únicamente puede ser 221 + arreglada con un cambio arriesgado y al mismo tiempo únicamente afecta a 222 + unos pocos usuarios; también está bien si se usa tanto tiempo como fuera 223 + necesario si la regresión está presente en la segunda versión más nueva 224 + de largo plazo del kernel. 225 + 226 + Nota: Los intervalos de tiempo mencionados anteriormente para la resolución 227 + de las regresiones, incluyen la verificación de esta, revisión e inclusión 228 + en la rama principal, idealmente con la corrección incluida en la rama 229 + "linux-next" al menos brevemente. Esto conllevará retrasos que también se 230 + tienen tener en cuenta. 231 + 232 + Se espera que los maintainers de los subsistemas, ayuden en conseguir esos 233 + tiempos, haciendo revisiones con prontitud y gestionando con rapidez los 234 + parches aceptados. Esto puede resultar en tener que mandar peticiones de 235 + git-pull antes o de forma más frecuente que lo normal; dependiendo del 236 + arreglo, podría incluso ser aceptable saltarse la verificación en 237 + linux-next. Especialmente para las correcciones en las ramas de los kernels 238 + estable y de largo plazo necesitan ser gestionadas rápidamente, y las 239 + correcciones necesitan ser incluidas en la rama principal antes de que 240 + puedan ser incluidas posteriormente a las series precedentes. 241 + 242 + 243 + Más aspectos sobre regresiones que los desarrolladores deben saber 244 + ------------------------------------------------------------------ 245 + 246 + Cómo tratar con cambios donde se sabe que hay riesgo de regresión 247 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 248 + 249 + Evalué cómo de grande es el riesgo de una regresión, por ejemplo realizando 250 + una búsqueda en las distribuciones de linux y en Git forges. Considere 251 + también preguntar a otros desarrolladores o proyectos que pudieran ser 252 + afectados para evaluar o incluso testear el cambio propuesto; si 253 + apareciesen problemas, quizás se pudiera encontrar una solución aceptable 254 + para todos. 255 + 256 + Si al final, el riesgo de la regresión parece ser relativamente pequeño, 257 + entonces adelante con el cambio, pero siempre informe a todas las partes 258 + involucradas del posible riesgo. Por tanto, asegúrese de que la descripción 259 + del parche, se hace explícito este hecho. Una vez el cambio ha sido 260 + integrado, informe al gestor de regresiones de Linux y a las listas de 261 + correo de regresiones sobre el riesgo, de manera que cualquiera que tenga 262 + el cambio en el radar, en el caso de que aparezcan reportes. Dependiendo 263 + del riesgo, quizás se quiera preguntar al mantenedor del subsistema, que 264 + mencione el hecho en su línea principal de desarrollo. 265 + 266 + ¿Qué más hay que saber sobre regresiones? 267 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 268 + 269 + Repase la documentación: Documentation/admin-guide/reporting-regressions.rst, 270 + esta cubre otros aspectos a tener a en cuenta y conocer: 271 + 272 + * la finalidad de la "regla de no regresión" 273 + 274 + * qué incidencias no se califican como regresión 275 + 276 + * quién es el responsable de identificar la causa raíz de una regresión 277 + 278 + * cómo gestionar situaciones difíciles, como por ejemplo cuando una 279 + regresión es causada por una corrección de seguridad o cuando una 280 + regresión causa otra regresión 281 + 282 + A quién preguntar por consejo cuando se trata de regresiones 283 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 284 + 285 + Mande un email a la lista de correo de regresiones 286 + (regressions@lists.linux.dev) y CC al seguidor de regresiones del kernel de 287 + Linux (regressions@leemhuis.info); Si el incidente pudiera ser mejor 288 + gestionarlo en privado, puede omitirse la lista. 289 + 290 + 291 + Más sobre la gestión de regresiones con regzbot 292 + ----------------------------------------------- 293 + 294 + ¿Por qué el kernel de Linux tiene un gestor de regresiones, y por qué se usa regzbot? 295 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 296 + 297 + Reglas como "no regresiones" necesitan asegurar que se cumplen, de otro 298 + modo se romperían accidentalmente o a propósito. La historia ha mostrado 299 + que esto es verdad también para el kernel de Linux. Esto es por lo que 300 + Thorsten Leemhuis se ofreció como voluntario para dar una solución a esto, 301 + con el gestor de regresiones del kernel de Linux. A nadie se le paga por 302 + hacer esto, y esa es la razón por la gestión de regresiones es un servicio 303 + con el "mejor esfuerzo". 304 + 305 + Intentos iniciales de gestionar manualmente las regresiones han demostrado 306 + que es una tarea extenuante y frustrante, y por esa razón se dejaron de 307 + hacer después de un tiempo. Para evitar que volviese a suceder esto, 308 + Thorsten desarrollo regbot para facilitar el trabajo, con el objetivo a 309 + largo plazo de automatizar la gestión de regresiones tanto como fuese 310 + posible para cualquiera que estuviese involucrado. 311 + 312 + ¿Cómo funciona el seguimiento de regresiones con regzbot? 313 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 314 + 315 + El bot monitoriza las respuestas de los informes de las regresiones 316 + identificadas. Adicionalmente mira si se han publicado o enviado parches 317 + que hagan referencia a esos informes con la etiqueta: "Link:"; respuestas a 318 + esos parches también se siguen. Combinando esta información, también 319 + proporciona una buena imagen del estado actual del proceso de corrección. 320 + 321 + Regzbot intenta hacer todo este trabajo con tan poco retraso como sea 322 + posible tanto para la gente que lo reporta, como para los desarrolladores. 323 + De hecho, solo los informantes son requeridos para una tarea adicional: 324 + necesitan informar a regzbot con el comando ``#regzbot introduced`` 325 + indicado anteriormente; si no hacen esto, alguien más puede hacerlo usando 326 + ``#regzbot ^introduced``. 327 + 328 + Para los desarrolladores normalmente no hay un trabajo adicional que 329 + realizar, únicamente necesitan asegurarse una cosa, que ya se hacía mucho 330 + antes de que regzbot apareciera: añadir las etiquetas "Link:" a la 331 + descripción del parche apuntando a todos los informes sobre el error 332 + corregido. 333 + 334 + ¿Tengo que usar regzbot? 335 + ~~~~~~~~~~~~~~~~~~~~~~~~ 336 + 337 + Hacerlo es por el bien de todo el mundo, tanto los mantenedores del kernel, 338 + como Linus Torvalds dependen parcialmente en regzbot para seguir su trabajo 339 + -- por ejemplo cuando deciden liberar una nueva versión o ampliar la fase de 340 + desarrollo. Para esto necesitan conocer todas las regresiones que están sin 341 + corregir; para esto, es conocido que Linux mira los informes semanales que 342 + manda regzbot. 343 + 344 + ¿He de informar a regzbot cada regresión que encuentre? 345 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 346 + 347 + Idealmente, sí: todos somos humanos y olvidamos fácilmente los problemas 348 + cuando algo más importante aparece inesperadamente -- por ejemplo un 349 + problema mayor en el kernel de Linux o algo en la vida real que nos mantenga 350 + alejados de los teclados por un tiempo. Por eso es mejor informar a regzbot 351 + sobre cada regresión, excepto cuando inmediatamente escribimos un parche y 352 + los mandamos al árbol de desarrollo en el que se integran habitualmente a 353 + la serie del kernel. 354 + 355 + ¿Cómo ver qué regresiones esta siguiendo regbot actualmente? 356 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 357 + 358 + Verifique el `interfaz web de regzbot <https://linux-regtracking.leemhuis.info/regzbot/>`_ 359 + para ver la última información; o `busque el último informe de regresiones 360 + <https://lore.kernel.org/lkml/?q=%22Linux+regressions+report%22+f%3Aregzbot>`_, 361 + el cual suele ser enviado por regzbot una vez a la semana el domingo por la 362 + noche (UTC), lo cual es unas horas antes de que Linus normalmente anuncie 363 + las "(pre-)releases". 364 + 365 + ¿Qué sitios supervisa regzbot? 366 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 367 + 368 + Regzbot supervisa las listas de correo más importantes de Linux, como 369 + también las de los repositorios linux-next, mainline y stable/longterm. 370 + 371 + 372 + ¿Qué tipos de incidentes han de ser monitorizados por regzbot? 373 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 374 + El bot debe hacer seguimiento de las regresiones, y por tanto por favor, 375 + no involucre a regzbot para incidencias normales. Pero es correcto para 376 + el gestor de incidencias de kernel de Linux, monitorizar incidentes 377 + graves, como informes sobre cuelgues, corrupción de datos o errores 378 + internos (Panic, Oops, BUG(), warning, ...). 379 + 380 + 381 + ¿Puedo añadir una regresión detectada por un sistema de CI al seguimiento de regzbot? 382 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 383 + 384 + Siéntase libre de hacerlo, si la regresión en concreto puede tener un 385 + impacto en casos de uso prácticos y por tanto ser detectado por los usuarios; 386 + Así, por favor no involucre a regzbot en regresiones teóricas que 387 + difícilmente pudieran manifestarse en un uso real. 388 + 389 + ¿Cómo interactuar con regzbot? 390 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 391 + 392 + Usando el comando 'regzbot' en una respuesta directa o indirecta al correo 393 + con el informe de regresión. Ese comando necesita estar en su propio 394 + párrafo (debe estar separado del resto del texto usando líneas en blanco): 395 + 396 + Por ejemplo ``#regzbot introduced <version or commit>``, que hace que regzbot 397 + considere el correo como un informe de regressión que se ha de añadir al 398 + seguimiento, como se ha descrito anteriormente; ``#regzbot ^introduced <version or commit>`` 399 + es otro ejemplo del comando, el cual indica a regzbot que considere el email 400 + anterior como el informe de una regresión que se ha de comenzar a monitorizar. 401 + 402 + Una vez uno de esos dos comandos se ha utilizado, se pueden usar otros 403 + comandos regzbot en respuestas directas o indirectas al informe. Puede 404 + escribirlos debajo de uno de los comandos anteriormente usados o en las 405 + respuestas al correo en el que se uso como respuesta a ese correo: 406 + 407 + * Definir o actualizar el título:: 408 + 409 + #regzbot title: foo 410 + 411 + * Monitorizar una discusión o un tiquet de bugzilla.kernel.org donde 412 + aspectos adicionales del incidente o de la corrección se están 413 + comentando -- por ejemplo presentar un parche que corrige la regresión:: 414 + 415 + #regzbot monitor: https://lore.kernel.org/all/30th.anniversary.repost@klaava.Helsinki.FI/ 416 + 417 + Monitorizar solamente funciona para lore.kernel.org y bugzilla.kernel.org; 418 + regzbot considerará todos los mensajes en ese hilo o el tiquet como 419 + relacionados al proceso de corrección. 420 + 421 + * Indicar a un lugar donde más detalles de interés, como un mensaje en una 422 + lista de correo o un tiquet en un gestor de incidencias que pueden estar 423 + levemente relacionados, pero con un tema diferente:: 424 + 425 + #regzbot link: https://bugzilla.kernel.org/show_bug.cgi?id=123456789 426 + 427 + * Identificar una regresión como corregida por un commit que se ha mandado 428 + aguas arriba o se ha publicado:: 429 + 430 + #regzbot fixed-by: 1f2e3d4c5d 431 + 432 + 433 + * Identificar una regresión como un duplicado de otra que ya es seguida 434 + por regzbot:: 435 + 436 + #regzbot dup-of: https://lore.kernel.org/all/30th.anniversary.repost@klaava.Helsinki.FI/ 437 + 438 + * Identificar una regresión como inválida:: 439 + 440 + #regzbot invalid: wasn't a regression, problem has always existed 441 + 442 + 443 + ¿Algo más que decir sobre regzbot y sus comandos? 444 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 445 + 446 + Hay información más detallada y actualizada sobre el bot de seguimiento de 447 + regresiones del kernel de Linux en: `project page <https://gitlab.com/knurd42/regzbot>`_, 448 + y entre otros contiene una `guia de inicio <https://gitlab.com/knurd42/regzbot/-/blob/main/docs/getting_started.md>`_ 449 + y `documentación de referencia <https://gitlab.com/knurd42/regzbot/-/blob/main/docs/reference.md>`_ 450 + Ambos contienen más detalles que las secciones anteriores. 451 + 452 + 453 + Citas de Linus sobre regresiones 454 + -------------------------------- 455 + 456 + A continuación se encuentran unos ejemplos reales (traducidos) de como 457 + Linus Torvalds espera que se gestionen las regresiones: 458 + 459 + 460 + * De 2017-10-26 (1/2) 461 + <https://lore.kernel.org/lkml/CA+55aFwiiQYJ+YoLKCXjN_beDVfu38mg=Ggg5LFOcqHE8Qi7Zw@mail.gmail.com/>`_:: 462 + 463 + Si rompes la configuración de los espacios de usuario ESO ES UNA REGRESIÓN. 464 + 465 + No está bien decir "pero nosotros arreglaremos la configuración del espacio 466 + de usuario". 467 + 468 + Realmente. NO ESTÁ BIEN. 469 + 470 + [...] 471 + 472 + La primera regla es: 473 + 474 + - no causamos regresiones 475 + 476 + y el corolario es que cuando una regresión pasa, lo admitimos y lo 477 + arreglamos, en vez de echar la culpa al espacio de usuario. 478 + 479 + El hecho de que aparentemente se haya negado la regresión durante 480 + tres semanas, significa que lo revertiré y dejaré de integrar peticiones 481 + de apparmor hasta que la gente involucrada entienda como se hace 482 + el desarrollo del kernel. 483 + 484 + 485 + * De `2017-10-26 (2/2) 486 + <https://lore.kernel.org/lkml/CA+55aFxW7NMAMvYhkvz1UPbUTUJewRt6Yb51QAx5RtrWOwjebg@mail.gmail.com/>`_:: 487 + 488 + La gente debería sentirse libre de actualizar su kernel y simplemente 489 + no preocuparse por ello. 490 + 491 + Me niego a imponer una limitación del tipo "solo puede actualizar 492 + el kernel si actualiza otro programa". Si el kernel trabaja para tí, 493 + la regla es que continúe trabajando para tí. 494 + 495 + Ha habido algunas excepciones, pero son pocas y separadas entre sí, y 496 + generalmente tienen una razón fundamental para haber sucedido, que era 497 + básicamente inevitable, y la gente intentó evitarlas por todos los 498 + medios. Quizás no podamos mantener el hardware más, después de que han 499 + pasado décadas y nadie los usacon kernel modernos. Quizás haya un 500 + problema de seguridad serio con cómo hicimos las cosas, y la gente 501 + depende de un modelo fundamentalmente roto. Quizás haya algún otro roto 502 + fundamental, que tenga que tener una _flag_ y por razones internas y 503 + fundamentales. 504 + 505 + Y nótese que esto trata sobre *romper* los entornos de la gente. 506 + 507 + Cambios de comportamiento pasan, y quizás no se mantengan algunas 508 + funcionalidades más. Hay un número de campos en /proc/<pid>/stat que 509 + se imprimen como ceros, simplemente porque ni siquiera existen ya en 510 + kernel, o porque mostrarlos era un error (típica una fuga de 511 + información). Pero los números se sustituyeron por ceros, así que 512 + el código que se usaba para parsear esos campos todavía existe. El 513 + usuario puede no ver todo lo que podía ver antes, y por eso el 514 + omportamiento es claramente diferente, pero las cosas todavía 515 + _funcionan_, incluso si no se puede mostrar información sensible 516 + (o que no es ya importante). 517 + 518 + Pero si algo realmente se rompe, entonces el cambio debe de arreglarse 519 + o revertirse. Y se arregla en el *kernel*. No diciendo "bueno, arreglaremos 520 + tu espacio de usuario". Ha sido un cambio en el kernel el que creo 521 + el problema, entonces ha de ser el kernel el que lo corrija, porque 522 + tenemos un modelo de "actualización". Pero no tenemos una "actualización 523 + con el nuevo espacio de usuario". 524 + 525 + Y yo seriamente me negaré a coger código de gente que no entiende y 526 + honre esta sencilla regla. 527 + 528 + Y esta regla no va a cambiar. 529 + 530 + Y sí, me doy cuenta que el kernel es "especial" en este respecto. Y 531 + estoy orgulloso de ello. 532 + 533 + Y he visto, y puedo señalar, muchos proyectos que dicen "Tenemos que 534 + romper ese caso de uso para poder hacer progresos" o "estabas basandote 535 + en comportamientos no documentados, debe ser duro ser tú" o "hay una 536 + forma mejor de hacer lo que quieres hacer, y tienes que cambiar a esa 537 + nueva forma", y yo simplemente no pienso que eso sea aceptable fuera 538 + de una fase alfa muy temprana que tenga usuarios experimentales que 539 + saben a lo que se han apuntado. El kernel no ha estado en esta 540 + situación en las dos últimas décadas. 541 + 542 + Nosotros rompemos la API _dentro_ del kernel todo el tiempo. Y 543 + arreglaremos los problemas internos diciendo "tú ahora necesitas 544 + hacer XYZ", pero entonces es sobre la API interna del kernel y la 545 + gente que hace esto entonces tendrá obviamente que arreglar todos 546 + los usos de esa API del kernel. Nadie puede decir "ahora, yo he roto 547 + la API que usas, y ahora tú necesitas arreglarlo". Quién rompa algo, 548 + lo arregla también. 549 + 550 + Y nosotros, simplemente, no rompemos el espacio de usuario. 551 + 552 + * De `2020-05-21 553 + <https://lore.kernel.org/all/CAHk-=wiVi7mSrsMP=fLXQrXK_UimybW=ziLOwSzFTtoXUacWVQ@mail.gmail.com/>`_:: 554 + 555 + Las reglas sobre regresiones nunca han sido sobre ningún tipo de 556 + comportamiento documentado, o dónde está situado el código. 557 + 558 + Las reglas sobre regresiones son siempre sobre "roturas en el 559 + flujo de trabajo del usuario". 560 + 561 + Los usuarios son literalmente la _única_ cosa que importa. 562 + 563 + Argumentaciones como "no debería haber usado esto" o "ese 564 + comportamiento es indefinido, es su culpa que su aplicación no 565 + funcione" o "eso solía funcionar únicamente por un bug del kernel" son 566 + irrelevantes. 567 + 568 + Ahora, la realidad nunca es blanca o negra. Así hemos tenido situaciones 569 + como "un serio incidente de seguridad" etc que solamente nos fuerza 570 + a hacer cambios que pueden romper el espacio de usuario. Pero incluso 571 + entonces la regla es que realmente no hay otras opciones para que 572 + las cosas sigan funcionando. 573 + 574 + Y obviamente, si los usuarios tardan años en darse cuenta que algo 575 + se ha roto, o si hay formas adecuadas para sortear la rotura que 576 + no causen muchos problemas para los usuarios (por ejemplo: "hay un 577 + puñado de usuarios, y estos pueden usar la línea de comandos del 578 + kernel para evitarlos"; ese tipo de casos), en esos casos se ha sido 579 + un poco menos estricto. 580 + 581 + Pero no, "eso que está documentado que está roto" (si es dado a que 582 + el código estaba en preparación o porque el manual dice otra cosa) eso 583 + es irrelevante. Si preparar el código es tan útil que la gente, 584 + acaba usando, esto implica que básicamente es código del kernel con 585 + una señal diciendo "por favor limpiar esto". 586 + 587 + El otro lado de la moneda es que la gente que habla sobre "estabilidad 588 + de las APIs" están totalmente equivocados. Las APIs tampoco importan. 589 + Se puede hacer cualquier cambio que se quiera a una API ... siempre y 590 + cuando nadie se de cuenta. 591 + 592 + De nuevo, la regla de las regresiones no trata sobre la documentación, 593 + tampoco sobre las APIs y tampoco sobre las fases de la Luna. 594 + 595 + Únicamente trata sobre "hemos causado problemas al espacio de usuario que 596 + antes funcionaba". 597 + 598 + * De `2017-11-05 599 + <https://lore.kernel.org/all/CA+55aFzUvbGjD8nQ-+3oiMBx14c_6zOj2n7KLN3UsJ-qsd4Dcw@mail.gmail.com/>`_:: 600 + 601 + Y nuestra regla sobre las regresiones nunca ha sido "el comportamiento 602 + no cambia". Eso podría significar que nunca podríamos hacer ningún 603 + cambio. 604 + 605 + Por ejemplo, hacemos cosas como añadir una nueva gestión de 606 + errores etc todo el tiempo, con lo cual a veces incluso añadimos 607 + tests en el directorio de kselftest. 608 + 609 + Así que claramente cambia el comportamiento todo el tiempo y 610 + nosotros no consideramos eso una regresión per se. 611 + 612 + La regla para regresiones para el kernel es para cuando se 613 + rompe algo en el espacio de usuario. No en algún test. No en 614 + "mira, antes podía hacer X, y ahora no puedo". 615 + 616 + * De `2018-08-03 617 + <https://lore.kernel.org/all/CA+55aFwWZX=CXmWDTkDGb36kf12XmTehmQjbiMPCqCRG2hi9kw@mail.gmail.com/>`_:: 618 + 619 + ESTÁS OLVIDANDO LA REGLA #1 DEL KERNEL. 620 + 621 + No hacemos regresiones, y no hacemos regresiones porque estás 100% 622 + equivocado. 623 + 624 + Y la razón que apuntas en tú opinión es exactamente *PORQUÉ* estás 625 + equivocado. 626 + 627 + Tus "buenas razones" son honradas y pura basura. 628 + 629 + El punto de "no hacemos regresiones" es para que la gente pueda 630 + actualizar el kernel y nunca tengan que preocuparse por ello. 631 + 632 + > El kernel tiene un bug que ha de ser arreglado 633 + 634 + Eso es *TOTALMENTE* insustancial. 635 + 636 + Chicos, si algo estaba roto o no, NO IMPORTA. 637 + 638 + ¿Porqué? 639 + 640 + Los errores pasan. Eso es un hecho de la vida. Discutir que 641 + "tenemos que romper algo porque estábamos arreglando un error" es 642 + una locura. Arreglamos decenas de errores cada dia, pensando que 643 + "arreglando un bug" significa que podemos romper otra cosa es algo 644 + que simplemente NO ES VERDAD. 645 + 646 + Así que los bugs no son realmente relevantes para la discusión. Estos 647 + suceden y se detectan, se arreglan, y no tienen nada que ver con 648 + "rompemos a los usuarios". 649 + 650 + Porque la única cosa que importa ES EL USUARIO. 651 + 652 + ¿Cómo de complicado es eso de comprender? 653 + 654 + Cualquier persona que use "pero no funcionaba correctamente" es 655 + un argumento no tiene la razón. Con respecto al USUARIO, no era 656 + erróneo - funcionaba para él/ella. 657 + 658 + Quizás funcionaba *porque* el usuario había tenido el bug en cuenta, 659 + y quizás funcionaba porque el usuario no lo había notado - de nuevo 660 + no importa. Funcionaba para el usuario. 661 + 662 + Romper el flujo del trabajo de un usuario, debido a un "bug" es la 663 + PEOR razón que se pueda usar. 664 + 665 + Es básicamente decir "He cogido algo que funcionaba, y lo he roto, 666 + pero ahora es mejor". ¿No ves que un argumento como este es j*didamente 667 + absurdo? 668 + 669 + y sin usuarios, tu programa no es un programa, es una pieza de 670 + código sin finalidad que puedes perfectamente tirar a la basura. 671 + 672 + Seriamente. Esto es *porque* la regla #1 para el desarrollo del 673 + kernel es "no rompemos el espacio de usuario". Porque "He arreglado 674 + un error" PARA NADA ES UN ARGUMENTO si esa corrección del código 675 + rompe el espacio de usuario. 676 + 677 + si actualizamos el kernel TODO EL TIEMPO, sin actualizar ningún otro 678 + programa en absoluto. Y esto es absolutamente necesario, porque 679 + las dependencias son terribles. 680 + 681 + Y esto es necesario simplemente porque yo como desarrollador del 682 + kernel no actualizo al azar otras herramientas que ni siquiera me 683 + importan como desarrollador del kernel, y yo quiero que mis usuarios 684 + se sientan a salvo haciendo lo mismo. 685 + 686 + Así que no. Tu regla está COMPLETAMENTE equivocada. Si no puedes 687 + actualizar el kernel sin actualizar otro binario al azar, entonces 688 + tenemos un problema. 689 + 690 + * De `2021-06-05 691 + <https://lore.kernel.org/all/CAHk-=wiUVqHN76YUwhkjZzwTdjMMJf_zN4+u7vEJjmEGh3recw@mail.gmail.com/>`_:: 692 + 693 + NO HAY ARGUMENTOS VÁLIDOS PARA UNA REGRESIÓN. 694 + 695 + Honestamente, la gente de seguridad necesita entender que "no funciona" 696 + no es un caso de éxito sobre seguridad. Es un caso de fallo. 697 + 698 + Sí, "no funciona" puede ser seguro. Pero en este caso es totalmente 699 + inutil. 700 + 701 + * De `2011-05-06 (1/3) 702 + <https://lore.kernel.org/all/BANLkTim9YvResB+PwRp7QTK-a5VNg2PvmQ@mail.gmail.com/>`_:: 703 + 704 + La compatibilidad de los binarios es más importante. 705 + 706 + Y si los binarios no usan el interfaz para parsear el formato 707 + (o justamente lo parsea incorrectamente - como el reciente ejemplo 708 + de añadir uuid al /proc/self/mountinfo), entonces es una regresión. 709 + 710 + Y las regresiones se revierten, a menos que haya problemas de 711 + seguridad o similares que nos hagan decir "Dios mío, realmente 712 + tenemos que romper las cosas". 713 + 714 + No entiendo porqué esta simple lógica es tan difícil para algunos 715 + desarrolladores del kernel. La realidad importa. Sus deseos personales 716 + NO IMPORTAN NADA. 717 + 718 + Si se crea un interface que puede usarse sin parsear la 719 + descripción del interface, entonces estaḿos atascados en el interface. 720 + La teoría simplemente no importa. 721 + 722 + Podrias alludar a arreglar las herramientas, e intentar evitar los 723 + errores de compatibilidad de ese modo. No hay tampoco tantos de esos. 724 + 725 + De `2011-05-06 (2/3) 726 + <https://lore.kernel.org/all/BANLkTi=KVXjKR82sqsz4gwjr+E0vtqCmvA@mail.gmail.com/>`_:: 727 + 728 + Esto claramente NO es un tracepoint interno. Por definición. Y está 729 + siendo usado por powertop. 730 + 731 + De `2011-05-06 (3/3) 732 + <https://lore.kernel.org/all/BANLkTinazaXRdGovYL7rRVp+j6HbJ7pzhg@mail.gmail.com/>`_:: 733 + 734 + Tenemos programas que usan esa ABI y si eso se rompe eso es una 735 + regresión. 736 + 737 + * De `2012-07-06 <https://lore.kernel.org/all/CA+55aFwnLJ+0sjx92EGREGTWOx84wwKaraSzpTNJwPVV8edw8g@mail.gmail.com/>`_:: 738 + 739 + > Ahora esto me ha dejado preguntandome si Debian _inestable_ 740 + realmente califica 741 + > como espacio de usuario estándar. 742 + 743 + Oh, si el kernel rompe algún espacio de usuario estándar, eso cuenta. 744 + Muchísima gente usa Debian inestable. 745 + 746 + * De `2019-09-15 747 + <https://lore.kernel.org/lkml/CAHk-=wiP4K8DRJWsCo=20hn_6054xBamGKF2kPgUzpB5aMaofA@mail.gmail.com/>`_:: 748 + 749 + Una reversión _en particular_ en el último minuto en el último commit 750 + (no teniendo en cuenta el propio cambio de versión) justo antes 751 + de la liberación, y aunque es bastante incómodo, quizás también es 752 + instructivo. 753 + 754 + Lo que es instructivo sobre esto es que he revertido un commit que no 755 + tenía ningún error. De hecho, hacía exactamente lo que pretendía, y lo 756 + hacía muy bien. De hecho lo hacía _tan_ bien que los muy mejorados 757 + patrones de IO que causaba han acabado revelando una regresión observable 758 + desde el espacio de usuario, debido a un error real en un componente 759 + no relacionado en absoluto. 760 + 761 + De todas maneras, los detalles actuales de esta regresión no son la 762 + razón por la que señalo esto como instructivo. Es más que es un ejemplo 763 + ilustrativo sobre lo que cuenta como una regresión, y lo que conlleva 764 + la regla del kernel de "no regresiones". El commit que ha sido revertido 765 + no cambiaba ninguna API, y no introducía ningún error nuevo en el código. 766 + Pero acabó exponiendo otro problema, y como eso causaba que la 767 + actualización del kernel fallara para el usuario. Así que ha sido 768 + revertido. 769 + 770 + El foco aquí, es que hemos hecho la reversión basándonos en el 771 + comportamiento reportado en el espacio de usuario, no basado en 772 + conceptos como "cambios de ABI" o "provocaba un error". Los mejores 773 + patrones de IO que se han presentado debido al cambio únicamente han 774 + expuesto un viejo error, y la gente ya dependía del benigno 775 + comportamiento de ese viejo error. 776 + 777 + Y que no haya miedo, reintroduciremos el arreglo que mejoraba los 778 + patrones de IO una vez hayamos decidido cómo gestionar el hecho de 779 + que hay una interacción incorrecta con un interfaz en el que la 780 + gente dependía de ese comportamiento previo. Es únicamente que 781 + tenemos que ver cómo gestionamos y cómo lo hacemos (no hay menos de 782 + tres parches diferentes de tres desarrolladores distintos que estamos 783 + evaluando, ... puede haber más por llegar). Mientras tanto, he 784 + revertido lo que exponía el problema a los usuarios de esta release, 785 + incluso cuando espero que el fix será reintroducido (quizás insertado 786 + a posteriormente como un parche estable) una vez lleguemos a un 787 + acuerdo sobre cómo se ha de exponer el error. 788 + 789 + Lo que hay que recordar de todo el asunto no es sobre si el cambio 790 + de kernel-espacio-de-usuario ABI, o la corrección de un error, o si 791 + el código antiguo "en primer lugar nunca debería haber estado ahí". 792 + Es sobre si algo rompe el actual flujo de trabajo del usuario. 793 + 794 + De todas formas, esto era mi pequeña aclaración en todo este 795 + tema de la regresión. Ya que es la "primera regla de la programación 796 + del kernel", me ha parecido que quizás es bueno mencionarlo de 797 + vez en cuando.
+4
Documentation/translations/sp_SP/process/index.rst
··· 24 24 contribution-maturity-model 25 25 security-bugs 26 26 embargoed-hardware-issues 27 + handling-regressions 28 + management-style 29 + submit-checklist 30 + howto
+299
Documentation/translations/sp_SP/process/management-style.rst
··· 1 + .. include:: ../disclaimer-sp.rst 2 + 3 + :Original: Documentation/process/management-style.rst 4 + :Translator: Avadhut Naik <avadhut.naik@amd.com> 5 + 6 + .. _sp_managementstyle: 7 + 8 + 9 + Estilo de gestión del kernel de Linux 10 + ===================================== 11 + 12 + Este es un documento breve que describe el estilo de gestión preferido (o 13 + inventado, dependiendo de a quién le preguntes) para el kernel de Linux. 14 + Está destinado a reflejar el documento 15 + :ref:`translations/sp_SP/process/coding-style.rst <sp_codingstyle>` hasta 16 + cierto punto y está escrito principalmente para evitar responder a [#f1]_ 17 + las mismas preguntas (o similares) una y otra vez. 18 + 19 + El estilo de gestión es muy personal y mucho más difícil de cuantificar 20 + que reglas simples de estilo de codificación, por lo que este documento 21 + puede o no tener relación con la realidad. Comenzó como una broma, pero 22 + eso no significa que no pueda ser realmente cierto. Tendrás que decidir 23 + por ti mismo. 24 + 25 + Por cierto, cuando se hable de “gerente de kernel”, se refiere a las 26 + personas lideres técnicas, no de las personas que hacen la gestión 27 + tradicional dentro de las empresas. Si firmas pedidos de compra o tienes 28 + alguna idea sobre el presupuesto de tu grupo, es casi seguro que no eres 29 + un gerente de kernel. Estas sugerencias pueden o no aplicarse a usted. 30 + 31 + En primer lugar, sugeriría comprar “Seven Habits of Highly Effective 32 + People” y NO leerlo. Quemarlo, es un gran gesto simbólico. 33 + 34 + .. [#f1] Este documento lo hace no tanto respondiendo a la pregunta, sino 35 + haciendo dolorosamente obvio para el interrogador que no tenemos ni idea 36 + de cuál es la respuesta. 37 + 38 + De todos modos, aquí va: 39 + 40 + .. _decisiones: 41 + 42 + 1) Decisiones 43 + ------------- 44 + 45 + Todos piensan que los gerentes toman decisiones, y que la toma de 46 + decisiones en importante. Cuanto más grande y dolorosa sea la decisión, 47 + más grande debe ser el gerente para tomarla. Eso es muy profundo y obvio, 48 + pero en realidad no es cierto. 49 + 50 + El nombre del partido es **evitar** tener que tomar una decisión. En 51 + particular, si alguien te dice “elige (a) o (b), realmente necesitamos 52 + que decidas sobre esto”, estas en problemas como gerente. Es mejor que 53 + las personas a las que diriges conozcan los detalles mejor que tú, así 54 + que, si acuden a ti para tomar una decisión técnica, estas jodido. 55 + Claramente no eres competente para tomar una decisión por ellos. 56 + 57 + (Corolario: Si las personas a las que diriges no conocen los detalles 58 + mejor que tú, también estas jodido, aunque por una razón totalmente 59 + diferente. Es decir, que estas en el trabajo equivocado y que **ellos** 60 + deberían gestionando tu brillantez en su lugar). 61 + 62 + Así que el nombre del partido es **evitar** las decisiones, al menos las 63 + grandes y dolorosas. Tomar decisiones pequeñas y sin consecuencias está 64 + bien, y te hace parecer que sabes lo que estás haciendo, así que lo que 65 + un gerente de kernel necesita hacer es convertir las decisiones grandes 66 + y dolorosas en cosas pequeñas a los que a nadie realmente le importa. 67 + 68 + Ayuda darse cuenta de que la diferencia clave entre una decisión grande 69 + y una pequeña es si puede arreglar su decisión después. Cualquier 70 + decisión se puede hacer pequeña simplemente asegurándose siempre de que 71 + si te equivocaste (u **estarás** equivocado), siempre puede deshacer el 72 + daño más tarde retrocediendo. De repente, llegas a ser doblemente 73 + gerencial por tomar **dos** decisiones intrascendentes - la equivocada 74 + **y** la correcta. 75 + 76 + Y las personas incluso verán eso como un verdadero liderazgo (*tos* 77 + mierda *tos*). 78 + 79 + Por lo tanto, la llave para evitar las grandes decisiones se convierte en 80 + simplemente evitar hacer cosas que no se pueden deshacer. No te dejes 81 + llevar a una esquina del que no puedas escapar. Una rata acorralada puede 82 + ser peligrosa – un gerente acorralado es directamente lamentable. 83 + 84 + Resulta que, dado que nadie sería tan estúpido como para dejar que un 85 + gerente de kernel tenga una gran responsabilidad **de todos modos**, 86 + generalmente es bastante fácil retroceder. Dado que no vas a poder 87 + malgastar grandes cantidades de dinero que tal vez no puedas pagar, lo 88 + único que puedes revertir es una decisión técnica, y ahí retroceder es 89 + muy fácil: simplemente diles a todos que fuiste un bobo incompetente, 90 + pide disculpas y deshaz todo el trabajo inútil que hiciste trabajar a la 91 + gente durante el año pasado. De repente, la decisión que tomaste hace un 92 + año no era una gran decisión después de todo, ya que se podía deshacer 93 + fácilmente. 94 + 95 + Resulta que algunas personas tienen problemas con este enfoque, por dos 96 + razones: 97 + 98 + - admitir que eras un idiota es más difícil de lo que parece. A todos 99 + nos gusta mantener las apariencias, y salir en público a decir que te 100 + equivocaste a veces es muy duro. 101 + - que alguien te diga que lo que trabajaste durante el último año no 102 + valió la pena después de todo también puede ser duro para los pobres 103 + ingenieros humildes, y aunque el **trabajo** real fue bastante fácil 104 + de deshacer simplemente eliminándolo, es posible que hayas perdido 105 + irrevocablemente la confianza de ese ingeniero. Y recuerda: 106 + “irrevocablemente” fue lo que tratamos de evitar en primer lugar, y 107 + tu decisión terminó siendo muy grande después de todo. 108 + 109 + Afortunadamente, estas dos razones pueden mitigarse eficazmente 110 + simplemente admitiendo inicialmente que no tienes ni idea, y diciéndole 111 + a la gente que tu decisión es puramente preliminar, y podría ser la cosa 112 + equivocada. Siempre te debes reservar el derecho de cambiar de opinión, y 113 + hacer que la gente sea muy **consciente** de eso. Y es mucho más fácil 114 + admitir que eres estúpido cuando **aun** no has hecho la cosa realmente 115 + estúpida. 116 + 117 + Entonces, cuando realmente resulta ser estúpido, la gente simplemente 118 + pone los ojos y dice “Ups, otra vez no”. 119 + 120 + Esta admisión preventiva de incompetencia también podría hacer que las 121 + personas que realmente hacen el trabajo piensen dos veces sobre si vale la 122 + pena hacerlo o no. Después de todo, si **ellos** no están seguros de si es 123 + una buena idea, seguro que no deberías alentarlos prometiéndoles que lo 124 + que trabajan será incluido. Haz que al menos lo piensen dos veces antes de 125 + embarcarse en un gran esfuerzo. 126 + 127 + Recuerda: Es mejor que sepan más sobre los detalles que tú, y 128 + generalmente ya piensan que tienen la respuesta a todo. Lo mejor que puede 129 + hacer como gerente no es inculcar confianza, sino más bien una dosis 130 + saludable de pensamiento crítico sobre lo que hacen. 131 + 132 + Por cierto, otra forma de evitar una decisión es quejarse lastimeramente 133 + de “no podemos hacer ambas cosas?” y parecer lamentable. Créeme, funciona. 134 + Si no está claro cuál enfoque es mejor, lo descubrirán. La respuesta puede 135 + terminar siendo que ambos equipos se sientan tan frustrados por la 136 + situación que simplemente se den por vencidos. 137 + 138 + Eso puede sonar como un fracaso, pero generalmente es una señal de que 139 + había algo mal con ambos proyectos, y la razón por la que las personas 140 + involucradas no pudieron decidir fue que ambos estaban equivocados. 141 + Terminas oliendo a rosas y evitaste otra decisión que podrías haber 142 + metido la pata. 143 + 144 + 2) Gente 145 + -------- 146 + 147 + La mayoría de las personas son idiotas, y ser gerente significa que 148 + tendrás que lidiar con eso, y quizás lo más importante, que **ellos** 149 + tienen que lidiar **contigo**. 150 + 151 + Resulta que, si bien es fácil deshacer los errores técnicos, no es tan 152 + fácil deshacer los trastornos de personalidad. Solo tienes que vivir 153 + con los suyos - y el tuyo. 154 + 155 + Sin embargo, para prepararse como gerente del kernel, es mejor recordar 156 + no quemar ningún puente, bombardear a ningún aldeano inocente o alienar 157 + a demasiados desarrolladores del kernel. Resulta que alienar a las 158 + personas es bastante fácil, y desalienarlas es difícil. Por lo tanto, 159 + “alienar” cae inmediatamente debajo del título “no reversible”, y se 160 + convierte en un no-no según :ref:`decisiones`. 161 + 162 + Aquí solo hay algunas reglas simples: 163 + 164 + (1) No llames a la gente pen*ejos (al menos no en público) 165 + (2) Aprende a disculparte cuando olvidaste la regla (1) 166 + 167 + El problema con #1 es que es muy fácil de hacer, ya que puedes decir 168 + “eres un pen*ejo” de millones de manera diferentes [#f2]_, a veces sin 169 + siquiera darte cuenta, y casi siempre con una convicción ardiente de que 170 + tienes razón. 171 + 172 + Y cuanto más convencido estés de que tienes razón (y seamos sinceros, 173 + puedes llamar a casi **cualquiera** un pen*ejo, y a menudo **tendrás** 174 + razón), más difícil termina siendo disculparse después. 175 + 176 + Para resolver este problema, realmente solo tienes dos opciones: 177 + 178 + - Se muy buenos en las disculpas. 179 + - Difunde el “amor” de manera tan uniforme que nadie termina sintiendo 180 + que es atacado injustamente. Hazlo lo suficientemente ingenioso, e 181 + incluso podría divertirse. 182 + 183 + La opción de ser infaliblemente educado realmente no existe. Nadie 184 + confiará en alguien que está ocultando tan claramente su verdadero 185 + carácter. 186 + 187 + .. [#f2] Paul Simon cantó “Cincuenta maneras de dejar a tu amante” porque, 188 + francamente, “Un millón de maneras de decirle a un desarrollador que es 189 + un pen*ejo” no escanea tan bien. Pero estoy seguro de que lo pensó. 190 + 191 + 3) Gente II – el Buen Tipo 192 + -------------------------- 193 + 194 + Aunque resulta que la mayoría de las personas son idiotas, el corolario 195 + de eso es, tristemente, que tú también seas uno, y aunque todos podemos 196 + disfrutar del conocimiento seguro de que somos mejores que la persona 197 + promedio (somos realistas, nadie cree que nunca que son promedio o debajo 198 + del promedio), también debemos admitir que no somos el cuchillo más 199 + afilado alrededor, y habrá otras personas que son menos idiotas que tú. 200 + 201 + Algunas personas reaccionan mal a las personas inteligentes. Otras se 202 + aprovechan de ellos. 203 + 204 + Asegúrate de que tú, como mantenedor del kernel, estás en el segundo 205 + grupo. Aguanta con ellos, porque son las personas que te facilitarán el 206 + trabajo. En particular, podrán tomar tus decisiones por ti, que es de lo 207 + que se trata el juego. 208 + 209 + Así que cuando encuentras a alguien más inteligente que tú, simplemente 210 + sigue adelante. Sus responsabilidades de gestión se convierten en gran 211 + medida en las de decir “Suena como una buena idea, - hazlo sin 212 + restricciones”, o “Eso suena bien, pero ¿qué pasa con xxx?". La segunda 213 + versión en particular es una excelente manera de aprender algo nuevo 214 + sobre “xxx” o parecer **extra** gerencial al señalar algo que la persona 215 + más inteligente no había pensado. En cualquier caso, sales ganando. 216 + 217 + Una cosa para tener en cuenta es darse cuenta de que la grandeza en un 218 + área no necesariamente se traduce en otras áreas. Así que puedes impulsar 219 + a la gente en direcciones específicas, pero seamos realistas, pueden ser 220 + buenos en lo que hacen, y ser malos en todo lo demás. La buena noticia es 221 + que las personas tienden a gravitar naturalmente hacia lo que son buenos, 222 + por lo que no es como si estuvieras haciendo algo irreversible cuando los 223 + impulsas en alguna dirección, simplemente no presiones demasiado. 224 + 225 + 4) Colocar la culpa 226 + ------------------- 227 + 228 + Las cosas saldrán mal, y la gente quiere culpar a alguien. Etiqueta, tú 229 + lo eres. 230 + 231 + En realidad, no es tan difícil aceptar la culpa, especialmente si la gente 232 + se da cuenta de que no fue **toda** tu culpa. Lo que nos lleva a la mejor 233 + manera de asumir la culpa: hacerlo por otra persona. Te sentirás bien por 234 + asumir la caída, ellos se sentirán bien por no ser culpados, y la persona 235 + que perdió toda su colección de pornografía de 36 GB debido a tu 236 + incompetencia admitirá a regañadientes que al menos intentaste escapar 237 + de ella. 238 + 239 + Luego haz que el desarrollador que realmente metió la pata (si puedes 240 + encontrarlo) sepa **en privado** que metió la pata. No solo para que 241 + pueda evitarlo en futuro, sino para que sepan que te deben uno. Y, quizás 242 + aún más importante, también es probable que sea la persona que puede 243 + solucionarlo. Porque, seamos sinceros, seguro que no eres tú. 244 + 245 + Asumir la culpa también es la razón por la que llegas a ser un gerente 246 + en primer lugar. Es parte de lo que hace que la gente confíe en ti y te 247 + permita la gloria potencial porque eres tú quien puede decir “metí la 248 + pata”. Y si has seguido las reglas anteriores, ya serás bastante bueno 249 + para decir eso. 250 + 251 + 5) Cosas que evitar 252 + ------------------- 253 + 254 + Hay una cosa que la gente odia incluso más que ser llamado “pen*ejo”, 255 + y que es ser llamado “pen*ejo” en una voz mojigata. Por lo primero, 256 + puedes disculparte, por lo segundo, realmente, no tendrás la oportunidad. 257 + Es probable que ya no estén escuchando, incluso si de lo contrario haces 258 + un buen trabajo. 259 + 260 + Todos pensamos que somos mejores que los demás, lo que significa que 261 + cuando alguien más se da aires, **realmente** nos molesta. Puedes ser 262 + moral e intelectualmente superior a todos los que te rodean, pero no 263 + trates de hacerlo demasiado obvio a menos que tengas **la intención** 264 + real de irritar a alguien [#f3]_. 265 + 266 + Del mismo modo, no seas demasiado educado o sutil acerca de las cosas. La 267 + cortesía fácilmente termina yendo demasiado lejos y ocultado el problema, 268 + y como dicen “En internet, nadie puede oírte ser sutil”. Usa un gran 269 + objeto contundente para enfatizar el punto, porque realmente no puedes 270 + depender de que las personas entiendan tu punto de otra manera. 271 + 272 + Un poco de humor puede ayudar a suavizar tanto la franqueza como la 273 + moralización. Exagerar hasta el punto de ser ridículo puede reforzar un 274 + punto sin hacer que sea doloroso para el destinatario, quien simplemente 275 + piensa que estas siendo tonto. Por lo tanto, puede ayudarnos a superar el 276 + bloqueo mental personal que todos tenemos sobre la crítica. 277 + 278 + .. [#f3] La pista: Los grupos de noticias de Internet que no están 279 + directamente relacionados con tu trabajo son excelentes maneras de 280 + desahogar tus frustraciones con otras personas. Escribe mensajes 281 + insultantes con una mueca de desprecio solo para entrar en un humor de 282 + vez en cuando, y te sentirás limpio. Eso sí, no te cagues demasiado 283 + cerca de casa. 284 + 285 + 6) ¿Por qué a mí? 286 + ----------------- 287 + 288 + Dado que tu principal responsabilidad parece ser asumir la culpa de los 289 + errores de otras personas y hacer dolorosamente obvio para todos los 290 + demás que eres incompetente, la pregunta obvia es: ¿por qué hacerlo en 291 + primer lugar? 292 + 293 + Pase lo que pase, **tendrás** una sensación inmensa de logro personal por 294 + estar “a cargo”. No importa el hecho de que realmente estés liderando al 295 + tratar de mantenerte al día con todos los demás y correr detrás de ellos 296 + lo más rápido que puedes. Todo el mundo seguirá pensando que eres la 297 + persona a cargo. 298 + 299 + Es un gran trabajo si puedes descifrarlo.
+133
Documentation/translations/sp_SP/process/submit-checklist.rst
··· 1 + .. include:: ../disclaimer-sp.rst 2 + 3 + :Original: Documentation/process/submit-checklist.rst 4 + :Translator: Avadhut Naik <avadhut.naik@amd.com> 5 + 6 + .. _sp_submitchecklist: 7 + 8 + Lista de comprobación para enviar parches del kernel de Linux 9 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 10 + 11 + Aquí hay algunas cosas básicas que los desarrolladores deben hacer si 12 + quieren que sus envíos de parches del kernel sean aceptados más 13 + rápidamente. 14 + 15 + Todo esto está más allá de la documentación que se proporciona en 16 + :ref:`Documentation/translations/sp_SP/process/submitting-patches.rst <sp_submittingpatches>` 17 + y en otros lugares con respecto al envío de parches del kernel de Linux. 18 + 19 + 1) Si utiliza una funcionalidad, #include el archivo que define/declara 20 + esa funcionalidad. No dependa de otros archivos de encabezado que 21 + extraigan los que utiliza. 22 + 23 + 2) Compile limpiamente: 24 + 25 + a) Con las opciones ``CONFIG`` aplicables o modificadas ``=y``, ``=m``, 26 + y ``=n``. Sin advertencias/errores del compilador ``gcc``, ni 27 + advertencias/errores del linker. 28 + 29 + b) Aprobar ``allnoconfig``, ``allmodconfig`` 30 + 31 + c) Compila correctamente cuando se usa ``O=builddir`` 32 + 33 + d) Cualquier documentación o cambios se compilan correctamente sin 34 + nuevas advertencias/errores. Utilice ``make htmldocs`` o 35 + ``make pdfdocs`` para comprobar la compilación y corregir cualquier 36 + problema. 37 + 38 + 3) Se compila en varias arquitecturas de CPU mediante herramientas de 39 + compilación cruzada locales o alguna otra granja de compilación. 40 + 41 + 4) ppc64 es una buena arquitectura para verificar la compilación cruzada 42 + por que tiende a usar ``unsigned long`` para cantidades de 64-bits. 43 + 44 + 5) Verifique su parche para el estilo general según se detalla en 45 + :ref:`Documentation/translations/sp_SP/process/coding-style.rst <sp_codingstyle>`. 46 + Verifique las infracciones triviales con el verificador de estilo de 47 + parches antes de la entrega (``scripts/checkpatch.pl``). 48 + Debería ser capaz de justificar todas las infracciones que permanezcan 49 + en su parche. 50 + 51 + 6) Cualquier opción ``CONFIG`` nueva o modificada no altera el menú de 52 + configuración y se desactiva por defecto, a menos que cumpla con los 53 + criterios de excepción documentados en 54 + ``Documentation/kbuild/kconfig-language.rst`` Atributos del menú: valor por defecto. 55 + 56 + 7) Todas las nuevas opciones de ``Kconfig`` tienen texto de ayuda. 57 + 58 + 8) Ha sido revisado cuidadosamente con respecto a las combinaciones 59 + relevantes de ``Kconfig``. Esto es muy difícil de hacer correctamente 60 + con las pruebas -- la concentración mental da resultados aquí. 61 + 62 + 9) Verifique limpiamente con sparse. 63 + 64 + 10) Use ``make checkstack`` y solucione cualquier problema que encuentre. 65 + 66 + .. note:: 67 + 68 + ``checkstack`` no señala los problemas explícitamente, pero 69 + cualquier función que use más de 512 bytes en la pila es 70 + candidata para el cambio. 71 + 72 + 11) Incluya :ref:`kernel-doc <kernel_doc>` para documentar las API 73 + globales del kernel. (No es necesario para funciones estáticas, pero 74 + también está bien.) Utilice ``make htmldocs`` o ``make pdfdocs`` 75 + para comprobar el :ref:`kernel-doc <kernel_doc>` y solucionar 76 + cualquier problema. 77 + 78 + 12) Ha sido probado con ``CONFIG_PREEMPT``, ``CONFIG_DEBUG_PREEMPT``, 79 + ``CONFIG_DEBUG_SLAB``, ``CONFIG_DEBUG_PAGEALLOC``, ``CONFIG_DEBUG_MUTEXES``, 80 + ``CONFIG_DEBUG_SPINLOCK``, ``CONFIG_DEBUG_ATOMIC_SLEEP`` 81 + ``CONFIG_PROVE_RCU`` y ``CONFIG_DEBUG_OBJECTS_RCU_HEAD`` todos 82 + habilitados simultáneamente. 83 + 84 + 13) Ha sido probado en tiempo de compilación y ejecución con y sin 85 + ``CONFIG_SMP`` y ``CONFIG_PREEMPT``. 86 + 87 + 14) Todas las rutas de código se han ejercido con todas las 88 + características de lockdep habilitadas. 89 + 90 + 15) Todas las nuevas entradas de ``/proc`` están documentadas en 91 + ``Documentation/``. 92 + 93 + 16) Todos los nuevos parámetros de arranque del kernel están documentados 94 + en ``Documentation/admin-guide/kernel-parameters.rst``. 95 + 96 + 17) Todos los nuevos parámetros del módulo están documentados con 97 + ``MODULE_PARM_DESC()``. 98 + 99 + 18) Todas las nuevas interfaces de espacio de usuario están documentadas 100 + en ``Documentation/ABI/``. Consulte ``Documentation/ABI/README`` para 101 + obtener más información. Los parches que cambian las interfaces del 102 + espacio de usuario deben ser CCed a linux-api@vger.kernel.org. 103 + 104 + 19) Se ha comprobado con la inyección de al menos errores de asignación 105 + de slab y página. Consulte ``Documentation/fault-injection/``. 106 + 107 + Si el nuevo código es sustancial, la adición de la inyección de 108 + errores específica del subsistema podría ser apropiada. 109 + 110 + 20) El nuevo código añadido ha sido compilado con ``gcc -W`` (use 111 + ``make KCFLAGS=-W``). Esto generara mucho ruido per es buena para 112 + encontrar errores como "warning: comparison between signed and unsigned". 113 + 114 + 21) Se prueba después de que se haya fusionado en el conjunto de 115 + parches -mm para asegurarse de que siga funcionando con todos los 116 + demás parches en cola y varios cambios en VM, VFS y otros subsistemas. 117 + 118 + 22) Todas las barreras de memoria {p.ej., ``barrier()``, ``rmb()``, 119 + ``wmb()``} necesitan un comentario en el código fuente que explique 120 + la lógica de lo que están haciendo y por qué. 121 + 122 + 23) Si se añaden algún ioctl en el parche, actualice también 123 + ``Documentation/userspace-api/ioctl/ioctl-number.rst``. 124 + 125 + 24) Si su código fuente modificado depende o utiliza cualquiera de las 126 + API o características del kernel que están relacionadas con los 127 + siguientes símbolos ``Kconfig`` entonces pruebe varias compilaciones 128 + con los símbolos ``Kconfig`` relacionados deshabilitados y/o ``=m`` 129 + (si esa opción esta disponible) [no todos estos al mismo tiempo, solo 130 + varias/aleatorias combinaciones de ellos]: 131 + 132 + ``CONFIG_SMP``, ``CONFIG_SYSFS``, ``CONFIG_PROC_FS``, ``CONFIG_INPUT``, ``CONFIG_PCI``, ``CONFIG_BLOCK``, ``CONFIG_PM``, ``CONFIG_MAGIC_SYSRQ`` 133 + ``CONFIG_NET``, ``CONFIG_INET=n`` (pero luego con ``CONFIG_NET=y``).
+155
Documentation/translations/zh_CN/arch/riscv/boot.rst
··· 1 + .. SPDX-License-Identifier: GPL-2.0 2 + .. include:: ../../disclaimer-zh_CN.rst 3 + 4 + :Original: Documentation/arch/riscv/boot.rst 5 + 6 + :翻译: 7 + 8 + 龙进 Jin Long <longjin@dragonos.org> 9 + 10 + ======================== 11 + RISC-V内核启动要求和限制 12 + ======================== 13 + 14 + :Author: Alexandre Ghiti <alexghiti@rivosinc.com> 15 + :Date: 23 May 2023 16 + 17 + 这份文档描述了RISC-V内核对引导加载程序和固件的期望,以及任何开发者在接触 18 + 早期启动过程时必须牢记的约束。在这份文档中, ``早期启动过程`` 指的是在最 19 + 终虚拟映射设置之前运行的任何代码。 20 + 21 + 内核预加载的要求和限制 22 + ====================== 23 + 24 + RISC-V内核对引导加载程序和平台固件有以下要求: 25 + 26 + 寄存器状态 27 + ---------- 28 + 29 + RISC-V内核期望: 30 + 31 + * ``$a0`` 应包含当前核心的hartid。 32 + * ``$a1`` 应包含内存中设备树的地址。 33 + 34 + CSR 寄存器状态 35 + -------------- 36 + 37 + RISC-V内核期望: 38 + 39 + * ``$satp = 0``: 如果存在MMU,必须将其禁用。 40 + 41 + 为常驻固件保留的内存 42 + -------------------- 43 + 44 + RISC-V内核在直接映射中不能映射任何常驻内存或用PMPs保护的内存, 45 + 因此固件必须根据设备树规范 和/或 UEFI规范正确标记这些区域。 46 + 47 + 内核的位置 48 + ---------- 49 + 50 + RISC-V内核期望被放置在PMD边界(对于rv64为2MB对齐,对于rv32为4MB对齐)。 51 + 请注意,如果不是这样,EFI stub 将重定位内核。 52 + 53 + 硬件描述 54 + -------- 55 + 56 + 固件可以将设备树或ACPI表传递给RISC-V内核。 57 + 58 + 设备树可以直接从前一阶段通过$a1寄存器传递给内核,或者在使用UEFI启动时, 59 + 可以通过EFI配置表传递。 60 + 61 + ACPI表通过EFI配置表传递给内核。在这种情况下,EFI stub 仍然会创建一个 62 + 小的设备树。请参阅下面的"EFI stub 和设备树"部分,了解这个设备树的详细 63 + 信息。 64 + 65 + 内核入口 66 + -------- 67 + 68 + 在SMP系统中,有两种方法可以进入内核: 69 + 70 + - ``RISCV_BOOT_SPINWAIT``:固件在内核中释放所有的hart,一个hart赢 71 + 得抽奖并执行早期启动代码,而其他的hart则停在那里等待初始化完成。这种 72 + 方法主要用于支持没有SBI HSM扩展和M模式RISC-V内核的旧固件。 73 + - ``有序启动``:固件只释放一个将执行初始化阶段的hart,然后使用SBI HSM 74 + 扩展启动所有其他的hart。有序启动方法是启动RISC-V内核的首选启动方法, 75 + 因为它可以支持CPU热插拔和kexec。 76 + 77 + UEFI 78 + ---- 79 + 80 + UEFI 内存映射 81 + ~~~~~~~~~~~~~ 82 + 83 + 使用UEFI启动时,RISC-V内核将只使用EFI内存映射来填充系统内存。 84 + 85 + UEFI固件必须解析 ``/reserved-memory`` 设备树节点的子节点,并遵守设备 86 + 树规范,将这些子节点的属性( ``no-map`` 和 ``reusable`` )转换为其正 87 + 确的EFI等价物(参见设备树规范v0.4-rc1的"3.5.4/reserved-memory和 88 + UEFI"部分)。 89 + 90 + RISCV_EFI_BOOT_PROTOCOL 91 + ~~~~~~~~~~~~~~~~~~~~~~~ 92 + 93 + 使用UEFI启动时,EFI stub 需要引导hartid以便将其传递给 ``$a1`` 中的 94 + RISC-V内核。EFI stub使用以下方法之一获取引导hartid: 95 + 96 + - ``RISCV_EFI_BOOT_PROTOCOL`` (**首选**)。 97 + - ``boot-hartid`` 设备树子节点(**已弃用**)。 98 + 99 + 任何新的固件都必须实现 ``RISCV_EFI_BOOT_PROTOCOL``,因为基于设备树 100 + 的方法现已被弃用。 101 + 102 + 早期启动的要求和约束 103 + ==================== 104 + 105 + RISC-V内核的早期启动过程遵循以下约束: 106 + 107 + EFI stub 和设备树 108 + ----------------- 109 + 110 + 使用UEFI启动时,EFI stub 会用与arm64相同的参数补充(或创建)设备树, 111 + 这些参数在Documentation/arch/arm/uefi.rst中的 112 + "UEFI kernel supporton ARM"段落中有描述。 113 + 114 + 虚拟映射安装 115 + ------------ 116 + 117 + 在RISC-V内核中,虚拟映射的安装分为两步进行: 118 + 119 + 1. ``setup_vm()`` 在 ``early_pg_dir`` 中安装一个临时的内核映射,这 120 + 允许发现系统内存。 此时只有内核文本/数据被映射。在建立这个映射时, 121 + 不能进行分配(因为系统内存还未知),所以``early_pg_dir``页表是静 122 + 态分配的(每个级别只使用一个表)。 123 + 124 + 2. ``setup_vm_final()`` 在 ``swapper_pg_dir`` 中创建最终的内核映 125 + 射,并利用发现的系统内存 创建线性映射。在建立这个映射时,内核可以 126 + 分配内存,但不能直接访问它(因为直接映射还不存在),所以它使用fixmap 127 + 区域的临时映射来访问新分配的页表级别。 128 + 129 + 为了让 ``virt_to_phys()`` 和 ``phys_to_virt()`` 能够正确地将直接 130 + 映射地址转换为物理地址,它们需要知道DRAM的起始位置。这发生在步骤1之后, 131 + 就在步骤2安装直接映射之前(参见arch/riscv/mm/init.c中的 132 + ``setup_bootmem()`` 函数)。在安装最终虚拟映射之前使用这些宏时必须 133 + 仔细检查。 134 + 135 + 通过fixmap进行设备树映射 136 + ------------------------ 137 + 138 + 由于 ``reserved_mem`` 数组是用 ``setup_vm()`` 建立的虚拟地址初始化 139 + 的,并且与``setup_vm_final()``建立的映射一起使用,RISC-V内核使用 140 + fixmap区域来映射设备树。这确保设备树可以通过两种虚拟映射访问。 141 + 142 + Pre-MMU执行 143 + ----------- 144 + 145 + 在建立第一个虚拟映射之前,需要运行一些代码。这些包括第一个虚拟映射的安装本身, 146 + 早期替代方案的修补,以及内核命令行的早期解析。这些代码必须非常小心地编译,因为: 147 + 148 + - ``-fno-pie``:这对于使用``-fPIE``的可重定位内核是必需的,否则,任何对 149 + 全局符号的访问都将通过 GOT进行,而GOT只是虚拟地重新定位。 150 + - ``-mcmodel=medany``:任何对全局符号的访问都必须是PC相对的,以避免在设 151 + 置MMU之前发生任何重定位。 152 + - *所有* 的仪表化功能也必须被禁用(包括KASAN,ftrace和其他)。 153 + 154 + 由于使用来自不同编译单元的符号需要用这些标志编译该单元,我们建议尽可能不要使用 155 + 外部符号。
+1
Documentation/translations/zh_CN/arch/riscv/index.rst
··· 17 17 .. toctree:: 18 18 :maxdepth: 1 19 19 20 + boot 20 21 boot-image-header 21 22 vm-layout 22 23 patch-acceptance
+1 -1
Documentation/translations/zh_CN/core-api/printk-basics.rst
··· 100 100 101 101 为了调试,还有两个有条件编译的宏: 102 102 pr_debug()和pr_devel(),除非定义了 ``DEBUG`` (或者在pr_debug()的情况下定义了 103 - ``CONFIG_DYNAMIC_DEBUG`` ),否则它们会被编译。 103 + ``CONFIG_DYNAMIC_DEBUG`` ),否则它们不会被编译。 104 104 105 105 106 106 函数接口
+1 -4
Documentation/translations/zh_CN/dev-tools/index.rst
··· 14 14 有关测试专用工具的简要概述,参见 15 15 Documentation/translations/zh_CN/dev-tools/testing-overview.rst 16 16 17 - .. class:: toc-title 18 - 19 - 目录 20 - 21 17 .. toctree:: 18 + :caption: 目录 22 19 :maxdepth: 2 23 20 24 21 testing-overview
+1 -1
Documentation/translations/zh_CN/dev-tools/testing-overview.rst
··· 3 3 .. include:: ../disclaimer-zh_CN.rst 4 4 5 5 :Original: Documentation/dev-tools/testing-overview.rst 6 - :Translator: 胡皓文 Hu Haowen <src.res.211@gmail.com> 6 + :Translator: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 7 7 8 8 ============ 9 9 内核测试指南
+1 -2
Documentation/translations/zh_CN/driver-api/gpio/index.rst
··· 14 14 通用型输入/输出(GPIO) 15 15 ======================= 16 16 17 - 目录: 18 - 19 17 .. toctree:: 18 + :caption: 目录 20 19 :maxdepth: 2 21 20 22 21 legacy
+1 -4
Documentation/translations/zh_CN/driver-api/index.rst
··· 17 17 内核提供了各种各样的接口来支持设备驱动的开发。这份文档只是对其中一些接口进行了 18 18 一定程度的整理——希望随着时间的推移,它能变得更好!可用的小节可以在下面看到。 19 19 20 - .. class:: toc-title 21 - 22 - 目录列表: 23 - 24 20 .. toctree:: 21 + :caption: 目录列表 25 22 :maxdepth: 2 26 23 27 24 gpio/index
+2 -3
Documentation/translations/zh_CN/process/development-process.rst
··· 8 8 内核开发过程指南 9 9 ================ 10 10 11 - 内容: 11 + 本文档的目的是帮助开发人员(及其经理)以最小的挫折感与开发社区合作。它试图记录这个社区如何以一种不熟悉Linux内核开发(或者实际上是自由软件开发)的人可以访问的方式工作。虽然这里有一些技术资料,但这是一个面向过程的讨论,不需要深入了解内核编程就可以理解。 12 12 13 13 .. toctree:: 14 + :caption: 内容 14 15 :numbered: 15 16 :maxdepth: 2 16 17 ··· 23 22 6.Followthrough 24 23 7.AdvancedTopics 25 24 8.Conclusion 26 - 27 - 本文档的目的是帮助开发人员(及其经理)以最小的挫折感与开发社区合作。它试图记录这个社区如何以一种不熟悉Linux内核开发(或者实际上是自由软件开发)的人可以访问的方式工作。虽然这里有一些技术资料,但这是一个面向过程的讨论,不需要深入了解内核编程就可以理解。
+45 -8
Documentation/translations/zh_CN/process/index.rst
··· 5 5 6 6 .. include:: ../disclaimer-zh_CN.rst 7 7 8 - :Original: :ref:`Documentation/process/index.rst <process_index>` 9 - :Translator: Alex Shi <alex.shi@linux.alibaba.com> 8 + :Original: Documentation/process/index.rst 10 9 11 - .. _cn_process_index: 10 + :翻译: 11 + 12 + Alex Shi <alex.shi@linux.alibaba.com> 12 13 13 14 ======================== 14 15 与Linux 内核社区一起工作 ··· 24 23 .. toctree:: 25 24 :maxdepth: 1 26 25 26 + license-rules 27 27 howto 28 28 code-of-conduct 29 29 code-of-conduct-interpretation 30 + development-process 30 31 submitting-patches 31 32 programming-language 32 33 coding-style 33 - development-process 34 + maintainer-pgp-guide 34 35 email-clients 35 - license-rules 36 36 kernel-enforcement-statement 37 37 kernel-driver-statement 38 + 39 + TODOLIST: 40 + 41 + * handling-regressions 42 + * maintainer-handbooks 43 + 44 + 安全方面, 请阅读: 45 + 46 + .. toctree:: 47 + :maxdepth: 1 48 + 49 + embargoed-hardware-issues 50 + 51 + TODOLIST: 52 + 53 + * security-bugs 38 54 39 55 其它大多数开发人员感兴趣的社区指南: 40 56 ··· 59 41 .. toctree:: 60 42 :maxdepth: 1 61 43 62 - submit-checklist 63 44 stable-api-nonsense 64 - stable-kernel-rules 65 45 management-style 66 - embargoed-hardware-issues 46 + stable-kernel-rules 47 + submit-checklist 48 + 49 + TODOLIST: 50 + 51 + * changes 52 + * kernel-docs 53 + * deprecated 54 + * maintainers 55 + * researcher-guidelines 56 + * contribution-maturity-model 57 + 67 58 68 59 这些是一些总体性技术指南,由于不大好分类而放在这里: 69 60 ··· 81 54 82 55 magic-number 83 56 volatile-considered-harmful 57 + ../arch/riscv/patch-acceptance 58 + ../core-api/unaligned-memory-access 59 + 60 + TODOLIST: 61 + 62 + * applying-patches 63 + * backporting 64 + * adding-syscalls 65 + * botching-up-ioctls 66 + * clang-format 84 67 85 68 .. only:: subproject and html 86 69
+39 -30
Documentation/translations/zh_CN/process/magic-number.rst
··· 1 - .. _cn_magicnumbers: 2 - 3 1 .. include:: ../disclaimer-zh_CN.rst 4 2 5 - :Original: :ref:`Documentation/process/magic-number.rst <magicnumbers>` 3 + :Original: Documentation/process/magic-number.rst 6 4 7 - 如果想评论或更新本文的内容,请直接发信到LKML。如果你使用英文交流有困难的话,也可 8 - 以向中文版维护者求助。如果本翻译更新不及时或者翻译存在问题,请联系中文版维护者:: 5 + :翻译: 9 6 10 - 中文版维护者: 贾威威 Jia Wei Wei <harryxiyou@gmail.com> 11 - 中文版翻译者: 贾威威 Jia Wei Wei <harryxiyou@gmail.com> 12 - 中文版校译者: 贾威威 Jia Wei Wei <harryxiyou@gmail.com> 7 + 贾威威 Jia Wei Wei <harryxiyou@gmail.com> 8 + 9 + :校译: 10 + 11 + 司延腾 Yanteng Si <siyanteng@loongson.cn> 13 12 14 13 Linux 魔术数 15 14 ============ 16 15 17 - 这个文件是有关当前使用的魔术值注册表。当你给一个结构添加了一个魔术值,你也应该把这个魔术值添加到这个文件,因为我们最好把用于各种结构的魔术值统一起来。 16 + 这个文件是有关当前使用的魔术值注册表。当你给一个结构体添加了一个魔术值,你也 17 + 应该把这个魔术值添加到这个文件,因为我们最好把用于各种结构体的魔术值统一起来。 18 18 19 - 使用魔术值来保护内核数据结构是一个非常好的主意。这就允许你在运行期检查(a)一个结构是否已经被攻击,或者(b)你已经给一个例行程序通过了一个错误的结构。后一种情况特别地有用---特别是当你通过一个空指针指向结构体的时候。tty源码,例如,经常通过特定驱动使用这种方法并且反复地排列特定方面的结构。 19 + 使用魔术值来保护内核数据结构是一个 **非常好的主意** 。这就允许你在运行时检 20 + 查一个结构体(a)是否已经被攻击,或者(b)你已经给一个例程传递了一个错误的结构 21 + 体。最后一种情况特别地有用---特别是当你通过一个空指针指向结构体的时候。例如, 22 + tty源码经常通过特定驱动使用这种方法用来反复地排列特定方面的结构体。 20 23 21 - 使用魔术值的方法是在结构的开始处声明的,如下:: 24 + 使用魔术值的方法是在结构体的开头声明它们,如下:: 22 25 23 26 struct tty_ldisc { 24 27 int magic; 25 28 ... 26 29 }; 27 30 28 - 当你以后给内核添加增强功能的时候,请遵守这条规则!这样就会节省数不清的调试时间,特别是一些古怪的情况,例如,数组超出范围并且重新写了超出部分。遵守这个规则,这些情况可以被快速地,安全地避免。 31 + 当你以后给内核添加增强功能的时候,请遵守这条规则!这样就会节省数不清的调试 32 + 时间,特别是一些古怪的情况,例如,数组超出范围并且覆盖写了超出部分。利用这 33 + 个规则,这些情况可以被快速地,安全地检测到这些案例。 29 34 30 - Theodore Ts'o 31 - 31 Mar 94 35 + 变更日志:: 32 36 33 - 给当前的Linux 2.1.55添加魔术表。 37 + Theodore Ts'o 38 + 31 Mar 94 34 39 35 - Michael Chastain 36 - <mailto:mec@shout.net> 37 - 22 Sep 1997 40 + 给当前的Linux 2.1.55添加魔术表。 38 41 39 - 现在应该最新的Linux 2.1.112.因为在特性冻结期间,不能在2.2.x前改变任何东西。这些条目被数域所排序。 42 + Michael Chastain 43 + <mailto:mec@shout.net> 44 + 22 Sep 1997 40 45 41 - Krzysztof G.Baranowski 42 - <mailto: kgb@knm.org.pl> 43 - 29 Jul 1998 46 + 现在应该最新的Linux 2.1.112.因为在特性冻结期间,不能在2.2.x前改变任 47 + 何东西。这些条目被数域所排序。 44 48 45 - 更新魔术表到Linux 2.5.45。刚好越过特性冻结,但是有可能还会有一些新的魔术值在2.6.x之前融入到内核中。 49 + Krzysztof G.Baranowski 50 + <mailto: kgb@knm.org.pl> 51 + 29 Jul 1998 46 52 47 - Petr Baudis 48 - <pasky@ucw.cz> 49 - 03 Nov 2002 53 + 更新魔术表到Linux 2.5.45。刚好越过特性冻结,但是有可能还会有一些新的魔 54 + 术值在2.6.x之前融入到内核中。 50 55 51 - 更新魔术表到Linux 2.5.74。 56 + Petr Baudis 57 + <pasky@ucw.cz> 58 + 03 Nov 2002 52 59 53 - Fabian Frederick 54 - <ffrederick@users.sourceforge.net> 55 - 09 Jul 2003 60 + 更新魔术表到Linux 2.5.74。 61 + 62 + Fabian Frederick 63 + <ffrederick@users.sourceforge.net> 64 + 09 Jul 2003 56 65 57 66 ===================== ================ ======================== ========================================== 58 67 魔术数名 数字 结构 文件
+789
Documentation/translations/zh_CN/process/maintainer-pgp-guide.rst
··· 1 + .. SPDX-License-Identifier: GPL-2.0 2 + .. include:: ../disclaimer-zh_CN.rst 3 + 4 + :Original: Documentation/process/maintainer-pgp-guide.rst 5 + 6 + :翻译: 7 + 8 + 司延腾 Yanteng Si <siyanteng@loongson.cn> 9 + 10 + :校译: 11 + 12 + 13 + =================== 14 + 内核维护者 PGP 指南 15 + =================== 16 + 17 + :作者: Konstantin Ryabitsev <konstantin@linuxfoundation.org> 18 + 19 + 本文档面向 Linux 内核开发者,特别是子系统维护人员。文档中含有Linux 基金 20 + 会发布的更通用的 `保护代码完整性`_ 指南中讨论的内容子集。阅读该文档,以更 21 + 深入地讨论本指南中提到的一些主题。 22 + 23 + .. _`保护代码完整性`: https://github.com/lfit/itpol/blob/master/protecting-code-integrity.md 24 + 25 + PGP 在 Linux 内核开发中的作用 26 + ============================= 27 + 28 + PGP 有助于确保 Linux 内核开发社区产出代码的完整性,并在较小程度上,通过 29 + PGP 签名的电子邮件交换,在开发者之间建立可信的交流渠道。 30 + 31 + Linux 内核源代码主要有两种(维护)方式: 32 + 33 + - 分布式源仓库 (git) 34 + - 定期发布快照 (tarballs) 35 + 36 + git 仓库和 tarball 都带有创建官方内核版本的内核开发者的 PGP 签名。这 37 + 些签名提供了加密保证,即保证 kernel.org 或任何其他镜像提供的可下载版本 38 + 与这些开发者在其工作站上的版本相同。为此: 39 + 40 + - git 仓库在所有标签上提供 PGP 签名 41 + - tarball 为所有下载提供独立的 PGP 签名 42 + 43 + 信任开发者,不要信基础设施 44 + -------------------------- 45 + 46 + 自从 2011 年 kernel.org 核心系统遭到入侵以来,内核存档项目的主要运行原 47 + 则就是假定基础设施的任何部分都可能随时受到入侵。因此,管理员特意采取措施, 48 + 强调必须始终信任开发者,不能信任代码托管基础设施,无论后者的安全实践有多好。 49 + 50 + 上述指导原则正是需要本指南的原因。希望确保通过对开发者的信任,我们不会简 51 + 单地将未来潜在安全事件的责任归咎于其他人。目的是提供一套指导开发者可以用 52 + 来创建安全的工作环境并保护用于建立 Linux 内核本身完整性的 PGP 密钥。 53 + 54 + PGP 工具 55 + ======== 56 + 57 + 使用 GnuPG 2.2 或更高版本 58 + ------------------------- 59 + 60 + 默认情况下,你的发行版应该已经安装了 GnuPG,你只需要验证你使用的是相当新的 61 + 版本即可。要检查,请运行:: 62 + 63 + $ gpg --version | head -n1 64 + 65 + 如果你有 2.2 或更高版本,那么你就可以开始了。如果你的版本早于 2.2,则本指 66 + 南中的某些命令可能不起作用。 67 + 68 + 配置 gpg-agent 选项 69 + ~~~~~~~~~~~~~~~~~~~ 70 + 71 + GnuPG agent是一个辅助工具,每当你使用该命令时,它都会自动启动gpg,并在 72 + 后台运行,目的是缓存私钥密码。你应该知道两个选项,以便调整密码何时从缓存 73 + 过期: 74 + 75 + - ``default-cache-ttl`` (秒): 如果在生命周期结束之前再次使用相同的 76 + 密钥,倒计时将重置为另一段时间。默认值为 600(10 分钟)。 77 + - ``max-cache-ttl`` (秒): 无论你自输入初始密码以来多久使用过密钥, 78 + 如果最大生存时间倒计时结束,你都必须再次输入密码。默认值为 30 分钟。 79 + 80 + 如果你发现这些默认值太短(或太长),你可以编辑 ``~/.gnupg/gpg-agent.conf`` 81 + 文件以设置你自己的值:: 82 + 83 + # 常规ttl设置为30分钟,最大ttl设置为2小时 84 + default-cache-ttl 1800 85 + max-cache-ttl 7200 86 + 87 + .. note:: 88 + 89 + 不需要在 shell 会话开始时手动启动 gpg-agent。你可能需要检查 90 + rc 文件来删除旧版本 GnuPG 中的所有内容,因为它可能不再做正确 91 + 的事情。 92 + 93 + 保护你的 PGP 密钥 94 + ================= 95 + 96 + 本指南假定你已经拥有用于 Linux 内核开发目的的 PGP 密钥。如果你还没 97 + 有,请参阅前面提到的 "`保护代码完整性`_" 文档,以获取有关如何创建新 98 + 密钥的指导。 99 + 100 + 如果你当前的密钥低于 2048 位 (RSA),你还应该创建一个新密钥。 101 + 102 + 了解 PGP 子密钥 103 + --------------- 104 + 105 + PGP 密钥很少由单个密钥对组成 - 通常它是独立子密钥的集合,这些子密钥 106 + 可根据其功能用于不同的目的,并在创建时分配。PGP 定义了密钥可以具有的 107 + 四种功能: 108 + 109 + - **[S]** 密钥可用于签名 110 + - **[E]** 密钥可用于加密 111 + - **[A]** 密钥可用于身份验证 112 + - **[C]** 密钥可用于验证其他密钥 113 + 114 + 具有 **[C]** 功能的密钥通常称为“主”密钥,但该术语具有误导性,因为 115 + 它意味着可以使用Certify密钥来代替同一链上的任何其他子密钥(如物理 116 + “主密钥”可用于打开为其他钥匙制作的锁)。由于情况并非如此,本指南将 117 + 其称为“认证密钥”以避免任何歧义。 118 + 119 + 充分理解以下内容至关重要: 120 + 121 + 1. 所有子项彼此完全独立。如果你丢失了私有子密钥,则无法从链上的任何 122 + 其他私钥恢复或重新创建它。 123 + 2. 除 Certify 密钥外,可以有多个具有相同功能的子密钥(例如,你可 124 + 以有 2 个有效的加密子密钥、3 个有效的签名子密钥,但只有 1 个有 125 + 效的认证子密钥)。所有子密钥都是完全独立的——加密到一个 **[E]** 126 + 子密钥的信息(messages)无法使用你可能拥有的任何其他 **[E]** 127 + 子密钥解密。 128 + 3. 单个子密钥可能具有多种功能(例如,你的 **[C]** 密钥也可以是你 129 + 的 **[S]** 密钥)。 130 + 131 + 携带 **[C]** (证明)能力的密钥是唯一可以用来指示与其他密钥的关系 132 + 的密钥。仅 **[C]** 密钥可用于: 133 + 134 + - 添加或撤销具有 S/E/A 功能的其他密钥(子密钥) 135 + - 添加、更改或撤销与密钥关联的身份 (uid) 136 + - 添加或更改其本身或任何子密钥的到期日期 137 + - 出于信任网络的目的签署其他人的密钥 138 + 139 + 默认情况下,GnuPG 在生成新密钥时创建以下内容: 140 + 141 + - 一个子密钥同时具有认证和签名功能 (**[SC]**) 142 + - 具有加密功能的单独子密钥 (**[E]**) 143 + 144 + 如果你在生成密钥时使用了默认参数,那么这就是你将得到的。你可以通过 145 + 运行命令来验证,例如: ``gpg --list-secret-keys`` 146 + 147 + :: 148 + 149 + sec ed25519 2022-12-20 [SC] [expires: 2024-12-19] 150 + 000000000000000000000000AAAABBBBCCCCDDDD 151 + uid [ultimate] Alice Dev <adev@kernel.org> 152 + ssb cv25519 2022-12-20 [E] [expires: 2024-12-19] 153 + 154 + 在 ``sec`` 这行下面长长的一行就是你的密钥指纹-无论在下文任何地方 155 + 看到 ``[fpr]`` 都指的是这40个字符。 156 + 157 + 确保你的密码强度高 158 + ------------------ 159 + 160 + GnuPG 在将私钥存储到磁盘之前使用密码对其进行加密。这样,即使你的 161 + ``.gnupg`` 目录全部泄露或被盗,攻击者在没有事先获取密码来解密的 162 + 情况下也无法使用你的私钥。 163 + 164 + 你的私钥受到强密码保护是绝对必要的。要设置或更改它,请使用:: 165 + 166 + $ gpg --change-passphrase [fpr] 167 + 168 + 创建一个单独的签名子密钥 169 + ------------------------ 170 + 171 + 我们的目的是通过将你的证书密钥移动到离线媒介来保护它,因此如果你只 172 + 有组合的 **[SC]** 密钥,那么你应该创建一个单独的签名子密钥:: 173 + 174 + $ gpg --quick-addkey [fpr] ed25519 sign 175 + 176 + .. note:: GnuPG 中的 ECC 支持 177 + 178 + 请注意,如果你打算使用不支持 ED25519 ECC 密钥的硬件密钥,则 179 + 应选择“nistp256”或“ed25519”。请参阅下面有关推荐硬件设备的 180 + 部分。 181 + 182 + 183 + 备份你的证书密钥以进行灾难恢复 184 + ------------------------------ 185 + 186 + 你的 PGP 密钥上来自其他开发者的签名越多,出于灾难恢复的原因,你就越 187 + 有理由创建一个位于数字媒体之外的备份版本。 188 + 189 + 创建私钥的可打印硬拷贝的最佳方法是使用 ``paperkey`` 为此目的编写 190 + 的软件。有关输出格式及其相对于其他解决方案的优势的更多详细信息,请参 191 + 阅 ``paperkey`` 参考资料。大多数发行版都应该已经打包了 Paperkey。 192 + 193 + 运行以下命令来创建私钥的硬拷贝备份:: 194 + 195 + $ gpg --export-secret-key [fpr] | paperkey -o /tmp/key-backup.txt 196 + 197 + 打印出该文件(或将输出直接传输到 lpr),然后用笔在纸的边缘写下你的密 198 + 码。 **强烈建议这样做**,因为密钥打印输出仍然使用该密码进行加密,并且 199 + 如果你更改了它,你将不记得创建备份时它曾经是什么 - *保证*。 200 + 201 + 将生成的打印输出和手写密码放入信封中,并存放在安全且受到良好保护的地 202 + 方,最好远离你的家,例如银行保险柜。 203 + 204 + .. note:: 205 + 206 + 你的打印机可能不再是连接到并行端口的简单哑设备,但由于输出仍然使 207 + 用你的密码进行加密,因此即使“云端打印”的现代打印机也应该保持相 208 + 对安全的操作 209 + 210 + 备份整个 GnuPG 目录 211 + ------------------- 212 + 213 + .. warning:: 214 + 215 + **!!!不要跳过这个步骤!!!** 216 + 217 + 如果你需要恢复 PGP 密钥,拥有一个随时可用的备份非常重要。这与我们 218 + 所做的灾难级准备不同 ``paperkey`` 。每当你需要使用你的证书密钥时, 219 + 例如在会议和峰会后更改你自己的密钥或签署其他人的密钥时,你还将依赖 220 + 这些外部副本。 221 + 222 + 首先获取一个小型 USB “拇指” 驱动器(最好是两个!),用于备份目的。 223 + 你需要使用 LUKS 对其进行加密——请参阅你的发行版文档以了解如何完成 224 + 此操作。 225 + 226 + 对于加密密码,你可以使用与 PGP 密钥相同的密码。 227 + 228 + 加密过程完成后,重新插入 USB 驱动器并确保其正确安装。将整个 ``.gnupg`` 229 + 目录复制到加密存储:: 230 + 231 + $ cp -a ~/.gnupg /media/disk/foo/gnupg-backup 232 + 233 + 你现在应该测试一下,确保一切依然能正常工作:: 234 + 235 + $ gpg --homedir=/media/disk/foo/gnupg-backup --list-key [fpr] 236 + 237 + 如果没有出现任何错误,那么就可以开始了。卸下 USB 驱动器,给它贴上 238 + 明显的标签,这样下次需要使用随机 USB 驱动器时就不会把它吹走,然后 239 + 放在安全的地方 - 但不要太远,因为你每次都需要使用它时不时地用于诸 240 + 如编辑身份、添加或撤销子密钥或签署其他人的密钥之类的事情。 241 + 242 + 从你的 homedir 中删除 Certify 密钥 243 + ---------------------------------- 244 + 245 + 我们的主目录中的文件并没有我们想象的那么受到保护。它们可以通过多种 246 + 不同的方式泄露或被盗: 247 + 248 + - 在制作快速主目录备份以设置新工作站时意外发生 249 + - 系统管理员的疏忽或恶意 250 + - 通过不安全的备份 251 + - 通过桌面应用程序(浏览器、pdf 查看器等)中的恶意软件 252 + - 跨越国界时通过胁迫 253 + 254 + 使用良好的密码短语保护你的密钥极大地有助于降低上述任何风险,但密码 255 + 短语可以通过键盘记录器、肩窥或任何其他方式发现。因此,建议的设置是 256 + 从主目录中删除你的证书密钥并将其存储在离线存储中。 257 + 258 + .. warning:: 259 + 260 + 请参阅上一节并确保你已完整备份 GnuPG 目录。如果你没有可用的 261 + 备份,我们要做的事情将使你的密钥毫无用处! 262 + 263 + 首先,确定你的证书密钥的keygrip:: 264 + 265 + $ gpg --with-keygrip --list-key [fpr] 266 + 267 + 输出将是这样的:: 268 + 269 + pub ed25519 2022-12-20 [SC] [expires: 2022-12-19] 270 + 000000000000000000000000AAAABBBBCCCCDDDD 271 + Keygrip = 1111000000000000000000000000000000000000 272 + uid [ultimate] Alice Dev <adev@kernel.org> 273 + sub cv25519 2022-12-20 [E] [expires: 2022-12-19] 274 + Keygrip = 2222000000000000000000000000000000000000 275 + sub ed25519 2022-12-20 [S] 276 + Keygrip = 3333000000000000000000000000000000000000 277 + 278 + 找到该线 ``pub`` 下方的keygrip项 (位于“认证密钥指纹”的正下方)。 279 + 这将直接对应于你``~/.gnupg`` 目录中的一个文件:: 280 + 281 + $ cd ~/.gnupg/private-keys-v1.d 282 + $ ls 283 + 1111000000000000000000000000000000000000.key 284 + 2222000000000000000000000000000000000000.key 285 + 3333000000000000000000000000000000000000.key 286 + 287 + 你所要做的只是删除与证书密钥 keygrip 对应的 .key 文件:: 288 + 289 + $ cd ~/.gnupg/private-keys-v1.d 290 + $ rm 1111000000000000000000000000000000000000.key 291 + 292 + 现在,如果你发出命令 ``--list-secret-keys`` ,它将显示证书密钥丢 293 + 失( 表示 ``#`` 它不可用):: 294 + 295 + $ gpg --list-secret-keys 296 + sec# ed25519 2022-12-20 [SC] [expires: 2024-12-19] 297 + 000000000000000000000000AAAABBBBCCCCDDDD 298 + uid [ultimate] Alice Dev <adev@kernel.org> 299 + ssb cv25519 2022-12-20 [E] [expires: 2024-12-19] 300 + ssb ed25519 2022-12-20 [S] 301 + 302 + 你还应该删除 ``~/.gnupg``目录中的所有 ``secring.gpg`` 文件 ,这些 303 + 文件可能是以前版本的 GnuPG 留下的。 304 + 305 + 如果你没有“private-keys-v1.d”目录 306 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 307 + 308 + 如果你没有 ``~/.gnupg/private-keys-v1.d`` 目录,那么你的密钥仍存 309 + 储在 GnuPG v1 使用的旧文件 ``secring.gpg`` 中。对密钥进行任何更改 310 + (例如更改密码或添加子密钥)应该会自动转换旧 ``secring.gpg`` 格式以 311 + 供使用 ``private-keys-v1.d`` 。 312 + 313 + 完成此操作后,请确保删除过时的 ``secring.gpg`` 文件,其中仍然包含你 314 + 的私钥。 315 + 316 + 317 + 将子密钥移至专用加密设备 318 + ======================== 319 + 320 + 尽管 Certify 密钥现在不会被泄露或被盗,但子密钥仍然位于你的主目录中。 321 + 任何设法获得这些内容的人都将能够解密你的通信或伪造你的签名(如果他们知 322 + 道密码)。此外,每次执行 GnuPG 操作时,密钥都会加载到系统内存中,并 323 + 可能被足够高级的恶意软件(例如 Meltdown 和 Spectre)从那里窃取。 324 + 325 + 完全保护密钥的最佳方法是将它们转移到能够进行智能卡操作的专用硬件设备上。 326 + 327 + 智能卡的好处 328 + ------------ 329 + 330 + 智能卡包含一个加密芯片,能够存储私钥并直接在卡本身上执行加密操作。由于 331 + 密钥内容永远不会离开智能卡,因此插入硬件设备的计算机的操作系统无法自行 332 + 检索私钥。这与我们之前用于备份目的的加密 USB 存储设备有很大不同——当 333 + USB 设备插入并安装时,操作系统能够访问私钥内容。 334 + 335 + 使用外部加密 USB 介质并不能替代具有智能卡功能的设备。 336 + 337 + 可用的智能卡设备 338 + ---------------- 339 + 340 + 除非你的所有笔记本电脑和工作站都有智能卡读卡器,否则最简单的方法是获 341 + 取实现智能卡功能的专用 USB 设备。有多种选择:: 342 + 343 + - `Nitrokey Start`_: 开放硬件和免费软件,日本基于FSI的 `Gnuk` 。 344 + 少数支持 ED25519 ECC 密钥的商用设备之一,但提供的安全功能最少 345 + (例如防篡改或某些旁路攻击)。 346 + - `Nitrokey Pro 2`_: 与 Nitrokey Start 类似,但更防篡改并提供 347 + 更多安全功能。Pro 2 支持 ECC 加密 (NISTP)。 348 + - `Yubikey 5`_: 专有硬件和软件,但比 Nitrokey Pro 便宜,并且以 349 + USB-C 形式提供,对于较新的笔记本电脑更有用。提供额外的安全功能, 350 + 例如 FIDO U2F 等,现在终于支持 NISTP 和 ED25519 ECC 密钥。 351 + 352 + 你的选择将取决于成本、你所在地理区域的货运便利性以及开放/专有硬件考虑 353 + 因素。 354 + 355 + .. note:: 356 + 357 + 如果你位列于 MAINTAINERS 中或在 kernel.org 上拥有帐户,则你有 358 + 资格获得Linux 基金会提供的_`qualify for a free Nitrokey Start` 。 359 + 360 + .. _`Nitrokey Start`: https://shop.nitrokey.com/shop/product/nitrokey-start-6 361 + .. _`Nitrokey Pro 2`: https://shop.nitrokey.com/shop/product/nkpr2-nitrokey-pro-2-3 362 + .. _`Yubikey 5`: https://www.yubico.com/products/yubikey-5-overview/ 363 + .. _Gnuk: https://www.fsij.org/doc-gnuk/ 364 + .. _`qualify for a free Nitrokey Start`: https://www.kernel.org/nitrokey-digital-tokens-for-kernel-developers.html 365 + 366 + 配置你的智能卡设备 367 + ------------------ 368 + 369 + 当你将智能卡设备插入任何现代 Linux 工作站时,它就应该可以正常工作 370 + (TM)。你可以通过运行来验证它:: 371 + 372 + $ gpg --card-status 373 + 374 + 如果你看到完整的智能卡详细信息,那么你就可以开始了。不幸的是,对所有 375 + 可能无法正常工作的原因进行故障排除超出了本指南的范围。如果你在使该卡 376 + 与 GnuPG 配合使用时遇到问题,请通过常规支持渠道寻求帮助。 377 + 378 + 要配置你的智能卡,你需要使用 GnuPG 菜单系统,因为没有方便的命令行开 379 + 关:: 380 + 381 + $ gpg --card-edit 382 + [...omitted...] 383 + gpg/card> admin 384 + Admin commands are allowed 385 + gpg/card> passwd 386 + 387 + 你应该设置用户 PIN (1)、管理员 PIN (3) 和重置代码 (4)。请确保将 388 + 这些信息记录并存储在安全的地方,尤其是管理员 PIN 码和重置代码(它允 389 + 许你完全擦除智能卡)。你很少需要使用管理员 PIN 码,如果你不记录它, 390 + 你将不可避免地忘记它是什么。 391 + 392 + 回到主卡菜单,你还可以设置其他值(例如姓名、性别、登录数据等),但这 393 + 不是必需的,并且如果你丢失智能卡,还会泄露有关智能卡的信息。 394 + 395 + .. note:: 396 + 397 + 尽管名称为“PIN”,但卡上的用户 PIN 和管理员 PIN 都不需要是数字。 398 + 399 + .. warning:: 400 + 401 + 某些设备可能要求你将子密钥移至设备上,然后才能更改密码。请检查设 402 + 备制造商提供的文档。 403 + 404 + 将子密钥移至你的智能卡 405 + ---------------------- 406 + 407 + 退出卡菜单(使用“q”)并保存所有更改。接下来,让我们将子密钥移至智能卡 408 + 上。对于大多数操作,你将需要 PGP 密钥密码和卡的管理员 PIN:: 409 + 410 + $ gpg --edit-key [fpr] 411 + 412 + Secret subkeys are available. 413 + 414 + pub ed25519/AAAABBBBCCCCDDDD 415 + created: 2022-12-20 expires: 2024-12-19 usage: SC 416 + trust: ultimate validity: ultimate 417 + ssb cv25519/1111222233334444 418 + created: 2022-12-20 expires: never usage: E 419 + ssb ed25519/5555666677778888 420 + created: 2017-12-07 expires: never usage: S 421 + [ultimate] (1). Alice Dev <adev@kernel.org> 422 + 423 + gpg> 424 + 425 + 使用 ``--edit-key`` 使我们再次进入菜单模式,你会注意到按键列表有点 426 + 不同。从现在开始,所有命令都在此菜单模式内完成,如 所示 ``gpg>``。 427 + 428 + 首先,让我们选择要放入卡上的密钥 - 你可以通过键入 ``key 1`` (它是 429 + 列表中的第一个, **[E]** 子密钥)来完成此操作: 430 + 431 + gpg> key 1 432 + 433 + 在输出中,你现在在 **[E]** 子密钥应该看到 ``ssb*`` 。意味着这个子 434 + 密钥当前被选中。它用作切换键,这意味着如果你再次输入 ``key 1`` , 435 + ``*`` 将会消失并且该键将不再被选择。 436 + 437 + 现在,让我们将该密钥移至智能卡上:: 438 + 439 + gpg> keytocard 440 + Please select where to store the key: 441 + (2) Encryption key 442 + Your selection? 2 443 + 444 + 由于它是我们的 **[E]** 密钥,因此将其放入加密槽中是有意义的。当你提 445 + 交选择时,系统将首先提示你输入 PGP 密钥密码,然后输入管理员 PIN 码。 446 + 如果命令返回且没有错误,则你的密钥已被移动。 447 + 448 + **重要提示**:现在再次键入 ``key 1`` 以取消选择第一个键,并 ``key 2`` 449 + 选择 **[S]** 密钥:: 450 + 451 + gpg> key 1 452 + gpg> key 2 453 + gpg> keytocard 454 + Please select where to store the key: 455 + (1) Signature key 456 + (3) Authentication key 457 + Your selection? 1 458 + 459 + 你可以使用 **[S]** 密钥进行签名和身份验证,但我们希望确保它位于签名槽中, 460 + 因此选择 (1)。跟之前一样,如果你的命令返回且没有错误,则操作成功:: 461 + 462 + gpg> q 463 + Save changes? (y/N) y 464 + 465 + 保存更改将删除你从主目录移动到卡上的密钥(但这没关系,因为我们还有备份, 466 + 让我们需要替换智能卡时再次执行此操作)。 467 + 468 + 验证密钥是否已移动 469 + ~~~~~~~~~~~~~~~~~~ 470 + 471 + 如果你现在执行 ``--list-secret-keys`` ,你将看到输出中存在细微的差异:: 472 + 473 + $ gpg --list-secret-keys 474 + sec# ed25519 2022-12-20 [SC] [expires: 2024-12-19] 475 + 000000000000000000000000AAAABBBBCCCCDDDD 476 + uid [ultimate] Alice Dev <adev@kernel.org> 477 + ssb> cv25519 2022-12-20 [E] [expires: 2024-12-19] 478 + ssb> ed25519 2022-12-20 [S] 479 + 480 + 在 ``ssb>``中的 ``>`` 输出意味着子密钥只能在智能卡上可用,如果你返回 481 + 密钥目录并查看那里的内容,你会注意到 ``.key`` 那里的文件已被存根替换:: 482 + 483 + $ cd ~/.gnupg/private-keys-v1.d 484 + $ strings *.key | grep 'private-key' 485 + 486 + 输出应包含 ``shadowed-private-key`` 指示这些文件只是存根,实际内容 487 + 位于智能卡上。 488 + 489 + 验证智能卡是否正常工作 490 + ~~~~~~~~~~~~~~~~~~~~~~ 491 + 492 + 要验证智能卡是否按预期工作,你可以创建签名:: 493 + 494 + $ echo "Hello world" | gpg --clearsign > /tmp/test.asc 495 + $ gpg --verify /tmp/test.asc 496 + 497 + 在你的第一条命令执行时,应该会询问你智能卡的PIN,然后在你运行 498 + ``gpg --verify`` 后显示"Good signature"。 499 + 500 + 恭喜,你已成功使窃取你的数字开发者身份变得极其困难! 501 + 502 + 其他常见的 GnuPG 操作 503 + --------------------- 504 + 505 + 以下是你需要使用 PGP 密钥执行的一些常见操作的快速参考。 506 + 507 + 安装你的安全离线存储 508 + ~~~~~~~~~~~~~~~~~~~~ 509 + 510 + 你将需要你的证书密钥来执行以下任何操作,因此你首先需要安装备份离线存储 511 + 并告诉 GnuPG 使用它:: 512 + 513 + $ export GNUPGHOME=/media/disk/foo/gnupg-backup 514 + $ gpg --list-secret-keys 515 + 516 + 你需要确保你看到 ``sec`` 而不是 ``sec#`` 在输出中( ``#`` 意味着 517 + 密钥不可用并且你仍在使用常规主目录位置)。 518 + 519 + 延长密钥有效期 520 + ~~~~~~~~~~~~~~ 521 + 522 + 证书密钥的默认到期日期为自创建之日起 2 年。这样做既是出于安全原因,也 523 + 是为了使过时的密钥最终从密钥服务器中消失。 524 + 525 + 要将密钥的有效期从当前日期延长一年,只需运行:: 526 + 527 + $ gpg --quick-set-expire [fpr] 1y 528 + 529 + 如果更容易记住,你也可以使用特定日期(例如你的生日、1 月 1 日或加拿大 530 + 国庆日):: 531 + 532 + $ gpg --quick-set-expire [fpr] 2025-07-01 533 + 534 + 请记住将更新后的密钥发送回密钥服务器:: 535 + 536 + $ gpg --send-key [fpr] 537 + 538 + 进行任何更改后更新你的工作目录 539 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 540 + 541 + 使用离线存储对密钥进行任何更改后,你需要将这些更改导入回常规工作目录 542 + 中:: 543 + 544 + $ gpg --export | gpg --homedir ~/.gnupg --import 545 + $ unset GNUPGHOME 546 + 547 + 通过 ssh 使用 gpg-agent 548 + ~~~~~~~~~~~~~~~~~~~~~~~ 549 + 550 + 如果你需要在远程系统上签署标签或提交,你可以通过 ssh 转发你的 551 + gpg-agent。 552 + 553 + 请参考 GnuPG wiki 上提供的说明: 554 + 555 + - `Agent通过SSH转发`_ 556 + 557 + 如果你可以修改远程端的 sshd 服务器设置,则工作会更顺利。 558 + 559 + .. _`Agent通过SSH转发`: https://wiki.gnupg.org/AgentForwarding 560 + 561 + 将 PGP 与 Git 结合使用 562 + ====================== 563 + 564 + Git 的核心功能之一是它的分散性——一旦将仓库克隆到你的系统,你就拥有该 565 + 项目的完整历史记录,包括其所有标签、提交和分支。然而,随着数百个克隆仓 566 + 库的出现,人们如何验证他们的 linux.git 副本没有被恶意第三方篡改? 567 + 568 + 或者,如果在代码中发现后门,并且提交中的“Author”行表示它是由你完成的, 569 + 而你非常确定 `自己与它无关`_ ,会发生什么? 570 + 571 + 为了解决这两个问题,Git 引入了 PGP 集成。签名的标签通过确保其内容与创 572 + 建标签的开发人员的工作站上的内容完全相同来证明仓库的完整性,而签名的提 573 + 交使其他人几乎不可能在无法访问你的 PGP 密钥的情况下冒充你。 574 + 575 + .. _`自己与它无关`: https://github.com/jayphelps/git-blame-someone-else 576 + 577 + 配置 git 使用你的 PGP 密钥 578 + -------------------------- 579 + 580 + 如果你的密钥环中只有一个密钥,那么你实际上不需要执行任何额外操作,因为 581 + 它会成为你的默认密钥。但是,如果你碰巧有多个密钥,你可以告诉 git 应该 582 + 使用哪个密钥(``[fpr]`` 是你密钥的指纹):: 583 + 584 + $ git config --global user.signingKey [fpr] 585 + 586 + 如何使用签名标签 587 + ---------------- 588 + 589 + 要创建签名标签,只需将 ``-s`` 开关传递给 tag 命令:: 590 + 591 + $ git tag -s [tagname] 592 + 593 + 我们的建议是始终签署 git 标签,因为这可以让其他开发人员确保他们从中提 594 + 取的 git 仓库没有被恶意更改。 595 + 596 + 如何验证签名标签 597 + ~~~~~~~~~~~~~~~~ 598 + 599 + 要验证签名标签,只需使用以下 ``verify-tag`` 命令:: 600 + 601 + $ git verify-tag [tagname] 602 + 603 + 如果你从项目仓库的另一个分支中拉取标签,git 应该自动验证你拉取的顶 604 + 部的签名,并在合并操作期间向你显示结果:: 605 + 606 + $ git pull [url] tags/sometag 607 + 608 + 合并消息将包含如下内容:: 609 + 610 + Merge tag 'sometag' of [url] 611 + 612 + [Tag message] 613 + 614 + # gpg: Signature made [...] 615 + # gpg: Good signature from [...] 616 + 617 + 如果你正在验证其他人的 git 标签,那么你将需要导入他们的 PGP 密钥。 618 + 请参阅下面的":ref:`身份验证`"部分。 619 + 620 + 配置 git 始终对带注释的标签(annotated tags)进行签名annotated tags 621 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 622 + 623 + 如果你要创建带注释的标签,你很可能会想要对其进行签名。要强制 git 始终签 624 + 署带注释的标签,你可以设置一个全局配置选项:: 625 + 626 + $ git config --global tag.forceSignAnnotated true 627 + 628 + 如何使用签名的提交 629 + ------------------ 630 + 631 + 创建签名提交很容易,但在 Linux 内核开发中使用它们要困难得多,因为它依赖 632 + 于发送到邮件列表的补丁,并且此工作流程不保留 PGP 提交签名。此外,当重新 633 + 调整仓库以匹配上游时,甚至你自己的 PGP 提交签名最终也会被丢弃。因此,大 634 + 多数内核开发人员不会费心签署他们的提交,并且会忽略他们在工作中依赖的任何 635 + 外部仓库中的签名提交。 636 + 637 + 但是,如果你的工作 git 树在某些 git 托管服务(kernel.org、 638 + infradead.org、ozlabs.org 或其他)上公开可用,那么建议你签署所有 git 639 + 提交,即使上游开发人员不直接受益于这种做法。 640 + 641 + 我们推荐这样做的原因如下: 642 + 643 + 1. 如果需要执行代码取证或跟踪代码来源,即使是外部维护的带有 PGP 提交签名 644 + 的树对于此类问题也很有价值。 645 + 2. 如果你需要重新克隆本地仓库(例如,在磁盘故障后),这可以让你在恢复工 646 + 作之前轻松验证仓库的完整性。 647 + 3. 如果有人需要挑选你的提交,这可以让他们在应用之前快速验证其完整性。 648 + 649 + 创建签名提交 650 + ~~~~~~~~~~~~ 651 + 652 + 要创建签名提交,你只需将 ``-S`` 标志传递给 ``git commit`` 命令(由于 653 + 与另一个标志冲突,所以它是大写的 ``-S`` ):: 654 + 655 + $ git commit -S 656 + 657 + 配置 git 始终对提交进行签名 658 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 659 + 660 + 你可以告诉 git 总是签署提交:: 661 + 662 + git config --global commit.gpgSign true 663 + 664 + .. note:: 665 + 666 + 确保 ``gpg-agent`` 在打开此功能之前进行配置。 667 + 668 + .. _身份验证: 669 + 670 + 671 + 如何使用签名补丁 672 + ---------------- 673 + 674 + 可以使用你的 PGP 密钥来签署发送到内核开发人员邮件列表的补丁。由于现有的 675 + 电子邮件签名机制(PGP-Mime 或 PGP-inline)往往会导致常规代码审查任务 676 + 出现问题,因此你应该使用为此创建的 kernel.org 工具,该工具将加密证明签 677 + 名放入消息标头中(a-la DKIM): 678 + 679 + - `Patatt Patch Attestation`_ 680 + 681 + .. _`Patatt Patch Attestation`: https://pypi.org/project/patatt/ 682 + 683 + 安装和配置 patatt 684 + ~~~~~~~~~~~~~~~~~ 685 + 686 + Patatt 已针对许多发行版进行了打包,因此请先检查那里。你还可以使用 687 + “ ``pip install patatt`` ”从 pypi 安装它。 688 + 689 + 如果你已经使用 git 配置了 PGP 密钥(通过``user.signingKey`` 配置参数), 690 + 则 patatt 不需要进一步配置。你可以通过在所需的仓库中安装 git-send-email 691 + 钩子来开始签署补丁:: 692 + 693 + patatt install-hook 694 + 695 + 现在,你使用 ``git send-email`` 发送的任何补丁都将自动使用你的加密签 696 + 名进行签名 697 + 698 + 检查 patatt 签名 699 + ~~~~~~~~~~~~~~~~ 700 + 701 + 如果你用于 ``b4`` 检索和应用补丁,那么它将自动尝试验证它遇到的所有 702 + DKIM 和 patatt 签名,例如:: 703 + 704 + $ b4 am 20220720205013.890942-1-broonie@kernel.org 705 + [...] 706 + Checking attestation on all messages, may take a moment... 707 + --- 708 + ✓ [PATCH v1 1/3] kselftest/arm64: Correct buffer allocation for SVE Z registers 709 + ✓ [PATCH v1 2/3] arm64/sve: Document our actual ABI for clearing registers on syscall 710 + ✓ [PATCH v1 3/3] kselftest/arm64: Enforce actual ABI for SVE syscalls 711 + --- 712 + ✓ Signed: openpgp/broonie@kernel.org 713 + ✓ Signed: DKIM/kernel.org 714 + 715 + .. note:: 716 + 717 + Patatt 和 b4 仍在积极开发中,你应该检查这些项目的最新文档以了解任 718 + 何新功能或更新功能。 719 + 720 + 如何验证内核开发者身份 721 + ====================== 722 + 723 + 签署标签和提交很容易,但是如何验证用于签署某项内容的密钥是否属于实际的内 724 + 核开发人员而不是恶意冒名顶替者? 725 + 726 + 使用 WKD 和 DANE 配置auto-key-locate(自动密钥检索) 727 + ---------------------------------------------------- 728 + 729 + 如果你还没有广泛收集其他开发人员的公钥,那么你可以依靠密钥自动发现和自动 730 + 检索来快速启动你的密钥环。如果从头开始创建自己的信任 Web 的预期太令人畏 731 + 惧, GnuPG 可以借助其他委托信任技术(即 DNSSEC 和 TLS)来帮助你继续前 732 + 进。 733 + 734 + 将以下内容添加到你的 ``~/.gnupg/gpg.conf``:: 735 + 736 + auto-key-locate wkd,dane,local 737 + auto-key-retrieve 738 + 739 + 基于 DNS 的命名实体身份验证(“DANE”)是一种在 DNS 中发布公钥并使用 740 + DNSSEC 签名区域保护它们的方法。Web 密钥目录(“WKD”)是使用 https 741 + 查找来达到相同目的的替代方法。当使用 DANE 或 WKD 查找公钥时,GnuPG 742 + 将分别验证 DNSSEC 或 TLS 证书,然后将自动检索的公钥添加到本地密钥环。 743 + 744 + Kernel.org 为所有拥有 kernel.org 帐户的开发人员发布 WKD。一旦你的 745 + ``gpg.conf`` 中进行了上述更改,你就可以自动检索 Linus Torvalds 和 746 + Greg Kroah-Hartman 的密钥(如果你还没有它们):: 747 + 748 + $ gpg --locate-keys torvalds@kernel.org gregkh@kernel.org 749 + 750 + 如果你有 kernel.org 帐户,那么你应该 `添加 kernel.org UID 到你的密钥中`_ 751 + 添加到你的密钥中,以使 WKD 对其他内核开发人员更有用。 752 + 753 + .. _`添加 kernel.org UID 到你的密钥中`: https://korg.wiki.kernel.org/userdoc/mail#adding_a_kernelorg_uid_to_your_pgp_key 754 + 755 + 信任网 (WOT) 与首次使用信任 (TOFU) 756 + ----------------------------------- 757 + 758 + PGP 结合了称为“信任网”的信任委托机制。从本质上讲,这是一次尝试取代 759 + HTTPS/TLS 世界对集中式证书颁发机构的需求。PGP 将这一责任留给每个 760 + 用户,而不是由各种软件制造商规定谁应该是你值得信赖的认证实体。 761 + 762 + 不幸的是,很少有人了解信任网是如何运作的。虽然它仍然是 OpenPGP 规 763 + 范的一个重要方面,但最新版本的 GnuPG(2.2 及更高版本)已经实现了 764 + 一种称为“首次使用信任”(TOFU) 的替代机制。你可以将 TOFU 视为“类似 765 + SSH 的信任方法”。使用 SSH,第一次连接到远程系统时,其密钥指纹会被 766 + 记录并记住。如果将来密钥发生变化,SSH 客户端将向你发出警报并拒绝连 767 + 接,迫使你决定是否选择信任更改后的密钥。同样,第一次导入某人的 PGP 768 + 密钥时,它被认为是有效的。如果将来的任何时候 GnuPG 遇到具有相同标 769 + 识的另一个密钥,则先前导入的密钥和新密钥都将被标记为无效,你将需要手 770 + 动确定保留哪一个。 771 + 772 + 我们建议你使用 TOFU+PGP 组合信任模型(这是 GnuPG v2 中新默认的)。 773 + 若要设置它,在 ``~/.gnupg/gpg.conf`` 中添加(或修改) 774 + ``trust-model`` 设置:: 775 + 776 + trust-model tofu+pgp 777 + 778 + 使用 kernel.org 信任网仓库 779 + -------------------------- 780 + 781 + Kernel.org 维护着一个包含开发人员公钥的 git 仓库,作为复制密钥服 782 + 务器网络的替代品,而在过去几年中,该网络几乎已经陷入黑暗。有关如何将 783 + 该仓库设置为公钥来源的完整文档可以在此处找到: 784 + 785 + - `内核开发者密钥环`_ 786 + 787 + 如果你是内核开发人员,请考虑提交你的密钥以将其包含到该密钥环中。 788 + 789 + .. _`内核开发者密钥环`: https://korg.docs.kernel.org/pgpkeys.html
+1 -4
Documentation/translations/zh_CN/userspace-api/index.rst
··· 17 17 在代码树中仍然可以找到有关用户空间的部分信息。这个手册意在成为这些信息 18 18 聚集的地方。 19 19 20 - .. class:: toc-title 21 - 22 - 目录 23 - 24 20 .. toctree:: 21 + :caption: 目录 25 22 :maxdepth: 2 26 23 27 24 no_new_privs
+4 -4
Documentation/translations/zh_TW/IRQ.txt
··· 7 7 or if there is a problem with the translation. 8 8 9 9 Maintainer: Eric W. Biederman <ebiederman@xmission.com> 10 - Traditional Chinese maintainer: Hu Haowen <src.res.211@gmail.com> 10 + Traditional Chinese maintainer: Hu Haowen <2023002089@link.tyut.edu.cn> 11 11 --------------------------------------------------------------------- 12 12 Documentation/core-api/irq/index.rst 的繁體中文翻譯 13 13 ··· 16 16 者翻譯存在問題,請聯繫繁體中文版維護者。 17 17 18 18 英文版維護者: Eric W. Biederman <ebiederman@xmission.com> 19 - 繁體中文版維護者: 胡皓文 Hu Haowen <src.res.211@gmail.com> 20 - 繁體中文版翻譯者: 胡皓文 Hu Haowen <src.res.211@gmail.com> 21 - 繁體中文版校譯者: 胡皓文 Hu Haowen <src.res.211@gmail.com> 19 + 繁體中文版維護者: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 20 + 繁體中文版翻譯者: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 21 + 繁體中文版校譯者: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 22 22 23 23 24 24 以下爲正文
+1 -1
Documentation/translations/zh_TW/admin-guide/README.rst
··· 7 7 :譯者: 8 8 9 9 吳想成 Wu XiangCheng <bobwxc@email.cn> 10 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 10 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 11 11 12 12 Linux內核6.x版本 <http://kernel.org/> 13 13 =========================================
+1 -1
Documentation/translations/zh_TW/admin-guide/bug-bisect.rst
··· 7 7 :譯者: 8 8 9 9 吳想成 Wu XiangCheng <bobwxc@email.cn> 10 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 10 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 11 11 12 12 二分(bisect)缺陷 13 13 +++++++++++++++++++
+1 -1
Documentation/translations/zh_TW/admin-guide/bug-hunting.rst
··· 7 7 :譯者: 8 8 9 9 吳想成 Wu XiangCheng <bobwxc@email.cn> 10 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 10 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 11 11 12 12 追蹤缺陷 13 13 =========
+1 -1
Documentation/translations/zh_TW/admin-guide/clearing-warn-once.rst
··· 2 2 3 3 .. include:: ../disclaimer-zh_TW.rst 4 4 5 - :Translator: 胡皓文 Hu Haowen <src.res.211@gmail.com> 5 + :Translator: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 6 6 7 7 清除 WARN_ONCE 8 8 --------------
+1 -1
Documentation/translations/zh_TW/admin-guide/cpu-load.rst
··· 2 2 3 3 .. include:: ../disclaimer-zh_TW.rst 4 4 5 - :Translator: 胡皓文 Hu Haowen <src.res.211@gmail.com> 5 + :Translator: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 6 6 7 7 ======== 8 8 CPU 負載
+1 -1
Documentation/translations/zh_TW/admin-guide/index.rst
··· 4 4 5 5 :Original: :doc:`../../../admin-guide/index` 6 6 :Translator: Alex Shi <alex.shi@linux.alibaba.com> 7 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 7 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 8 8 9 9 Linux 內核用戶和管理員指南 10 10 ==========================
+1 -1
Documentation/translations/zh_TW/admin-guide/init.rst
··· 7 7 :譯者: 8 8 9 9 吳想成 Wu XiangCheng <bobwxc@email.cn> 10 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 10 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 11 11 12 12 解釋“No working init found.”啓動掛起消息 13 13 =========================================
+1 -1
Documentation/translations/zh_TW/admin-guide/reporting-issues.rst
··· 9 9 :譯者: 10 10 11 11 吳想成 Wu XiangCheng <bobwxc@email.cn> 12 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 12 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 13 13 14 14 15 15 報告問題
+1 -1
Documentation/translations/zh_TW/admin-guide/security-bugs.rst
··· 7 7 :譯者: 8 8 9 9 吳想成 Wu XiangCheng <bobwxc@email.cn> 10 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 10 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 11 11 12 12 安全缺陷 13 13 =========
+1 -1
Documentation/translations/zh_TW/admin-guide/tainted-kernels.rst
··· 7 7 :譯者: 8 8 9 9 吳想成 Wu XiangCheng <bobwxc@email.cn> 10 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 10 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 11 11 12 12 受污染的內核 13 13 -------------
+1 -1
Documentation/translations/zh_TW/admin-guide/unicode.rst
··· 7 7 :譯者: 8 8 9 9 吳想成 Wu XiangCheng <bobwxc@email.cn> 10 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 10 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 11 11 12 12 Unicode(統一碼)支持 13 13 ======================
+1 -1
Documentation/translations/zh_TW/arch/arm64/amu.rst
··· 5 5 :Original: :ref:`Documentation/arch/arm64/amu.rst <amu_index>` 6 6 7 7 Translator: Bailu Lin <bailu.lin@vivo.com> 8 - Hu Haowen <src.res.211@gmail.com> 8 + Hu Haowen <2023002089@link.tyut.edu.cn> 9 9 10 10 ================================== 11 11 AArch64 Linux 中擴展的活動監控單元
+2 -2
Documentation/translations/zh_TW/arch/arm64/booting.txt
··· 10 10 11 11 M: Will Deacon <will.deacon@arm.com> 12 12 zh_CN: Fu Wei <wefu@redhat.com> 13 - zh_TW: Hu Haowen <src.res.211@gmail.com> 13 + zh_TW: Hu Haowen <2023002089@link.tyut.edu.cn> 14 14 C: 55f058e7574c3615dea4615573a19bdb258696c6 15 15 --------------------------------------------------------------------- 16 16 Documentation/arch/arm64/booting.rst 的中文翻譯 ··· 23 23 中文版維護者: 傅煒 Fu Wei <wefu@redhat.com> 24 24 中文版翻譯者: 傅煒 Fu Wei <wefu@redhat.com> 25 25 中文版校譯者: 傅煒 Fu Wei <wefu@redhat.com> 26 - 繁體中文版校譯者: 胡皓文 Hu Haowen <src.res.211@gmail.com> 26 + 繁體中文版校譯者: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 27 27 本文翻譯提交時的 Git 檢出點爲: 55f058e7574c3615dea4615573a19bdb258696c6 28 28 29 29 以下爲正文
+1 -1
Documentation/translations/zh_TW/arch/arm64/elf_hwcaps.rst
··· 5 5 :Original: :ref:`Documentation/arch/arm64/elf_hwcaps.rst <elf_hwcaps_index>` 6 6 7 7 Translator: Bailu Lin <bailu.lin@vivo.com> 8 - Hu Haowen <src.res.211@gmail.com> 8 + Hu Haowen <2023002089@link.tyut.edu.cn> 9 9 10 10 ================ 11 11 ARM64 ELF hwcaps
+1 -1
Documentation/translations/zh_TW/arch/arm64/hugetlbpage.rst
··· 5 5 :Original: :ref:`Documentation/arch/arm64/hugetlbpage.rst <hugetlbpage_index>` 6 6 7 7 Translator: Bailu Lin <bailu.lin@vivo.com> 8 - Hu Haowen <src.res.211@gmail.com> 8 + Hu Haowen <2023002089@link.tyut.edu.cn> 9 9 10 10 ===================== 11 11 ARM64中的 HugeTLBpage
+1 -1
Documentation/translations/zh_TW/arch/arm64/index.rst
··· 4 4 5 5 :Original: :ref:`Documentation/arch/arm64/index.rst <arm64_index>` 6 6 :Translator: Bailu Lin <bailu.lin@vivo.com> 7 - Hu Haowen <src.res.211@gmail.com> 7 + Hu Haowen <2023002089@link.tyut.edu.cn> 8 8 9 9 .. _tw_arm64_index: 10 10
+2 -2
Documentation/translations/zh_TW/arch/arm64/legacy_instructions.txt
··· 11 11 Maintainer: Punit Agrawal <punit.agrawal@arm.com> 12 12 Suzuki K. Poulose <suzuki.poulose@arm.com> 13 13 Chinese maintainer: Fu Wei <wefu@redhat.com> 14 - Traditional Chinese maintainer: Hu Haowen <src.res.211@gmail.com> 14 + Traditional Chinese maintainer: Hu Haowen <2023002089@link.tyut.edu.cn> 15 15 --------------------------------------------------------------------- 16 16 Documentation/arch/arm64/legacy_instructions.rst 的中文翻譯 17 17 ··· 26 26 中文版維護者: 傅煒 Fu Wei <wefu@redhat.com> 27 27 中文版翻譯者: 傅煒 Fu Wei <wefu@redhat.com> 28 28 中文版校譯者: 傅煒 Fu Wei <wefu@redhat.com> 29 - 繁體中文版校譯者:胡皓文 Hu Haowen <src.res.211@gmail.com> 29 + 繁體中文版校譯者:胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 30 30 31 31 以下爲正文 32 32 ---------------------------------------------------------------------
+2 -2
Documentation/translations/zh_TW/arch/arm64/memory.txt
··· 10 10 11 11 Maintainer: Catalin Marinas <catalin.marinas@arm.com> 12 12 Chinese maintainer: Fu Wei <wefu@redhat.com> 13 - Traditional Chinese maintainer: Hu Haowen <src.res.211@gmail.com> 13 + Traditional Chinese maintainer: Hu Haowen <2023002089@link.tyut.edu.cn> 14 14 --------------------------------------------------------------------- 15 15 Documentation/arch/arm64/memory.rst 的中文翻譯 16 16 ··· 24 24 中文版維護者: 傅煒 Fu Wei <wefu@redhat.com> 25 25 中文版翻譯者: 傅煒 Fu Wei <wefu@redhat.com> 26 26 中文版校譯者: 傅煒 Fu Wei <wefu@redhat.com> 27 - 繁體中文版校譯者: 胡皓文 Hu Haowen <src.res.211@gmail.com> 27 + 繁體中文版校譯者: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 28 28 29 29 以下爲正文 30 30 ---------------------------------------------------------------------
+1 -1
Documentation/translations/zh_TW/arch/arm64/perf.rst
··· 5 5 :Original: :ref:`Documentation/arch/arm64/perf.rst <perf_index>` 6 6 7 7 Translator: Bailu Lin <bailu.lin@vivo.com> 8 - Hu Haowen <src.res.211@gmail.com> 8 + Hu Haowen <2023002089@link.tyut.edu.cn> 9 9 10 10 ============= 11 11 Perf 事件屬性
+2 -2
Documentation/translations/zh_TW/arch/arm64/silicon-errata.txt
··· 10 10 11 11 M: Will Deacon <will.deacon@arm.com> 12 12 zh_CN: Fu Wei <wefu@redhat.com> 13 - zh_TW: Hu Haowen <src.res.211@gmail.com> 13 + zh_TW: Hu Haowen <2023002089@link.tyut.edu.cn> 14 14 C: 1926e54f115725a9248d0c4c65c22acaf94de4c4 15 15 --------------------------------------------------------------------- 16 16 Documentation/arch/arm64/silicon-errata.rst 的中文翻譯 ··· 23 23 中文版維護者: 傅煒 Fu Wei <wefu@redhat.com> 24 24 中文版翻譯者: 傅煒 Fu Wei <wefu@redhat.com> 25 25 中文版校譯者: 傅煒 Fu Wei <wefu@redhat.com> 26 - 繁體中文版校譯者: 胡皓文 Hu Haowen <src.res.211@gmail.com> 26 + 繁體中文版校譯者: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 27 27 本文翻譯提交時的 Git 檢出點爲: 1926e54f115725a9248d0c4c65c22acaf94de4c4 28 28 29 29 以下爲正文
+2 -2
Documentation/translations/zh_TW/arch/arm64/tagged-pointers.txt
··· 10 10 11 11 Maintainer: Will Deacon <will.deacon@arm.com> 12 12 Chinese maintainer: Fu Wei <wefu@redhat.com> 13 - Traditional Chinese maintainer: Hu Haowen <src.res.211@gmail.com> 13 + Traditional Chinese maintainer: Hu Haowen <2023002089@link.tyut.edu.cn> 14 14 --------------------------------------------------------------------- 15 15 Documentation/arch/arm64/tagged-pointers.rst 的中文翻譯 16 16 ··· 22 22 中文版維護者: 傅煒 Fu Wei <wefu@redhat.com> 23 23 中文版翻譯者: 傅煒 Fu Wei <wefu@redhat.com> 24 24 中文版校譯者: 傅煒 Fu Wei <wefu@redhat.com> 25 - 繁體中文版校譯者: 胡皓文 Hu Haowen <src.res.211@gmail.com> 25 + 繁體中文版校譯者: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 26 26 27 27 以下爲正文 28 28 ---------------------------------------------------------------------
+5 -5
Documentation/translations/zh_TW/dev-tools/sparse.rst
··· 6 6 help. Contact the Chinese maintainer if this translation is outdated 7 7 or if there is a problem with the translation. 8 8 9 - Traditional Chinese maintainer: Hu Haowen <src.res.211@gmail.com> 10 - --------------------------------------------------------------------- 9 + Traditional Chinese maintainer: Hu Haowen <2023002089@link.tyut.edu.cn> 10 + ------------------------------------------------------------------------- 11 11 Documentation/dev-tools/sparse.rst 的繁體中文翻譯 12 12 13 13 如果想評論或更新本文的內容,請直接聯繫原文檔的維護者。如果你使用英文 14 14 交流有困難的話,也可以向繁體中文版維護者求助。如果本翻譯更新不及時或 15 15 者翻譯存在問題,請聯繫繁體中文版維護者。 16 16 17 - 繁體中文版維護者: 胡皓文 Hu Haowen <src.res.211@gmail.com> 18 - 繁體中文版翻譯者: 胡皓文 Hu Haowen <src.res.211@gmail.com> 17 + 繁體中文版維護者: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 18 + 繁體中文版翻譯者: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 19 19 20 20 以下爲正文 21 - --------------------------------------------------------------------- 21 + ------------------------------------------------------------------------- 22 22 23 23 Copyright 2004 Linus Torvalds 24 24 Copyright 2004 Pavel Machek <pavel@ucw.cz>
+1 -1
Documentation/translations/zh_TW/dev-tools/testing-overview.rst
··· 3 3 .. include:: ../disclaimer-zh_TW.rst 4 4 5 5 :Original: Documentation/dev-tools/testing-overview.rst 6 - :Translator: 胡皓文 Hu Haowen <src.res.211@gmail.com> 6 + :Translator: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 7 7 8 8 ============ 9 9 內核測試指南
+1 -1
Documentation/translations/zh_TW/disclaimer-zh_TW.rst
··· 7 7 8 8 .. note:: 9 9 如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 10 - 或者發送電子郵件給胡皓文以獲取幫助:<src.res.211@gmail.com>。 10 + 或者發送電子郵件給胡皓文以獲取幫助:<2023002089@link.tyut.edu.cn>。 11 11
+1 -1
Documentation/translations/zh_TW/filesystems/debugfs.rst
··· 14 14 中文版維護者: 羅楚成 Chucheng Luo <luochucheng@vivo.com> 15 15 中文版翻譯者: 羅楚成 Chucheng Luo <luochucheng@vivo.com> 16 16 中文版校譯者: 羅楚成 Chucheng Luo <luochucheng@vivo.com> 17 - 繁體中文版校譯者: 胡皓文 Hu Haowen <src.res.211@gmail.com> 17 + 繁體中文版校譯者: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 18 18 19 19 20 20
+1 -1
Documentation/translations/zh_TW/filesystems/index.rst
··· 4 4 5 5 :Original: :ref:`Documentation/filesystems/index.rst <filesystems_index>` 6 6 :Translator: Wang Wenhu <wenhu.wang@vivo.com> 7 - Hu Haowen <src.res.211@gmail.com> 7 + Hu Haowen <2023002089@link.tyut.edu.cn> 8 8 9 9 .. _tw_filesystems_index: 10 10
+1 -1
Documentation/translations/zh_TW/filesystems/sysfs.txt
··· 22 22 中文版維護者: 傅煒 Fu Wei <tekkamanninja@gmail.com> 23 23 中文版翻譯者: 傅煒 Fu Wei <tekkamanninja@gmail.com> 24 24 中文版校譯者: 傅煒 Fu Wei <tekkamanninja@gmail.com> 25 - 繁體中文版校譯者:胡皓文 Hu Haowen <src.res.211@gmail.com> 25 + 繁體中文版校譯者:胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 26 26 27 27 28 28 以下爲正文
+1 -1
Documentation/translations/zh_TW/filesystems/virtiofs.rst
··· 10 10 中文版維護者: 王文虎 Wang Wenhu <wenhu.wang@vivo.com> 11 11 中文版翻譯者: 王文虎 Wang Wenhu <wenhu.wang@vivo.com> 12 12 中文版校譯者: 王文虎 Wang Wenhu <wenhu.wang@vivo.com> 13 - 繁體中文版校譯者:胡皓文 Hu Haowen <src.res.211@gmail.com> 13 + 繁體中文版校譯者:胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 14 14 15 15 =========================================== 16 16 virtiofs: virtio-fs 主機<->客機共享文件系統
+4 -4
Documentation/translations/zh_TW/gpio.txt
··· 8 8 9 9 Maintainer: Grant Likely <grant.likely@secretlab.ca> 10 10 Linus Walleij <linus.walleij@linaro.org> 11 - Traditional Chinese maintainer: Hu Haowen <src.res.211@gmail.com> 11 + Traditional Chinese maintainer: Hu Haowen <2023002089@link.tyut.edu.cn> 12 12 --------------------------------------------------------------------- 13 13 Documentation/admin-guide/gpio 的繁體中文翻譯 14 14 ··· 18 18 19 19 英文版維護者: Grant Likely <grant.likely@secretlab.ca> 20 20 Linus Walleij <linus.walleij@linaro.org> 21 - 繁體中文版維護者: 胡皓文 Hu Haowen <src.res.211@gmail.com> 22 - 繁體中文版翻譯者: 胡皓文 Hu Haowen <src.res.211@gmail.com> 23 - 繁體中文版校譯者: 胡皓文 Hu Haowen <src.res.211@gmail.com> 21 + 繁體中文版維護者: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 22 + 繁體中文版翻譯者: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 23 + 繁體中文版校譯者: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 24 24 25 25 以下爲正文 26 26 ---------------------------------------------------------------------
+1 -1
Documentation/translations/zh_TW/index.rst
··· 15 15 16 16 .. note:: 17 17 內核文檔繁體中文版的翻譯工作正在進行中。如果您願意並且有時間參與這項工 18 - 作,歡迎提交補丁給胡皓文 <src.res.211@gmail.com>。 18 + 作,歡迎提交補丁給胡皓文 <2023002089@link.tyut.edu.cn>。 19 19 20 20 與Linux 內核社區一起工作 21 21 ------------------------
+4 -4
Documentation/translations/zh_TW/io_ordering.txt
··· 6 6 help. Contact the Chinese maintainer if this translation is outdated 7 7 or if there is a problem with the translation. 8 8 9 - Traditional Chinese maintainer: Hu Haowen <src.res.211@gmail.com> 9 + Traditional Chinese maintainer: Hu Haowen <2023002089@link.tyut.edu.cn> 10 10 --------------------------------------------------------------------- 11 11 Documentation/driver-api/io_ordering.rst 的繁體中文翻譯 12 12 ··· 14 14 交流有困難的話,也可以向繁體中文版維護者求助。如果本翻譯更新不及時或 15 15 者翻譯存在問題,請聯繫繁體中文版維護者。 16 16 17 - 繁體中文版維護者: 胡皓文 Hu Haowen <src.res.211@gmail.com> 18 - 繁體中文版翻譯者: 胡皓文 Hu Haowen <src.res.211@gmail.com> 19 - 繁體中文版校譯者: 胡皓文 Hu Haowen <src.res.211@gmail.com> 17 + 繁體中文版維護者: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 18 + 繁體中文版翻譯者: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 19 + 繁體中文版校譯者: 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 20 20 21 21 22 22 以下爲正文
+1 -1
Documentation/translations/zh_TW/process/1.Intro.rst
··· 11 11 :校譯: 12 12 13 13 吳想成 Wu XiangCheng <bobwxc@email.cn> 14 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 14 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 15 15 16 16 .. _tw_development_process_intro: 17 17
+1 -1
Documentation/translations/zh_TW/process/2.Process.rst
··· 11 11 :校譯: 12 12 13 13 吳想成 Wu XiangCheng <bobwxc@email.cn> 14 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 14 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 15 15 16 16 .. _tw_development_process: 17 17
+1 -1
Documentation/translations/zh_TW/process/3.Early-stage.rst
··· 11 11 :校譯: 12 12 13 13 吳想成 Wu XiangCheng <bobwxc@email.cn> 14 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 14 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 15 15 16 16 .. _tw_development_early_stage: 17 17
+1 -1
Documentation/translations/zh_TW/process/4.Coding.rst
··· 11 11 :校譯: 12 12 13 13 吳想成 Wu XiangCheng <bobwxc@email.cn> 14 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 14 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 15 15 16 16 .. _tw_development_coding: 17 17
+1 -1
Documentation/translations/zh_TW/process/5.Posting.rst
··· 11 11 :校譯: 12 12 13 13 吳想成 Wu XiangCheng <bobwxc@email.cn> 14 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 14 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 15 15 16 16 .. _tw_development_posting: 17 17
+1 -1
Documentation/translations/zh_TW/process/6.Followthrough.rst
··· 11 11 :校譯: 12 12 13 13 吳想成 Wu XiangCheng <bobwxc@email.cn> 14 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 14 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 15 15 16 16 .. _tw_development_followthrough: 17 17
+1 -1
Documentation/translations/zh_TW/process/7.AdvancedTopics.rst
··· 11 11 :校譯: 12 12 13 13 吳想成 Wu XiangCheng <bobwxc@email.cn> 14 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 14 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 15 15 16 16 .. _tw_development_advancedtopics: 17 17
+1 -1
Documentation/translations/zh_TW/process/8.Conclusion.rst
··· 10 10 :校譯: 11 11 12 12 吳想成 Wu XiangCheng <bobwxc@email.cn> 13 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 13 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 14 14 15 15 .. _tw_development_conclusion: 16 16
+1 -1
Documentation/translations/zh_TW/process/code-of-conduct-interpretation.rst
··· 4 4 5 5 :Original: :ref:`Documentation/process/code-of-conduct-interpretation.rst <code_of_conduct_interpretation>` 6 6 :Translator: Alex Shi <alex.shi@linux.alibaba.com> 7 - Hu Haowen <src.res.211@gmail.com> 7 + Hu Haowen <2023002089@link.tyut.edu.cn> 8 8 9 9 .. _tw_code_of_conduct_interpretation: 10 10
+1 -1
Documentation/translations/zh_TW/process/code-of-conduct.rst
··· 4 4 5 5 :Original: :ref:`Documentation/process/code-of-conduct.rst <code_of_conduct>` 6 6 :Translator: Alex Shi <alex.shi@linux.alibaba.com> 7 - Hu Haowen <src.res.211@gmail.com> 7 + Hu Haowen <2023002089@link.tyut.edu.cn> 8 8 9 9 .. _tw_code_of_conduct: 10 10
+1 -1
Documentation/translations/zh_TW/process/coding-style.rst
··· 17 17 - 管旭東 Xudong Guan <xudong.guan@gmail.com> 18 18 - Li Zefan <lizf@cn.fujitsu.com> 19 19 - Wang Chen <wangchen@cn.fujitsu.com> 20 - - Hu Haowen <src.res.211@gmail.com> 20 + - Hu Haowen <2023002089@link.tyut.edu.cn> 21 21 22 22 Linux 內核代碼風格 23 23 ==================
+3 -3
Documentation/translations/zh_TW/process/development-process.rst
··· 4 4 5 5 :Original: :ref:`Documentation/process/development-process.rst <development_process_main>` 6 6 :Translator: Alex Shi <alex.shi@linux.alibaba.com> 7 - Hu Haowen <src.res.211@gmail.com> 7 + Hu Haowen <2023002089@link.tyut.edu.cn> 8 8 9 9 .. _tw_development_process_main: 10 10 11 11 內核開發過程指南 12 12 ================ 13 13 14 - 內容: 14 + 本文檔的目的是幫助開發人員(及其經理)以最小的挫折感與開發社區合作。它試圖記錄這個社區如何以一種不熟悉Linux內核開發(或者實際上是自由軟體開發)的人可以訪問的方式工作。雖然這裡有一些技術資料,但這是一個面向過程的討論,不需要深入了解內核編程就可以理解。 15 15 16 16 .. toctree:: 17 + :caption: 內容 17 18 :numbered: 18 19 :maxdepth: 2 19 20 ··· 28 27 8.Conclusion 29 28 30 29 本文檔的目的是幫助開發人員(及其經理)以最小的挫折感與開發社區合作。它試圖記錄這個社區如何以一種不熟悉Linux內核開發(或者實際上是自由軟件開發)的人可以訪問的方式工作。雖然這裏有一些技術資料,但這是一個面向過程的討論,不需要深入瞭解內核編程就可以理解。 31 -
+1 -1
Documentation/translations/zh_TW/process/email-clients.rst
··· 15 15 - Yinglin Luan <synmyth@gmail.com> 16 16 - Xiaochen Wang <wangxiaochen0@gmail.com> 17 17 - yaxinsn <yaxinsn@163.com> 18 - - Hu Haowen <src.res.211@gmail.com> 18 + - Hu Haowen <2023002089@link.tyut.edu.cn> 19 19 20 20 Linux郵件客戶端配置信息 21 21 =======================
+1 -1
Documentation/translations/zh_TW/process/embargoed-hardware-issues.rst
··· 4 4 5 5 :Original: :ref:`Documentation/process/embargoed-hardware-issues.rst <embargoed_hardware_issues>` 6 6 :Translator: Alex Shi <alex.shi@linux.alibaba.com> 7 - Hu Haowen <src.res.211@gmail.com> 7 + Hu Haowen <2023002089@link.tyut.edu.cn> 8 8 9 9 被限制的硬件問題 10 10 ================
+1 -1
Documentation/translations/zh_TW/process/howto.rst
··· 16 16 鍾宇 TripleX Chung <xxx.phy@gmail.com> 17 17 陳琦 Maggie Chen <chenqi@beyondsoft.com> 18 18 王聰 Wang Cong <xiyou.wangcong@gmail.com> 19 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 19 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 20 20 21 21 如何參與Linux內核開發 22 22 =====================
+1 -1
Documentation/translations/zh_TW/process/index.rst
··· 9 9 10 10 :Original: :ref:`Documentation/process/index.rst <process_index>` 11 11 :Translator: Alex Shi <alex.shi@linux.alibaba.com> 12 - Hu Haowen <src.res.211@gmail.com> 12 + Hu Haowen <2023002089@link.tyut.edu.cn> 13 13 14 14 .. _tw_process_index: 15 15
+1 -1
Documentation/translations/zh_TW/process/kernel-driver-statement.rst
··· 6 6 7 7 :Original: :ref:`Documentation/process/kernel-driver-statement.rst <process_statement_driver>` 8 8 :Translator: Alex Shi <alex.shi@linux.alibaba.com> 9 - Hu Haowen <src.res.211@gmail.com> 9 + Hu Haowen <2023002089@link.tyut.edu.cn> 10 10 11 11 內核驅動聲明 12 12 ------------
+1 -1
Documentation/translations/zh_TW/process/kernel-enforcement-statement.rst
··· 6 6 7 7 :Original: :ref:`Documentation/process/kernel-enforcement-statement.rst <process_statement_kernel>` 8 8 :Translator: Alex Shi <alex.shi@linux.alibaba.com> 9 - Hu Haowen <src.res.211@gmail.com> 9 + Hu Haowen <2023002089@link.tyut.edu.cn> 10 10 11 11 Linux 內核執行聲明 12 12 ------------------
+1 -1
Documentation/translations/zh_TW/process/license-rules.rst
··· 4 4 5 5 :Original: :ref:`Documentation/process/license-rules.rst <kernel_licensing>` 6 6 :Translator: Alex Shi <alex.shi@linux.alibaba.com> 7 - Hu Haowen <src.res.211@gmail.com> 7 + Hu Haowen <2023002089@link.tyut.edu.cn> 8 8 9 9 .. _tw_kernel_licensing: 10 10
+1 -1
Documentation/translations/zh_TW/process/magic-number.rst
··· 12 12 中文版維護者: 賈威威 Jia Wei Wei <harryxiyou@gmail.com> 13 13 中文版翻譯者: 賈威威 Jia Wei Wei <harryxiyou@gmail.com> 14 14 中文版校譯者: 賈威威 Jia Wei Wei <harryxiyou@gmail.com> 15 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 15 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 16 16 17 17 Linux 魔術數 18 18 ============
+1 -1
Documentation/translations/zh_TW/process/management-style.rst
··· 4 4 5 5 :Original: :ref:`Documentation/process/management-style.rst <managementstyle>` 6 6 :Translator: Alex Shi <alex.shi@linux.alibaba.com> 7 - Hu Haowen <src.res.211@gmail.com> 7 + Hu Haowen <2023002089@link.tyut.edu.cn> 8 8 9 9 .. _tw_managementstyle: 10 10
+1 -1
Documentation/translations/zh_TW/process/programming-language.rst
··· 4 4 5 5 :Original: :ref:`Documentation/process/programming-language.rst <programming_language>` 6 6 :Translator: Alex Shi <alex.shi@linux.alibaba.com> 7 - Hu Haowen <src.res.211@gmail.com> 7 + Hu Haowen <2023002089@link.tyut.edu.cn> 8 8 9 9 .. _tw_programming_language: 10 10
+1 -1
Documentation/translations/zh_TW/process/stable-api-nonsense.rst
··· 12 12 中文版維護者: 鍾宇 TripleX Chung <xxx.phy@gmail.com> 13 13 中文版翻譯者: 鍾宇 TripleX Chung <xxx.phy@gmail.com> 14 14 中文版校譯者: 李陽 Li Yang <leoyang.li@nxp.com> 15 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 15 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 16 16 17 17 Linux 內核驅動接口 18 18 ==================
+1 -1
Documentation/translations/zh_TW/process/stable-kernel-rules.rst
··· 15 15 中文版校譯者: 16 16 - 李陽 Li Yang <leoyang.li@nxp.com> 17 17 - Kangkai Yin <e12051@motorola.com> 18 - - 胡皓文 Hu Haowen <src.res.211@gmail.com> 18 + - 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 19 19 20 20 所有你想知道的事情 - 關於linux穩定版發佈 21 21 ========================================
+1 -1
Documentation/translations/zh_TW/process/submit-checklist.rst
··· 6 6 :Translator: 7 7 - Alex Shi <alexs@kernel.org> 8 8 - Wu XiangCheng <bobwxc@email.cn> 9 - - Hu Haowen <src.res.211@gmail.com> 9 + - Hu Haowen <2023002089@link.tyut.edu.cn> 10 10 11 11 .. _tw_submitchecklist: 12 12
+1 -1
Documentation/translations/zh_TW/process/submitting-patches.rst
··· 14 14 :校譯: 15 15 - 李陽 Li Yang <leoyang.li@nxp.com> 16 16 - 王聰 Wang Cong <xiyou.wangcong@gmail.com> 17 - - 胡皓文 Hu Haowen <src.res.211@gmail.com> 17 + - 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 18 18 19 19 20 20 提交補丁:如何讓你的改動進入內核
+1 -1
Documentation/translations/zh_TW/process/volatile-considered-harmful.rst
··· 17 17 中文版校譯者: 張漢輝 Eugene Teo <eugeneteo@kernel.sg> 18 18 楊瑞 Dave Young <hidave.darkstar@gmail.com> 19 19 時奎亮 Alex Shi <alex.shi@linux.alibaba.com> 20 - 胡皓文 Hu Haowen <src.res.211@gmail.com> 20 + 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 21 21 22 22 爲什麼不應該使用“volatile”類型 23 23 ==============================
+4 -4
Documentation/userspace-api/index.rst
··· 9 9 also be found in the kernel tree itself. This manual is intended to be the 10 10 place where this information is gathered. 11 11 12 - .. class:: toc-title 13 - 14 - Table of contents 15 - 16 12 .. toctree:: 13 + :caption: Table of contents 17 14 :maxdepth: 2 18 15 19 16 no_new_privs ··· 31 34 vduse 32 35 futex2 33 36 lsm 37 + tee 38 + isapnp 39 + dcdbas 34 40 35 41 .. only:: subproject and html 36 42
+1 -6
Documentation/userspace-api/media/cec/cec-api.rst
··· 10 10 This part describes the CEC: Consumer Electronics Control 11 11 12 12 13 - .. only:: html 14 - 15 - .. class:: toc-title 16 - 17 - Table of Contents 18 - 19 13 .. toctree:: 14 + :caption: Table of Contents 20 15 :maxdepth: 5 21 16 :numbered: 22 17
+1 -6
Documentation/userspace-api/media/drivers/index.rst
··· 21 21 22 22 For more details see the file COPYING in the source distribution of Linux. 23 23 24 - .. only:: html 25 - 26 - .. class:: toc-title 27 - 28 - Table of Contents 29 - 30 24 .. toctree:: 25 + :caption: Table of Contents 31 26 :maxdepth: 5 32 27 :numbered: 33 28
+1 -6
Documentation/userspace-api/media/dvb/dvbapi.rst
··· 27 27 28 28 **Version 5.10** 29 29 30 - .. only:: html 31 - 32 - .. class:: toc-title 33 - 34 - Table of Contents 35 - 36 30 .. toctree:: 31 + :caption: Table of Contents 37 32 :maxdepth: 5 38 33 :numbered: 39 34
+1 -6
Documentation/userspace-api/media/index.rst
··· 21 21 media devices; 22 22 23 23 24 - .. only:: html 25 - 26 - .. class:: toc-title 27 - 28 - Table of Contents 29 - 30 24 .. toctree:: 25 + :caption: Table of Contents 31 26 :maxdepth: 1 32 27 33 28 intro
+1 -6
Documentation/userspace-api/media/mediactl/media-controller.rst
··· 7 7 Part IV - Media Controller API 8 8 ############################## 9 9 10 - .. only:: html 11 - 12 - .. class:: toc-title 13 - 14 - Table of Contents 15 - 16 10 .. toctree:: 11 + :caption: Table of Contents 17 12 :maxdepth: 5 18 13 :numbered: 19 14
+1 -6
Documentation/userspace-api/media/rc/remote_controllers.rst
··· 7 7 Part III - Remote Controller API 8 8 ################################ 9 9 10 - .. only:: html 11 - 12 - .. class:: toc-title 13 - 14 - Table of Contents 15 - 16 10 .. toctree:: 11 + :caption: Table of Contents 17 12 :maxdepth: 5 18 13 :numbered: 19 14
+1 -6
Documentation/userspace-api/media/v4l/v4l2.rst
··· 11 11 12 12 **Revision 4.5** 13 13 14 - .. only:: html 15 - 16 - .. class:: toc-title 17 - 18 - Table of Contents 19 - 20 14 .. toctree:: 15 + :caption: Table of Contents 21 16 :numbered: 22 17 :maxdepth: 5 23 18
+39
Documentation/userspace-api/tee.rst
··· 1 + .. SPDX-License-Identifier: GPL-2.0 2 + .. tee: 3 + 4 + ================================================== 5 + TEE (Trusted Execution Environment) Userspace API 6 + ================================================== 7 + 8 + include/uapi/linux/tee.h defines the generic interface to a TEE. 9 + 10 + User space (the client) connects to the driver by opening /dev/tee[0-9]* or 11 + /dev/teepriv[0-9]*. 12 + 13 + - TEE_IOC_SHM_ALLOC allocates shared memory and returns a file descriptor 14 + which user space can mmap. When user space doesn't need the file 15 + descriptor any more, it should be closed. When shared memory isn't needed 16 + any longer it should be unmapped with munmap() to allow the reuse of 17 + memory. 18 + 19 + - TEE_IOC_VERSION lets user space know which TEE this driver handles and 20 + its capabilities. 21 + 22 + - TEE_IOC_OPEN_SESSION opens a new session to a Trusted Application. 23 + 24 + - TEE_IOC_INVOKE invokes a function in a Trusted Application. 25 + 26 + - TEE_IOC_CANCEL may cancel an ongoing TEE_IOC_OPEN_SESSION or TEE_IOC_INVOKE. 27 + 28 + - TEE_IOC_CLOSE_SESSION closes a session to a Trusted Application. 29 + 30 + There are two classes of clients, normal clients and supplicants. The latter is 31 + a helper process for the TEE to access resources in Linux, for example file 32 + system access. A normal client opens /dev/tee[0-9]* and a supplicant opens 33 + /dev/teepriv[0-9]. 34 + 35 + Much of the communication between clients and the TEE is opaque to the 36 + driver. The main job for the driver is to receive requests from the 37 + clients, forward them to the TEE and send back the results. In the case of 38 + supplicants the communication goes in the other direction, the TEE sends 39 + requests to the supplicant which then sends back the result.
+12 -9
MAINTAINERS
··· 5256 5256 F: drivers/usb/atm/cxacru.c 5257 5257 5258 5258 CONFIDENTIAL COMPUTING THREAT MODEL FOR X86 VIRTUALIZATION (SNP/TDX) 5259 - M: Elena Reshetova <elena.reshetova@intel.com> 5260 - M: Carlos Bilbao <carlos.bilbao@amd.com> 5261 - S: Maintained 5262 - F: Documentation/security/snp-tdx-threat-model.rst 5259 + M: Elena Reshetova <elena.reshetova@intel.com> 5260 + M: Carlos Bilbao <carlos.bilbao@amd.com> 5261 + S: Maintained 5262 + F: Documentation/security/snp-tdx-threat-model.rst 5263 5263 5264 5264 CONFIGFS 5265 5265 M: Joel Becker <jlbec@evilplan.org> ··· 5884 5884 M: Stuart Hayes <stuart.w.hayes@gmail.com> 5885 5885 L: platform-driver-x86@vger.kernel.org 5886 5886 S: Maintained 5887 - F: Documentation/driver-api/dcdbas.rst 5887 + F: Documentation/userspace-api/dcdbas.rst 5888 5888 F: drivers/platform/x86/dell/dcdbas.* 5889 5889 5890 5890 DELL WMI DDV DRIVER ··· 11238 11238 ISAPNP 11239 11239 M: Jaroslav Kysela <perex@perex.cz> 11240 11240 S: Maintained 11241 - F: Documentation/driver-api/isapnp.rst 11241 + F: Documentation/userspace-api/isapnp.rst 11242 11242 F: drivers/pnp/isapnp/ 11243 11243 F: include/linux/isapnp.h 11244 11244 ··· 12750 12750 F: include/linux/mailbox/arm_mhuv2_message.h 12751 12751 12752 12752 MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7 12753 - M: Michael Kerrisk <mtk.manpages@gmail.com> 12753 + M: Alejandro Colomar <alx@kernel.org> 12754 12754 L: linux-man@vger.kernel.org 12755 12755 S: Maintained 12756 12756 W: http://www.kernel.org/doc/man-pages ··· 20335 20335 20336 20336 SPANISH DOCUMENTATION 20337 20337 M: Carlos Bilbao <carlos.bilbao@amd.com> 20338 + R: Avadhut Naik <avadhut.naik@amd.com> 20338 20339 S: Maintained 20339 20340 F: Documentation/translations/sp_SP/ 20340 20341 ··· 21325 21324 R: Sumit Garg <sumit.garg@linaro.org> 21326 21325 L: op-tee@lists.trustedfirmware.org 21327 21326 S: Maintained 21328 - F: Documentation/staging/tee.rst 21327 + F: Documentation/driver-api/tee.rst 21328 + F: Documentation/tee/ 21329 + F: Documentation/userspace-api/tee.rst 21329 21330 F: drivers/tee/ 21330 21331 F: include/linux/tee_drv.h 21331 21332 F: include/uapi/linux/tee.h ··· 22098 22095 F: kernel/trace/trace_sched_wakeup.c 22099 22096 22100 22097 TRADITIONAL CHINESE DOCUMENTATION 22101 - M: Hu Haowen <src.res.211@gmail.com> 22098 + M: Hu Haowen <2023002089@link.tyut.edu.cn> 22102 22099 S: Maintained 22103 22100 W: https://github.com/srcres258/linux-doc 22104 22101 T: git git://github.com/srcres258/linux-doc.git doc-zh-tw
+1 -1
drivers/platform/x86/dell/Kconfig
··· 37 37 Interrupts (SMIs) and Host Control Actions (system power cycle or 38 38 power off after OS shutdown) on certain Dell systems. 39 39 40 - See <file:Documentation/driver-api/dcdbas.rst> for more details on the driver 40 + See <file:Documentation/userspace-api/dcdbas.rst> for more details on the driver 41 41 and the Dell systems on which Dell systems management software makes 42 42 use of this driver. 43 43
+1 -1
drivers/platform/x86/dell/dcdbas.c
··· 7 7 * and Host Control Actions (power cycle or power off after OS shutdown) on 8 8 * Dell systems. 9 9 * 10 - * See Documentation/driver-api/dcdbas.rst for more information. 10 + * See Documentation/userspace-api/dcdbas.rst for more information. 11 11 * 12 12 * Copyright (C) 1995-2006 Dell Inc. 13 13 */
+1 -1
drivers/pnp/isapnp/Kconfig
··· 7 7 depends on ISA || COMPILE_TEST 8 8 help 9 9 Say Y here if you would like support for ISA Plug and Play devices. 10 - Some information is in <file:Documentation/driver-api/isapnp.rst>. 10 + Some information is in <file:Documentation/userspace-api/isapnp.rst>. 11 11 12 12 If unsure, say Y.
+1 -1
drivers/tee/optee/Kconfig
··· 23 23 https://trustedfirmware-a.readthedocs.io/en/latest/threat_model/threat_model.html 24 24 25 25 Additional documentation on kernel security risks are at 26 - Documentation/staging/tee.rst. 26 + Documentation/tee/op-tee.rst.
+1 -1
fs/vboxsf/vboxsf_wrappers.c
··· 114 114 * vboxsf_create - Create a new file or folder 115 115 * @root: Root of the shared folder in which to create the file 116 116 * @parsed_path: The path of the file or folder relative to the shared folder 117 - * @param: create_parms Parameters for file/folder creation. 117 + * @create_parms: Parameters for file/folder creation. 118 118 * 119 119 * Create a new file or folder or open an existing one in a shared folder. 120 120 * Note this function always returns 0 / success unless an exceptional condition
+2 -1
scripts/get_abi.pl
··· 93 93 return if ($mode & S_IFDIR); 94 94 return if ($file =~ m,/README,); 95 95 return if ($file =~ m,/\.,); 96 + return if ($file =~ m,\.(rej|org|orig|bak)$,); 96 97 97 98 my $name = $file; 98 99 $name =~ s,.*/,,; 99 100 100 101 my $fn = $file; 101 - $fn =~ s,Documentation/ABI/,,; 102 + $fn =~ s,.*Documentation/ABI/,,; 102 103 103 104 my $nametag = "File $fn"; 104 105 $data{$nametag}->{what} = "File $name";
+12 -3
scripts/kernel-doc
··· 23 23 24 24 =head1 SYNOPSIS 25 25 26 - kernel-doc [-h] [-v] [-Werror] [-Wall] [-Wreturn] [-Wshort-description] [-Wcontents-before-sections] 26 + kernel-doc [-h] [-v] [-Werror] [-Wall] [-Wreturn] [-Wshort-desc[ription]] [-Wcontents-before-sections] 27 27 [ -man | 28 28 -rst [-sphinx-version VERSION] [-enable-lineno] | 29 29 -none ··· 328 328 $Werror = 1; 329 329 } elsif ($cmd eq "Wreturn") { 330 330 $Wreturn = 1; 331 - } elsif ($cmd eq "Wshort-desc") { 331 + } elsif ($cmd eq "Wshort-desc" or $cmd eq "Wshort-description") { 332 332 $Wshort_desc = 1; 333 333 } elsif ($cmd eq "Wcontents-before-sections") { 334 334 $Wcontents_before_sections = 1; ··· 1143 1143 # strip attributes 1144 1144 $members =~ s/\s*$attribute/ /gi; 1145 1145 $members =~ s/\s*__aligned\s*\([^;]*\)/ /gos; 1146 + $members =~ s/\s*__counted_by\s*\([^;]*\)/ /gos; 1146 1147 $members =~ s/\s*__packed\s*/ /gos; 1147 1148 $members =~ s/\s*CRYPTO_MINALIGN_ATTR/ /gos; 1148 1149 $members =~ s/\s*____cacheline_aligned_in_smp/ /gos; ··· 1607 1606 $parameterdescs{$param} = $undescribed; 1608 1607 1609 1608 if (show_warnings($type, $declaration_name) && $param !~ /\./) { 1610 - emit_warning("${file}:$.", "Function parameter or member '$param' not described in '$declaration_name'\n"); 1609 + emit_warning("${file}:$.", "Function parameter or struct member '$param' not described in '$declaration_name'\n"); 1611 1610 } 1612 1611 } 1613 1612 ··· 1657 1656 if ($decl_type eq "function") { 1658 1657 emit_warning("${file}:$.", 1659 1658 "Excess function parameter " . 1659 + "'$sects[$sx]' " . 1660 + "description in '$decl_name'\n"); 1661 + } 1662 + elsif (($decl_type eq "struct") or 1663 + ($decl_type eq "union")) { 1664 + emit_warning("${file}:$.", 1665 + "Excess $decl_type member " . 1660 1666 "'$sects[$sx]' " . 1661 1667 "description in '$decl_name'\n"); 1662 1668 } ··· 2126 2118 } 2127 2119 2128 2120 if (/$doc_sect/i) { # case insensitive for supported section names 2121 + $in_doc_sect = 1; 2129 2122 $newsection = $1; 2130 2123 $newcontents = $2; 2131 2124
+1 -9
scripts/sphinx-pre-install
··· 32 32 my $activate_cmd; 33 33 my $min_version; 34 34 my $cur_version; 35 - my $rec_version = "1.7.9"; # PDF won't build here 36 - my $min_pdf_version = "2.4.4"; # Min version where pdf builds 35 + my $rec_version = "3.4.3"; 37 36 my $latest_avail_ver; 38 37 39 38 # ··· 790 791 791 792 # Version is OK. Nothing to do. 792 793 if ($cur_version && ($cur_version ge $rec_version)) { 793 - if ($cur_version lt $min_pdf_version) { 794 - print "note: If you want pdf, you need at least Sphinx $min_pdf_version.\n"; 795 - } 796 794 return; 797 795 }; 798 796 ··· 837 841 printf "\nNeed to activate Sphinx (version $latest_avail_ver) on virtualenv with:\n"; 838 842 printf "\t. $activate_cmd\n"; 839 843 deactivate_help(); 840 - 841 - if ($latest_avail_ver lt $min_pdf_version) { 842 - print "note: If you want pdf, you need at least Sphinx $min_pdf_version.\n"; 843 - } 844 844 845 845 return; 846 846 }