cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

submitting-patches.rst (37520B)


      1.. _submittingpatches:
      2
      3Submitting patches: the essential guide to getting your code into the kernel
      4============================================================================
      5
      6For a person or company who wishes to submit a change to the Linux
      7kernel, the process can sometimes be daunting if you're not familiar
      8with "the system."  This text is a collection of suggestions which
      9can greatly increase the chances of your change being accepted.
     10
     11This document contains a large number of suggestions in a relatively terse
     12format.  For detailed information on how the kernel development process
     13works, see Documentation/process/development-process.rst. Also, read
     14Documentation/process/submit-checklist.rst
     15for a list of items to check before submitting code.  If you are submitting
     16a driver, also read Documentation/process/submitting-drivers.rst; for device
     17tree binding patches, read
     18Documentation/devicetree/bindings/submitting-patches.rst.
     19
     20This documentation assumes that you're using ``git`` to prepare your patches.
     21If you're unfamiliar with ``git``, you would be well-advised to learn how to
     22use it, it will make your life as a kernel developer and in general much
     23easier.
     24
     25Some subsystems and maintainer trees have additional information about
     26their workflow and expectations, see
     27:ref:`Documentation/process/maintainer-handbooks.rst <maintainer_handbooks_main>`.
     28
     29Obtain a current source tree
     30----------------------------
     31
     32If you do not have a repository with the current kernel source handy, use
     33``git`` to obtain one.  You'll want to start with the mainline repository,
     34which can be grabbed with::
     35
     36  git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
     37
     38Note, however, that you may not want to develop against the mainline tree
     39directly.  Most subsystem maintainers run their own trees and want to see
     40patches prepared against those trees.  See the **T:** entry for the subsystem
     41in the MAINTAINERS file to find that tree, or simply ask the maintainer if
     42the tree is not listed there.
     43
     44.. _describe_changes:
     45
     46Describe your changes
     47---------------------
     48
     49Describe your problem.  Whether your patch is a one-line bug fix or
     505000 lines of a new feature, there must be an underlying problem that
     51motivated you to do this work.  Convince the reviewer that there is a
     52problem worth fixing and that it makes sense for them to read past the
     53first paragraph.
     54
     55Describe user-visible impact.  Straight up crashes and lockups are
     56pretty convincing, but not all bugs are that blatant.  Even if the
     57problem was spotted during code review, describe the impact you think
     58it can have on users.  Keep in mind that the majority of Linux
     59installations run kernels from secondary stable trees or
     60vendor/product-specific trees that cherry-pick only specific patches
     61from upstream, so include anything that could help route your change
     62downstream: provoking circumstances, excerpts from dmesg, crash
     63descriptions, performance regressions, latency spikes, lockups, etc.
     64
     65Quantify optimizations and trade-offs.  If you claim improvements in
     66performance, memory consumption, stack footprint, or binary size,
     67include numbers that back them up.  But also describe non-obvious
     68costs.  Optimizations usually aren't free but trade-offs between CPU,
     69memory, and readability; or, when it comes to heuristics, between
     70different workloads.  Describe the expected downsides of your
     71optimization so that the reviewer can weigh costs against benefits.
     72
     73Once the problem is established, describe what you are actually doing
     74about it in technical detail.  It's important to describe the change
     75in plain English for the reviewer to verify that the code is behaving
     76as you intend it to.
     77
     78The maintainer will thank you if you write your patch description in a
     79form which can be easily pulled into Linux's source code management
     80system, ``git``, as a "commit log".  See :ref:`the_canonical_patch_format`.
     81
     82Solve only one problem per patch.  If your description starts to get
     83long, that's a sign that you probably need to split up your patch.
     84See :ref:`split_changes`.
     85
     86When you submit or resubmit a patch or patch series, include the
     87complete patch description and justification for it.  Don't just
     88say that this is version N of the patch (series).  Don't expect the
     89subsystem maintainer to refer back to earlier patch versions or referenced
     90URLs to find the patch description and put that into the patch.
     91I.e., the patch (series) and its description should be self-contained.
     92This benefits both the maintainers and reviewers.  Some reviewers
     93probably didn't even receive earlier versions of the patch.
     94
     95Describe your changes in imperative mood, e.g. "make xyzzy do frotz"
     96instead of "[This patch] makes xyzzy do frotz" or "[I] changed xyzzy
     97to do frotz", as if you are giving orders to the codebase to change
     98its behaviour.
     99
    100If you want to refer to a specific commit, don't just refer to the
    101SHA-1 ID of the commit. Please also include the oneline summary of
    102the commit, to make it easier for reviewers to know what it is about.
    103Example::
    104
    105	Commit e21d2170f36602ae2708 ("video: remove unnecessary
    106	platform_set_drvdata()") removed the unnecessary
    107	platform_set_drvdata(), but left the variable "dev" unused,
    108	delete it.
    109
    110You should also be sure to use at least the first twelve characters of the
    111SHA-1 ID.  The kernel repository holds a *lot* of objects, making
    112collisions with shorter IDs a real possibility.  Bear in mind that, even if
    113there is no collision with your six-character ID now, that condition may
    114change five years from now.
    115
    116If related discussions or any other background information behind the change
    117can be found on the web, add 'Link:' tags pointing to it. In case your patch
    118fixes a bug, for example, add a tag with a URL referencing the report in the
    119mailing list archives or a bug tracker; if the patch is a result of some
    120earlier mailing list discussion or something documented on the web, point to
    121it.
    122
    123When linking to mailing list archives, preferably use the lore.kernel.org
    124message archiver service. To create the link URL, use the contents of the
    125``Message-Id`` header of the message without the surrounding angle brackets.
    126For example::
    127
    128    Link: https://lore.kernel.org/r/30th.anniversary.repost@klaava.Helsinki.FI/
    129
    130Please check the link to make sure that it is actually working and points
    131to the relevant message.
    132
    133However, try to make your explanation understandable without external
    134resources. In addition to giving a URL to a mailing list archive or bug,
    135summarize the relevant points of the discussion that led to the
    136patch as submitted.
    137
    138If your patch fixes a bug in a specific commit, e.g. you found an issue using
    139``git bisect``, please use the 'Fixes:' tag with the first 12 characters of
    140the SHA-1 ID, and the one line summary.  Do not split the tag across multiple
    141lines, tags are exempt from the "wrap at 75 columns" rule in order to simplify
    142parsing scripts.  For example::
    143
    144	Fixes: 54a4f0239f2e ("KVM: MMU: make kvm_mmu_zap_page() return the number of pages it actually freed")
    145
    146The following ``git config`` settings can be used to add a pretty format for
    147outputting the above style in the ``git log`` or ``git show`` commands::
    148
    149	[core]
    150		abbrev = 12
    151	[pretty]
    152		fixes = Fixes: %h (\"%s\")
    153
    154An example call::
    155
    156	$ git log -1 --pretty=fixes 54a4f0239f2e
    157	Fixes: 54a4f0239f2e ("KVM: MMU: make kvm_mmu_zap_page() return the number of pages it actually freed")
    158
    159.. _split_changes:
    160
    161Separate your changes
    162---------------------
    163
    164Separate each **logical change** into a separate patch.
    165
    166For example, if your changes include both bug fixes and performance
    167enhancements for a single driver, separate those changes into two
    168or more patches.  If your changes include an API update, and a new
    169driver which uses that new API, separate those into two patches.
    170
    171On the other hand, if you make a single change to numerous files,
    172group those changes into a single patch.  Thus a single logical change
    173is contained within a single patch.
    174
    175The point to remember is that each patch should make an easily understood
    176change that can be verified by reviewers.  Each patch should be justifiable
    177on its own merits.
    178
    179If one patch depends on another patch in order for a change to be
    180complete, that is OK.  Simply note **"this patch depends on patch X"**
    181in your patch description.
    182
    183When dividing your change into a series of patches, take special care to
    184ensure that the kernel builds and runs properly after each patch in the
    185series.  Developers using ``git bisect`` to track down a problem can end up
    186splitting your patch series at any point; they will not thank you if you
    187introduce bugs in the middle.
    188
    189If you cannot condense your patch set into a smaller set of patches,
    190then only post say 15 or so at a time and wait for review and integration.
    191
    192
    193
    194Style-check your changes
    195------------------------
    196
    197Check your patch for basic style violations, details of which can be
    198found in Documentation/process/coding-style.rst.
    199Failure to do so simply wastes
    200the reviewers time and will get your patch rejected, probably
    201without even being read.
    202
    203One significant exception is when moving code from one file to
    204another -- in this case you should not modify the moved code at all in
    205the same patch which moves it.  This clearly delineates the act of
    206moving the code and your changes.  This greatly aids review of the
    207actual differences and allows tools to better track the history of
    208the code itself.
    209
    210Check your patches with the patch style checker prior to submission
    211(scripts/checkpatch.pl).  Note, though, that the style checker should be
    212viewed as a guide, not as a replacement for human judgment.  If your code
    213looks better with a violation then its probably best left alone.
    214
    215The checker reports at three levels:
    216 - ERROR: things that are very likely to be wrong
    217 - WARNING: things requiring careful review
    218 - CHECK: things requiring thought
    219
    220You should be able to justify all violations that remain in your
    221patch.
    222
    223
    224Select the recipients for your patch
    225------------------------------------
    226
    227You should always copy the appropriate subsystem maintainer(s) on any patch
    228to code that they maintain; look through the MAINTAINERS file and the
    229source code revision history to see who those maintainers are.  The
    230script scripts/get_maintainer.pl can be very useful at this step (pass paths to
    231your patches as arguments to scripts/get_maintainer.pl).  If you cannot find a
    232maintainer for the subsystem you are working on, Andrew Morton
    233(akpm@linux-foundation.org) serves as a maintainer of last resort.
    234
    235You should also normally choose at least one mailing list to receive a copy
    236of your patch set.  linux-kernel@vger.kernel.org should be used by default
    237for all patches, but the volume on that list has caused a number of
    238developers to tune it out.  Look in the MAINTAINERS file for a
    239subsystem-specific list; your patch will probably get more attention there.
    240Please do not spam unrelated lists, though.
    241
    242Many kernel-related lists are hosted on vger.kernel.org; you can find a
    243list of them at http://vger.kernel.org/vger-lists.html.  There are
    244kernel-related lists hosted elsewhere as well, though.
    245
    246Do not send more than 15 patches at once to the vger mailing lists!!!
    247
    248Linus Torvalds is the final arbiter of all changes accepted into the
    249Linux kernel.  His e-mail address is <torvalds@linux-foundation.org>.
    250He gets a lot of e-mail, and, at this point, very few patches go through
    251Linus directly, so typically you should do your best to -avoid-
    252sending him e-mail.
    253
    254If you have a patch that fixes an exploitable security bug, send that patch
    255to security@kernel.org.  For severe bugs, a short embargo may be considered
    256to allow distributors to get the patch out to users; in such cases,
    257obviously, the patch should not be sent to any public lists. See also
    258Documentation/admin-guide/security-bugs.rst.
    259
    260Patches that fix a severe bug in a released kernel should be directed
    261toward the stable maintainers by putting a line like this::
    262
    263  Cc: stable@vger.kernel.org
    264
    265into the sign-off area of your patch (note, NOT an email recipient).  You
    266should also read Documentation/process/stable-kernel-rules.rst
    267in addition to this document.
    268
    269If changes affect userland-kernel interfaces, please send the MAN-PAGES
    270maintainer (as listed in the MAINTAINERS file) a man-pages patch, or at
    271least a notification of the change, so that some information makes its way
    272into the manual pages.  User-space API changes should also be copied to
    273linux-api@vger.kernel.org.
    274
    275
    276No MIME, no links, no compression, no attachments.  Just plain text
    277-------------------------------------------------------------------
    278
    279Linus and other kernel developers need to be able to read and comment
    280on the changes you are submitting.  It is important for a kernel
    281developer to be able to "quote" your changes, using standard e-mail
    282tools, so that they may comment on specific portions of your code.
    283
    284For this reason, all patches should be submitted by e-mail "inline". The
    285easiest way to do this is with ``git send-email``, which is strongly
    286recommended.  An interactive tutorial for ``git send-email`` is available at
    287https://git-send-email.io.
    288
    289If you choose not to use ``git send-email``:
    290
    291.. warning::
    292
    293  Be wary of your editor's word-wrap corrupting your patch,
    294  if you choose to cut-n-paste your patch.
    295
    296Do not attach the patch as a MIME attachment, compressed or not.
    297Many popular e-mail applications will not always transmit a MIME
    298attachment as plain text, making it impossible to comment on your
    299code.  A MIME attachment also takes Linus a bit more time to process,
    300decreasing the likelihood of your MIME-attached change being accepted.
    301
    302Exception:  If your mailer is mangling patches then someone may ask
    303you to re-send them using MIME.
    304
    305See Documentation/process/email-clients.rst for hints about configuring
    306your e-mail client so that it sends your patches untouched.
    307
    308Respond to review comments
    309--------------------------
    310
    311Your patch will almost certainly get comments from reviewers on ways in
    312which the patch can be improved, in the form of a reply to your email. You must
    313respond to those comments; ignoring reviewers is a good way to get ignored in
    314return. You can simply reply to their emails to answer their comments. Review
    315comments or questions that do not lead to a code change should almost certainly
    316bring about a comment or changelog entry so that the next reviewer better
    317understands what is going on.
    318
    319Be sure to tell the reviewers what changes you are making and to thank them
    320for their time.  Code review is a tiring and time-consuming process, and
    321reviewers sometimes get grumpy.  Even in that case, though, respond
    322politely and address the problems they have pointed out.  When sending a next
    323version, add a ``patch changelog`` to the cover letter or to individual patches
    324explaining difference aganst previous submission (see
    325:ref:`the_canonical_patch_format`).
    326
    327See Documentation/process/email-clients.rst for recommendations on email
    328clients and mailing list etiquette.
    329
    330.. _resend_reminders:
    331
    332Don't get discouraged - or impatient
    333------------------------------------
    334
    335After you have submitted your change, be patient and wait.  Reviewers are
    336busy people and may not get to your patch right away.
    337
    338Once upon a time, patches used to disappear into the void without comment,
    339but the development process works more smoothly than that now.  You should
    340receive comments within a week or so; if that does not happen, make sure
    341that you have sent your patches to the right place.  Wait for a minimum of
    342one week before resubmitting or pinging reviewers - possibly longer during
    343busy times like merge windows.
    344
    345It's also ok to resend the patch or the patch series after a couple of
    346weeks with the word "RESEND" added to the subject line::
    347
    348   [PATCH Vx RESEND] sub/sys: Condensed patch summary
    349
    350Don't add "RESEND" when you are submitting a modified version of your
    351patch or patch series - "RESEND" only applies to resubmission of a
    352patch or patch series which have not been modified in any way from the
    353previous submission.
    354
    355
    356Include PATCH in the subject
    357-----------------------------
    358
    359Due to high e-mail traffic to Linus, and to linux-kernel, it is common
    360convention to prefix your subject line with [PATCH].  This lets Linus
    361and other kernel developers more easily distinguish patches from other
    362e-mail discussions.
    363
    364``git send-email`` will do this for you automatically.
    365
    366
    367Sign your work - the Developer's Certificate of Origin
    368------------------------------------------------------
    369
    370To improve tracking of who did what, especially with patches that can
    371percolate to their final resting place in the kernel through several
    372layers of maintainers, we've introduced a "sign-off" procedure on
    373patches that are being emailed around.
    374
    375The sign-off is a simple line at the end of the explanation for the
    376patch, which certifies that you wrote it or otherwise have the right to
    377pass it on as an open-source patch.  The rules are pretty simple: if you
    378can certify the below:
    379
    380Developer's Certificate of Origin 1.1
    381^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    382
    383By making a contribution to this project, I certify that:
    384
    385        (a) The contribution was created in whole or in part by me and I
    386            have the right to submit it under the open source license
    387            indicated in the file; or
    388
    389        (b) The contribution is based upon previous work that, to the best
    390            of my knowledge, is covered under an appropriate open source
    391            license and I have the right under that license to submit that
    392            work with modifications, whether created in whole or in part
    393            by me, under the same open source license (unless I am
    394            permitted to submit under a different license), as indicated
    395            in the file; or
    396
    397        (c) The contribution was provided directly to me by some other
    398            person who certified (a), (b) or (c) and I have not modified
    399            it.
    400
    401        (d) I understand and agree that this project and the contribution
    402            are public and that a record of the contribution (including all
    403            personal information I submit with it, including my sign-off) is
    404            maintained indefinitely and may be redistributed consistent with
    405            this project or the open source license(s) involved.
    406
    407then you just add a line saying::
    408
    409	Signed-off-by: Random J Developer <random@developer.example.org>
    410
    411using your real name (sorry, no pseudonyms or anonymous contributions.)
    412This will be done for you automatically if you use ``git commit -s``.
    413Reverts should also include "Signed-off-by". ``git revert -s`` does that
    414for you.
    415
    416Some people also put extra tags at the end.  They'll just be ignored for
    417now, but you can do this to mark internal company procedures or just
    418point out some special detail about the sign-off.
    419
    420Any further SoBs (Signed-off-by:'s) following the author's SoB are from
    421people handling and transporting the patch, but were not involved in its
    422development. SoB chains should reflect the **real** route a patch took
    423as it was propagated to the maintainers and ultimately to Linus, with
    424the first SoB entry signalling primary authorship of a single author.
    425
    426
    427When to use Acked-by:, Cc:, and Co-developed-by:
    428------------------------------------------------
    429
    430The Signed-off-by: tag indicates that the signer was involved in the
    431development of the patch, or that he/she was in the patch's delivery path.
    432
    433If a person was not directly involved in the preparation or handling of a
    434patch but wishes to signify and record their approval of it then they can
    435ask to have an Acked-by: line added to the patch's changelog.
    436
    437Acked-by: is often used by the maintainer of the affected code when that
    438maintainer neither contributed to nor forwarded the patch.
    439
    440Acked-by: is not as formal as Signed-off-by:.  It is a record that the acker
    441has at least reviewed the patch and has indicated acceptance.  Hence patch
    442mergers will sometimes manually convert an acker's "yep, looks good to me"
    443into an Acked-by: (but note that it is usually better to ask for an
    444explicit ack).
    445
    446Acked-by: does not necessarily indicate acknowledgement of the entire patch.
    447For example, if a patch affects multiple subsystems and has an Acked-by: from
    448one subsystem maintainer then this usually indicates acknowledgement of just
    449the part which affects that maintainer's code.  Judgement should be used here.
    450When in doubt people should refer to the original discussion in the mailing
    451list archives.
    452
    453If a person has had the opportunity to comment on a patch, but has not
    454provided such comments, you may optionally add a ``Cc:`` tag to the patch.
    455This is the only tag which might be added without an explicit action by the
    456person it names - but it should indicate that this person was copied on the
    457patch.  This tag documents that potentially interested parties
    458have been included in the discussion.
    459
    460Co-developed-by: states that the patch was co-created by multiple developers;
    461it is used to give attribution to co-authors (in addition to the author
    462attributed by the From: tag) when several people work on a single patch.  Since
    463Co-developed-by: denotes authorship, every Co-developed-by: must be immediately
    464followed by a Signed-off-by: of the associated co-author.  Standard sign-off
    465procedure applies, i.e. the ordering of Signed-off-by: tags should reflect the
    466chronological history of the patch insofar as possible, regardless of whether
    467the author is attributed via From: or Co-developed-by:.  Notably, the last
    468Signed-off-by: must always be that of the developer submitting the patch.
    469
    470Note, the From: tag is optional when the From: author is also the person (and
    471email) listed in the From: line of the email header.
    472
    473Example of a patch submitted by the From: author::
    474
    475	<changelog>
    476
    477	Co-developed-by: First Co-Author <first@coauthor.example.org>
    478	Signed-off-by: First Co-Author <first@coauthor.example.org>
    479	Co-developed-by: Second Co-Author <second@coauthor.example.org>
    480	Signed-off-by: Second Co-Author <second@coauthor.example.org>
    481	Signed-off-by: From Author <from@author.example.org>
    482
    483Example of a patch submitted by a Co-developed-by: author::
    484
    485	From: From Author <from@author.example.org>
    486
    487	<changelog>
    488
    489	Co-developed-by: Random Co-Author <random@coauthor.example.org>
    490	Signed-off-by: Random Co-Author <random@coauthor.example.org>
    491	Signed-off-by: From Author <from@author.example.org>
    492	Co-developed-by: Submitting Co-Author <sub@coauthor.example.org>
    493	Signed-off-by: Submitting Co-Author <sub@coauthor.example.org>
    494
    495
    496Using Reported-by:, Tested-by:, Reviewed-by:, Suggested-by: and Fixes:
    497----------------------------------------------------------------------
    498
    499The Reported-by tag gives credit to people who find bugs and report them and it
    500hopefully inspires them to help us again in the future.  Please note that if
    501the bug was reported in private, then ask for permission first before using the
    502Reported-by tag. The tag is intended for bugs; please do not use it to credit
    503feature requests.
    504
    505A Tested-by: tag indicates that the patch has been successfully tested (in
    506some environment) by the person named.  This tag informs maintainers that
    507some testing has been performed, provides a means to locate testers for
    508future patches, and ensures credit for the testers.
    509
    510Reviewed-by:, instead, indicates that the patch has been reviewed and found
    511acceptable according to the Reviewer's Statement:
    512
    513Reviewer's statement of oversight
    514^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    515
    516By offering my Reviewed-by: tag, I state that:
    517
    518	 (a) I have carried out a technical review of this patch to
    519	     evaluate its appropriateness and readiness for inclusion into
    520	     the mainline kernel.
    521
    522	 (b) Any problems, concerns, or questions relating to the patch
    523	     have been communicated back to the submitter.  I am satisfied
    524	     with the submitter's response to my comments.
    525
    526	 (c) While there may be things that could be improved with this
    527	     submission, I believe that it is, at this time, (1) a
    528	     worthwhile modification to the kernel, and (2) free of known
    529	     issues which would argue against its inclusion.
    530
    531	 (d) While I have reviewed the patch and believe it to be sound, I
    532	     do not (unless explicitly stated elsewhere) make any
    533	     warranties or guarantees that it will achieve its stated
    534	     purpose or function properly in any given situation.
    535
    536A Reviewed-by tag is a statement of opinion that the patch is an
    537appropriate modification of the kernel without any remaining serious
    538technical issues.  Any interested reviewer (who has done the work) can
    539offer a Reviewed-by tag for a patch.  This tag serves to give credit to
    540reviewers and to inform maintainers of the degree of review which has been
    541done on the patch.  Reviewed-by: tags, when supplied by reviewers known to
    542understand the subject area and to perform thorough reviews, will normally
    543increase the likelihood of your patch getting into the kernel.
    544
    545Both Tested-by and Reviewed-by tags, once received on mailing list from tester
    546or reviewer, should be added by author to the applicable patches when sending
    547next versions.  However if the patch has changed substantially in following
    548version, these tags might not be applicable anymore and thus should be removed.
    549Usually removal of someone's Tested-by or Reviewed-by tags should be mentioned
    550in the patch changelog (after the '---' separator).
    551
    552A Suggested-by: tag indicates that the patch idea is suggested by the person
    553named and ensures credit to the person for the idea. Please note that this
    554tag should not be added without the reporter's permission, especially if the
    555idea was not posted in a public forum. That said, if we diligently credit our
    556idea reporters, they will, hopefully, be inspired to help us again in the
    557future.
    558
    559A Fixes: tag indicates that the patch fixes an issue in a previous commit. It
    560is used to make it easy to determine where a bug originated, which can help
    561review a bug fix. This tag also assists the stable kernel team in determining
    562which stable kernel versions should receive your fix. This is the preferred
    563method for indicating a bug fixed by the patch. See :ref:`describe_changes`
    564for more details.
    565
    566Note: Attaching a Fixes: tag does not subvert the stable kernel rules
    567process nor the requirement to Cc: stable@vger.kernel.org on all stable
    568patch candidates. For more information, please read
    569Documentation/process/stable-kernel-rules.rst.
    570
    571.. _the_canonical_patch_format:
    572
    573The canonical patch format
    574--------------------------
    575
    576This section describes how the patch itself should be formatted.  Note
    577that, if you have your patches stored in a ``git`` repository, proper patch
    578formatting can be had with ``git format-patch``.  The tools cannot create
    579the necessary text, though, so read the instructions below anyway.
    580
    581The canonical patch subject line is::
    582
    583    Subject: [PATCH 001/123] subsystem: summary phrase
    584
    585The canonical patch message body contains the following:
    586
    587  - A ``from`` line specifying the patch author, followed by an empty
    588    line (only needed if the person sending the patch is not the author).
    589
    590  - The body of the explanation, line wrapped at 75 columns, which will
    591    be copied to the permanent changelog to describe this patch.
    592
    593  - An empty line.
    594
    595  - The ``Signed-off-by:`` lines, described above, which will
    596    also go in the changelog.
    597
    598  - A marker line containing simply ``---``.
    599
    600  - Any additional comments not suitable for the changelog.
    601
    602  - The actual patch (``diff`` output).
    603
    604The Subject line format makes it very easy to sort the emails
    605alphabetically by subject line - pretty much any email reader will
    606support that - since because the sequence number is zero-padded,
    607the numerical and alphabetic sort is the same.
    608
    609The ``subsystem`` in the email's Subject should identify which
    610area or subsystem of the kernel is being patched.
    611
    612The ``summary phrase`` in the email's Subject should concisely
    613describe the patch which that email contains.  The ``summary
    614phrase`` should not be a filename.  Do not use the same ``summary
    615phrase`` for every patch in a whole patch series (where a ``patch
    616series`` is an ordered sequence of multiple, related patches).
    617
    618Bear in mind that the ``summary phrase`` of your email becomes a
    619globally-unique identifier for that patch.  It propagates all the way
    620into the ``git`` changelog.  The ``summary phrase`` may later be used in
    621developer discussions which refer to the patch.  People will want to
    622google for the ``summary phrase`` to read discussion regarding that
    623patch.  It will also be the only thing that people may quickly see
    624when, two or three months later, they are going through perhaps
    625thousands of patches using tools such as ``gitk`` or ``git log
    626--oneline``.
    627
    628For these reasons, the ``summary`` must be no more than 70-75
    629characters, and it must describe both what the patch changes, as well
    630as why the patch might be necessary.  It is challenging to be both
    631succinct and descriptive, but that is what a well-written summary
    632should do.
    633
    634The ``summary phrase`` may be prefixed by tags enclosed in square
    635brackets: "Subject: [PATCH <tag>...] <summary phrase>".  The tags are
    636not considered part of the summary phrase, but describe how the patch
    637should be treated.  Common tags might include a version descriptor if
    638the multiple versions of the patch have been sent out in response to
    639comments (i.e., "v1, v2, v3"), or "RFC" to indicate a request for
    640comments.
    641
    642If there are four patches in a patch series the individual patches may
    643be numbered like this: 1/4, 2/4, 3/4, 4/4. This assures that developers
    644understand the order in which the patches should be applied and that
    645they have reviewed or applied all of the patches in the patch series.
    646
    647Here are some good example Subjects::
    648
    649    Subject: [PATCH 2/5] ext2: improve scalability of bitmap searching
    650    Subject: [PATCH v2 01/27] x86: fix eflags tracking
    651    Subject: [PATCH v2] sub/sys: Condensed patch summary
    652    Subject: [PATCH v2 M/N] sub/sys: Condensed patch summary
    653
    654The ``from`` line must be the very first line in the message body,
    655and has the form:
    656
    657        From: Patch Author <author@example.com>
    658
    659The ``from`` line specifies who will be credited as the author of the
    660patch in the permanent changelog.  If the ``from`` line is missing,
    661then the ``From:`` line from the email header will be used to determine
    662the patch author in the changelog.
    663
    664The explanation body will be committed to the permanent source
    665changelog, so should make sense to a competent reader who has long since
    666forgotten the immediate details of the discussion that might have led to
    667this patch. Including symptoms of the failure which the patch addresses
    668(kernel log messages, oops messages, etc.) are especially useful for
    669people who might be searching the commit logs looking for the applicable
    670patch. The text should be written in such detail so that when read
    671weeks, months or even years later, it can give the reader the needed
    672details to grasp the reasoning for **why** the patch was created.
    673
    674If a patch fixes a compile failure, it may not be necessary to include
    675_all_ of the compile failures; just enough that it is likely that
    676someone searching for the patch can find it. As in the ``summary
    677phrase``, it is important to be both succinct as well as descriptive.
    678
    679The ``---`` marker line serves the essential purpose of marking for
    680patch handling tools where the changelog message ends.
    681
    682One good use for the additional comments after the ``---`` marker is
    683for a ``diffstat``, to show what files have changed, and the number of
    684inserted and deleted lines per file. A ``diffstat`` is especially useful
    685on bigger patches. If you are going to include a ``diffstat`` after the
    686``---`` marker, please use ``diffstat`` options ``-p 1 -w 70`` so that
    687filenames are listed from the top of the kernel source tree and don't
    688use too much horizontal space (easily fit in 80 columns, maybe with some
    689indentation). (``git`` generates appropriate diffstats by default.)
    690
    691Other comments relevant only to the moment or the maintainer, not
    692suitable for the permanent changelog, should also go here. A good
    693example of such comments might be ``patch changelogs`` which describe
    694what has changed between the v1 and v2 version of the patch.
    695
    696Please put this information **after** the ``---`` line which separates
    697the changelog from the rest of the patch. The version information is
    698not part of the changelog which gets committed to the git tree. It is
    699additional information for the reviewers. If it's placed above the
    700commit tags, it needs manual interaction to remove it. If it is below
    701the separator line, it gets automatically stripped off when applying the
    702patch::
    703
    704  <commit message>
    705  ...
    706  Signed-off-by: Author <author@mail>
    707  ---
    708  V2 -> V3: Removed redundant helper function
    709  V1 -> V2: Cleaned up coding style and addressed review comments
    710
    711  path/to/file | 5+++--
    712  ...
    713
    714See more details on the proper patch format in the following
    715references.
    716
    717.. _backtraces:
    718
    719Backtraces in commit mesages
    720^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    721
    722Backtraces help document the call chain leading to a problem. However,
    723not all backtraces are helpful. For example, early boot call chains are
    724unique and obvious. Copying the full dmesg output verbatim, however,
    725adds distracting information like timestamps, module lists, register and
    726stack dumps.
    727
    728Therefore, the most useful backtraces should distill the relevant
    729information from the dump, which makes it easier to focus on the real
    730issue. Here is an example of a well-trimmed backtrace::
    731
    732  unchecked MSR access error: WRMSR to 0xd51 (tried to write 0x0000000000000064)
    733  at rIP: 0xffffffffae059994 (native_write_msr+0x4/0x20)
    734  Call Trace:
    735  mba_wrmsr
    736  update_domains
    737  rdtgroup_mkdir
    738
    739.. _explicit_in_reply_to:
    740
    741Explicit In-Reply-To headers
    742----------------------------
    743
    744It can be helpful to manually add In-Reply-To: headers to a patch
    745(e.g., when using ``git send-email``) to associate the patch with
    746previous relevant discussion, e.g. to link a bug fix to the email with
    747the bug report.  However, for a multi-patch series, it is generally
    748best to avoid using In-Reply-To: to link to older versions of the
    749series.  This way multiple versions of the patch don't become an
    750unmanageable forest of references in email clients.  If a link is
    751helpful, you can use the https://lore.kernel.org/ redirector (e.g., in
    752the cover email text) to link to an earlier version of the patch series.
    753
    754
    755Providing base tree information
    756-------------------------------
    757
    758When other developers receive your patches and start the review process,
    759it is often useful for them to know where in the tree history they
    760should place your work. This is particularly useful for automated CI
    761processes that attempt to run a series of tests in order to establish
    762the quality of your submission before the maintainer starts the review.
    763
    764If you are using ``git format-patch`` to generate your patches, you can
    765automatically include the base tree information in your submission by
    766using the ``--base`` flag. The easiest and most convenient way to use
    767this option is with topical branches::
    768
    769    $ git checkout -t -b my-topical-branch master
    770    Branch 'my-topical-branch' set up to track local branch 'master'.
    771    Switched to a new branch 'my-topical-branch'
    772
    773    [perform your edits and commits]
    774
    775    $ git format-patch --base=auto --cover-letter -o outgoing/ master
    776    outgoing/0000-cover-letter.patch
    777    outgoing/0001-First-Commit.patch
    778    outgoing/...
    779
    780When you open ``outgoing/0000-cover-letter.patch`` for editing, you will
    781notice that it will have the ``base-commit:`` trailer at the very
    782bottom, which provides the reviewer and the CI tools enough information
    783to properly perform ``git am`` without worrying about conflicts::
    784
    785    $ git checkout -b patch-review [base-commit-id]
    786    Switched to a new branch 'patch-review'
    787    $ git am patches.mbox
    788    Applying: First Commit
    789    Applying: ...
    790
    791Please see ``man git-format-patch`` for more information about this
    792option.
    793
    794.. note::
    795
    796    The ``--base`` feature was introduced in git version 2.9.0.
    797
    798If you are not using git to format your patches, you can still include
    799the same ``base-commit`` trailer to indicate the commit hash of the tree
    800on which your work is based. You should add it either in the cover
    801letter or in the first patch of the series and it should be placed
    802either below the ``---`` line or at the very bottom of all other
    803content, right before your email signature.
    804
    805
    806References
    807----------
    808
    809Andrew Morton, "The perfect patch" (tpp).
    810  <https://www.ozlabs.org/~akpm/stuff/tpp.txt>
    811
    812Jeff Garzik, "Linux kernel patch submission format".
    813  <https://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html>
    814
    815Greg Kroah-Hartman, "How to piss off a kernel subsystem maintainer".
    816  <http://www.kroah.com/log/linux/maintainer.html>
    817
    818  <http://www.kroah.com/log/linux/maintainer-02.html>
    819
    820  <http://www.kroah.com/log/linux/maintainer-03.html>
    821
    822  <http://www.kroah.com/log/linux/maintainer-04.html>
    823
    824  <http://www.kroah.com/log/linux/maintainer-05.html>
    825
    826  <http://www.kroah.com/log/linux/maintainer-06.html>
    827
    828NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!
    829  <https://lore.kernel.org/r/20050711.125305.08322243.davem@davemloft.net>
    830
    831Kernel Documentation/process/coding-style.rst
    832
    833Linus Torvalds's mail on the canonical patch format:
    834  <https://lore.kernel.org/r/Pine.LNX.4.58.0504071023190.28951@ppc970.osdl.org>
    835
    836Andi Kleen, "On submitting kernel patches"
    837  Some strategies to get difficult or controversial changes in.
    838
    839  http://halobates.de/on-submitting-patches.pdf