syslinux/doc/SubmittingPatches.txt
<<
>>
Prefs
   1I don't have specific submission guidelines for Syslinux, but the ones
   2that appropriate to the Linux kernel are certainly good enough for
   3Syslinux.
   4
   5In particular, however, I appreciate if patches sent follow the
   6standard Linux submission format, as I can automatically import them
   7into git, retaining description and author information.  Thus, this
   8file from the Linux kernel might be useful.
   9
  10
  11    -----------------------------------------------------------------------
  12
  13
  14
  15        How to Get Your Change Into the Linux Kernel
  16                or
  17        Care And Operation Of Your Linus Torvalds
  18
  19
  20
  21For a person or company who wishes to submit a change to the Linux
  22kernel, the process can sometimes be daunting if you're not familiar
  23with "the system."  This text is a collection of suggestions which
  24can greatly increase the chances of your change being accepted.
  25
  26Read Documentation/SubmitChecklist for a list of items to check
  27before submitting code.  If you are submitting a driver, also read
  28Documentation/SubmittingDrivers.
  29
  30
  31
  32--------------------------------------------
  33SECTION 1 - CREATING AND SENDING YOUR CHANGE
  34--------------------------------------------
  35
  36
  37
  381) "diff -up"
  39------------
  40
  41Use "diff -up" or "diff -uprN" to create patches.
  42
  43All changes to the Linux kernel occur in the form of patches, as
  44generated by diff(1).  When creating your patch, make sure to create it
  45in "unified diff" format, as supplied by the '-u' argument to diff(1).
  46Also, please use the '-p' argument which shows which C function each
  47change is in - that makes the resultant diff a lot easier to read.
  48Patches should be based in the root kernel source directory,
  49not in any lower subdirectory.
  50
  51To create a patch for a single file, it is often sufficient to do:
  52
  53        SRCTREE= linux-2.6
  54        MYFILE=  drivers/net/mydriver.c
  55
  56        cd $SRCTREE
  57        cp $MYFILE $MYFILE.orig
  58        vi $MYFILE      # make your change
  59        cd ..
  60        diff -up $SRCTREE/$MYFILE{.orig,} > /tmp/patch
  61
  62To create a patch for multiple files, you should unpack a "vanilla",
  63or unmodified kernel source tree, and generate a diff against your
  64own source tree.  For example:
  65
  66        MYSRC= /devel/linux-2.6
  67
  68        tar xvfz linux-2.6.12.tar.gz
  69        mv linux-2.6.12 linux-2.6.12-vanilla
  70        diff -uprN -X linux-2.6.12-vanilla/Documentation/dontdiff \
  71                linux-2.6.12-vanilla $MYSRC > /tmp/patch
  72
  73"dontdiff" is a list of files which are generated by the kernel during
  74the build process, and should be ignored in any diff(1)-generated
  75patch.  The "dontdiff" file is included in the kernel tree in
  762.6.12 and later.  For earlier kernel versions, you can get it
  77from <http://www.xenotime.net/linux/doc/dontdiff>.
  78
  79Make sure your patch does not include any extra files which do not
  80belong in a patch submission.  Make sure to review your patch -after-
  81generated it with diff(1), to ensure accuracy.
  82
  83If your changes produce a lot of deltas, you may want to look into
  84splitting them into individual patches which modify things in
  85logical stages.  This will facilitate easier reviewing by other
  86kernel developers, very important if you want your patch accepted.
  87There are a number of scripts which can aid in this:
  88
  89Quilt:
  90http://savannah.nongnu.org/projects/quilt
  91
  92Andrew Morton's patch scripts:
  93http://www.zip.com.au/~akpm/linux/patches/
  94Instead of these scripts, quilt is the recommended patch management
  95tool (see above).
  96
  97
  98
  992) Describe your changes.
 100
 101Describe the technical detail of the change(s) your patch includes.
 102
 103Be as specific as possible.  The WORST descriptions possible include
 104things like "update driver X", "bug fix for driver X", or "this patch
 105includes updates for subsystem X.  Please apply."
 106
 107If your description starts to get long, that's a sign that you probably
 108need to split up your patch.  See #3, next.
 109
 110
 111
 1123) Separate your changes.
 113
 114Separate _logical changes_ into a single patch file.
 115
 116For example, if your changes include both bug fixes and performance
 117enhancements for a single driver, separate those changes into two
 118or more patches.  If your changes include an API update, and a new
 119driver which uses that new API, separate those into two patches.
 120
 121On the other hand, if you make a single change to numerous files,
 122group those changes into a single patch.  Thus a single logical change
 123is contained within a single patch.
 124
 125If one patch depends on another patch in order for a change to be
 126complete, that is OK.  Simply note "this patch depends on patch X"
 127in your patch description.
 128
 129If you cannot condense your patch set into a smaller set of patches,
 130then only post say 15 or so at a time and wait for review and integration.
 131
 132
 133
 1344) Style check your changes.
 135
 136Check your patch for basic style violations, details of which can be
 137found in Documentation/CodingStyle.  Failure to do so simply wastes
 138the reviewers time and will get your patch rejected, probably
 139without even being read.
 140
 141At a minimum you should check your patches with the patch style
 142checker prior to submission (scripts/checkpatch.pl).  You should
 143be able to justify all violations that remain in your patch.
 144
 145
 146
 1475) Select e-mail destination.
 148
 149Look through the MAINTAINERS file and the source code, and determine
 150if your change applies to a specific subsystem of the kernel, with
 151an assigned maintainer.  If so, e-mail that person.
 152
 153If no maintainer is listed, or the maintainer does not respond, send
 154your patch to the primary Linux kernel developer's mailing list,
 155linux-kernel@vger.kernel.org.  Most kernel developers monitor this
 156e-mail list, and can comment on your changes.
 157
 158
 159Do not send more than 15 patches at once to the vger mailing lists!!!
 160
 161
 162Linus Torvalds is the final arbiter of all changes accepted into the
 163Linux kernel.  His e-mail address is <torvalds@linux-foundation.org>.
 164He gets a lot of e-mail, so typically you should do your best to -avoid-
 165sending him e-mail.
 166
 167Patches which are bug fixes, are "obvious" changes, or similarly
 168require little discussion should be sent or CC'd to Linus.  Patches
 169which require discussion or do not have a clear advantage should
 170usually be sent first to linux-kernel.  Only after the patch is
 171discussed should the patch then be submitted to Linus.
 172
 173
 174
 1756) Select your CC (e-mail carbon copy) list.
 176
 177Unless you have a reason NOT to do so, CC linux-kernel@vger.kernel.org.
 178
 179Other kernel developers besides Linus need to be aware of your change,
 180so that they may comment on it and offer code review and suggestions.
 181linux-kernel is the primary Linux kernel developer mailing list.
 182Other mailing lists are available for specific subsystems, such as
 183USB, framebuffer devices, the VFS, the SCSI subsystem, etc.  See the
 184MAINTAINERS file for a mailing list that relates specifically to
 185your change.
 186
 187Majordomo lists of VGER.KERNEL.ORG at:
 188        <http://vger.kernel.org/vger-lists.html>
 189
 190If changes affect userland-kernel interfaces, please send
 191the MAN-PAGES maintainer (as listed in the MAINTAINERS file)
 192a man-pages patch, or at least a notification of the change,
 193so that some information makes its way into the manual pages.
 194
 195Even if the maintainer did not respond in step #4, make sure to ALWAYS
 196copy the maintainer when you change their code.
 197
 198For small patches you may want to CC the Trivial Patch Monkey
 199trivial@kernel.org managed by Adrian Bunk; which collects "trivial"
 200patches. Trivial patches must qualify for one of the following rules:
 201 Spelling fixes in documentation
 202 Spelling fixes which could break grep(1)
 203 Warning fixes (cluttering with useless warnings is bad)
 204 Compilation fixes (only if they are actually correct)
 205 Runtime fixes (only if they actually fix things)
 206 Removing use of deprecated functions/macros (eg. check_region)
 207 Contact detail and documentation fixes
 208 Non-portable code replaced by portable code (even in arch-specific,
 209 since people copy, as long as it's trivial)
 210 Any fix by the author/maintainer of the file (ie. patch monkey
 211 in re-transmission mode)
 212URL: <http://www.kernel.org/pub/linux/kernel/people/bunk/trivial/>
 213
 214
 215
 2167) No MIME, no links, no compression, no attachments.  Just plain text.
 217
 218Linus and other kernel developers need to be able to read and comment
 219on the changes you are submitting.  It is important for a kernel
 220developer to be able to "quote" your changes, using standard e-mail
 221tools, so that they may comment on specific portions of your code.
 222
 223For this reason, all patches should be submitting e-mail "inline".
 224WARNING:  Be wary of your editor's word-wrap corrupting your patch,
 225if you choose to cut-n-paste your patch.
 226
 227Do not attach the patch as a MIME attachment, compressed or not.
 228Many popular e-mail applications will not always transmit a MIME
 229attachment as plain text, making it impossible to comment on your
 230code.  A MIME attachment also takes Linus a bit more time to process,
 231decreasing the likelihood of your MIME-attached change being accepted.
 232
 233Exception:  If your mailer is mangling patches then someone may ask
 234you to re-send them using MIME.
 235
 236See Documentation/email-clients.txt for hints about configuring
 237your e-mail client so that it sends your patches untouched.
 238
 2398) E-mail size.
 240
 241When sending patches to Linus, always follow step #7.
 242
 243Large changes are not appropriate for mailing lists, and some
 244maintainers.  If your patch, uncompressed, exceeds 40 kB in size,
 245it is preferred that you store your patch on an Internet-accessible
 246server, and provide instead a URL (link) pointing to your patch.
 247
 248
 249
 2509) Name your kernel version.
 251
 252It is important to note, either in the subject line or in the patch
 253description, the kernel version to which this patch applies.
 254
 255If the patch does not apply cleanly to the latest kernel version,
 256Linus will not apply it.
 257
 258
 259
 26010) Don't get discouraged.  Re-submit.
 261
 262After you have submitted your change, be patient and wait.  If Linus
 263likes your change and applies it, it will appear in the next version
 264of the kernel that he releases.
 265
 266However, if your change doesn't appear in the next version of the
 267kernel, there could be any number of reasons.  It's YOUR job to
 268narrow down those reasons, correct what was wrong, and submit your
 269updated change.
 270
 271It is quite common for Linus to "drop" your patch without comment.
 272That's the nature of the system.  If he drops your patch, it could be
 273due to
 274* Your patch did not apply cleanly to the latest kernel version.
 275* Your patch was not sufficiently discussed on linux-kernel.
 276* A style issue (see section 2).
 277* An e-mail formatting issue (re-read this section).
 278* A technical problem with your change.
 279* He gets tons of e-mail, and yours got lost in the shuffle.
 280* You are being annoying.
 281
 282When in doubt, solicit comments on linux-kernel mailing list.
 283
 284
 285
 28611) Include PATCH in the subject
 287
 288Due to high e-mail traffic to Linus, and to linux-kernel, it is common
 289convention to prefix your subject line with [PATCH].  This lets Linus
 290and other kernel developers more easily distinguish patches from other
 291e-mail discussions.
 292
 293
 294
 29512) Sign your work
 296
 297To improve tracking of who did what, especially with patches that can
 298percolate to their final resting place in the kernel through several
 299layers of maintainers, we've introduced a "sign-off" procedure on
 300patches that are being emailed around.
 301
 302The sign-off is a simple line at the end of the explanation for the
 303patch, which certifies that you wrote it or otherwise have the right to
 304pass it on as a open-source patch.  The rules are pretty simple: if you
 305can certify the below:
 306
 307        Developer's Certificate of Origin 1.1
 308
 309        By making a contribution to this project, I certify that:
 310
 311        (a) The contribution was created in whole or in part by me and I
 312            have the right to submit it under the open source license
 313            indicated in the file; or
 314
 315        (b) The contribution is based upon previous work that, to the best
 316            of my knowledge, is covered under an appropriate open source
 317            license and I have the right under that license to submit that
 318            work with modifications, whether created in whole or in part
 319            by me, under the same open source license (unless I am
 320            permitted to submit under a different license), as indicated
 321            in the file; or
 322
 323        (c) The contribution was provided directly to me by some other
 324            person who certified (a), (b) or (c) and I have not modified
 325            it.
 326
 327        (d) I understand and agree that this project and the contribution
 328            are public and that a record of the contribution (including all
 329            personal information I submit with it, including my sign-off) is
 330            maintained indefinitely and may be redistributed consistent with
 331            this project or the open source license(s) involved.
 332
 333then you just add a line saying
 334
 335        Signed-off-by: Random J Developer <random@developer.example.org>
 336
 337using your real name (sorry, no pseudonyms or anonymous contributions.)
 338
 339Some people also put extra tags at the end.  They'll just be ignored for
 340now, but you can do this to mark internal company procedures or just
 341point out some special detail about the sign-off.
 342
 343
 34413) When to use Acked-by:
 345
 346The Signed-off-by: tag indicates that the signer was involved in the
 347development of the patch, or that he/she was in the patch's delivery path.
 348
 349If a person was not directly involved in the preparation or handling of a
 350patch but wishes to signify and record their approval of it then they can
 351arrange to have an Acked-by: line added to the patch's changelog.
 352
 353Acked-by: is often used by the maintainer of the affected code when that
 354maintainer neither contributed to nor forwarded the patch.
 355
 356Acked-by: is not as formal as Signed-off-by:.  It is a record that the acker
 357has at least reviewed the patch and has indicated acceptance.  Hence patch
 358mergers will sometimes manually convert an acker's "yep, looks good to me"
 359into an Acked-by:.
 360
 361Acked-by: does not necessarily indicate acknowledgement of the entire patch.
 362For example, if a patch affects multiple subsystems and has an Acked-by: from
 363one subsystem maintainer then this usually indicates acknowledgement of just
 364the part which affects that maintainer's code.  Judgement should be used here.
 365 When in doubt people should refer to the original discussion in the mailing
 366list archives.
 367
 368
 36914) The canonical patch format
 370
 371The canonical patch subject line is:
 372
 373    Subject: [PATCH 001/123] subsystem: summary phrase
 374
 375The canonical patch message body contains the following:
 376
 377  - A "from" line specifying the patch author.
 378
 379  - An empty line.
 380
 381  - The body of the explanation, which will be copied to the
 382    permanent changelog to describe this patch.
 383
 384  - The "Signed-off-by:" lines, described above, which will
 385    also go in the changelog.
 386
 387  - A marker line containing simply "---".
 388
 389  - Any additional comments not suitable for the changelog.
 390
 391  - The actual patch (diff output).
 392
 393The Subject line format makes it very easy to sort the emails
 394alphabetically by subject line - pretty much any email reader will
 395support that - since because the sequence number is zero-padded,
 396the numerical and alphabetic sort is the same.
 397
 398The "subsystem" in the email's Subject should identify which
 399area or subsystem of the kernel is being patched.
 400
 401The "summary phrase" in the email's Subject should concisely
 402describe the patch which that email contains.  The "summary
 403phrase" should not be a filename.  Do not use the same "summary
 404phrase" for every patch in a whole patch series (where a "patch
 405series" is an ordered sequence of multiple, related patches).
 406
 407Bear in mind that the "summary phrase" of your email becomes
 408a globally-unique identifier for that patch.  It propagates
 409all the way into the git changelog.  The "summary phrase" may
 410later be used in developer discussions which refer to the patch.
 411People will want to google for the "summary phrase" to read
 412discussion regarding that patch.
 413
 414A couple of example Subjects:
 415
 416    Subject: [patch 2/5] ext2: improve scalability of bitmap searching
 417    Subject: [PATCHv2 001/207] x86: fix eflags tracking
 418
 419The "from" line must be the very first line in the message body,
 420and has the form:
 421
 422        From: Original Author <author@example.com>
 423
 424The "from" line specifies who will be credited as the author of the
 425patch in the permanent changelog.  If the "from" line is missing,
 426then the "From:" line from the email header will be used to determine
 427the patch author in the changelog.
 428
 429The explanation body will be committed to the permanent source
 430changelog, so should make sense to a competent reader who has long
 431since forgotten the immediate details of the discussion that might
 432have led to this patch.
 433
 434The "---" marker line serves the essential purpose of marking for patch
 435handling tools where the changelog message ends.
 436
 437One good use for the additional comments after the "---" marker is for
 438a diffstat, to show what files have changed, and the number of inserted
 439and deleted lines per file.  A diffstat is especially useful on bigger
 440patches.  Other comments relevant only to the moment or the maintainer,
 441not suitable for the permanent changelog, should also go here.
 442Use diffstat options "-p 1 -w 70" so that filenames are listed from the
 443top of the kernel source tree and don't use too much horizontal space
 444(easily fit in 80 columns, maybe with some indentation).
 445
 446See more details on the proper patch format in the following
 447references.
 448
 449
 450
 451
 452-----------------------------------
 453SECTION 2 - HINTS, TIPS, AND TRICKS
 454-----------------------------------
 455
 456This section lists many of the common "rules" associated with code
 457submitted to the kernel.  There are always exceptions... but you must
 458have a really good reason for doing so.  You could probably call this
 459section Linus Computer Science 101.
 460
 461
 462
 4631) Read Documentation/CodingStyle
 464
 465Nuff said.  If your code deviates too much from this, it is likely
 466to be rejected without further review, and without comment.
 467
 468One significant exception is when moving code from one file to
 469another -- in this case you should not modify the moved code at all in
 470the same patch which moves it.  This clearly delineates the act of
 471moving the code and your changes.  This greatly aids review of the
 472actual differences and allows tools to better track the history of
 473the code itself.
 474
 475Check your patches with the patch style checker prior to submission
 476(scripts/checkpatch.pl).  The style checker should be viewed as
 477a guide not as the final word.  If your code looks better with
 478a violation then its probably best left alone.
 479
 480The checker reports at three levels:
 481 - ERROR: things that are very likely to be wrong
 482 - WARNING: things requiring careful review
 483 - CHECK: things requiring thought
 484
 485You should be able to justify all violations that remain in your
 486patch.
 487
 488
 489
 4902) #ifdefs are ugly
 491
 492Code cluttered with ifdefs is difficult to read and maintain.  Don't do
 493it.  Instead, put your ifdefs in a header, and conditionally define
 494'static inline' functions, or macros, which are used in the code.
 495Let the compiler optimize away the "no-op" case.
 496
 497Simple example, of poor code:
 498
 499        dev = alloc_etherdev (sizeof(struct funky_private));
 500        if (!dev)
 501                return -ENODEV;
 502        #ifdef CONFIG_NET_FUNKINESS
 503        init_funky_net(dev);
 504        #endif
 505
 506Cleaned-up example:
 507
 508(in header)
 509        #ifndef CONFIG_NET_FUNKINESS
 510        static inline void init_funky_net (struct net_device *d) {}
 511        #endif
 512
 513(in the code itself)
 514        dev = alloc_etherdev (sizeof(struct funky_private));
 515        if (!dev)
 516                return -ENODEV;
 517        init_funky_net(dev);
 518
 519
 520
 5213) 'static inline' is better than a macro
 522
 523Static inline functions are greatly preferred over macros.
 524They provide type safety, have no length limitations, no formatting
 525limitations, and under gcc they are as cheap as macros.
 526
 527Macros should only be used for cases where a static inline is clearly
 528suboptimal [there a few, isolated cases of this in fast paths],
 529or where it is impossible to use a static inline function [such as
 530string-izing].
 531
 532'static inline' is preferred over 'static __inline__', 'extern inline',
 533and 'extern __inline__'.
 534
 535
 536
 5374) Don't over-design.
 538
 539Don't try to anticipate nebulous future cases which may or may not
 540be useful:  "Make it as simple as you can, and no simpler."
 541
 542
 543
 544----------------------
 545SECTION 3 - REFERENCES
 546----------------------
 547
 548Andrew Morton, "The perfect patch" (tpp).
 549  <http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt>
 550
 551Jeff Garzik, "Linux kernel patch submission format".
 552  <http://linux.yyz.us/patch-format.html>
 553
 554Greg Kroah-Hartman, "How to piss off a kernel subsystem maintainer".
 555  <http://www.kroah.com/log/2005/03/31/>
 556  <http://www.kroah.com/log/2005/07/08/>
 557  <http://www.kroah.com/log/2005/10/19/>
 558  <http://www.kroah.com/log/2006/01/11/>
 559
 560NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!
 561  <http://marc.theaimsgroup.com/?l=linux-kernel&m=112112749912944&w=2>
 562
 563Kernel Documentation/CodingStyle:
 564  <http://users.sosdg.org/~qiyong/lxr/source/Documentation/CodingStyle>
 565
 566Linus Torvalds's mail on the canonical patch format:
 567  <http://lkml.org/lkml/2005/4/7/183>
 568--
 569
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.