lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 15 Dec 2014 16:42:34 -0600
From:	Corey Minyard <cminyard@...sta.com>
To:	Jonathan Corbet <corbet@....net>,
	LKML <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH RFC] Docs: Modernize SubmittingPatches

No comments besides the ones Randy already mentioned.

Thanks,

-corey

On 12/15/2014 09:52 AM, Jonathan Corbet wrote:
> The SubmittingPatches file still shows a lot of its roots from the era when
> we all sent stuff straight to Linus and hoped for the best.  I've gone in
> and thrashed it up to reflect an age where few of us type our own "diff"
> commands anymore.  Also added a section on preparing signed tags for pull
> requests.
>
> Signed-off-by: Jonathan Corbet <corbet@....net>
> ---
>  Documentation/SubmittingPatches | 433 ++++++++++++++++++++--------------------
>  1 file changed, 212 insertions(+), 221 deletions(-)
>
> diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
> index 1fa1caa198eb..787d0711e18a 100644
> --- a/Documentation/SubmittingPatches
> +++ b/Documentation/SubmittingPatches
> @@ -10,27 +10,48 @@ kernel, the process can sometimes be daunting if you're not familiar
>  with "the system."  This text is a collection of suggestions which
>  can greatly increase the chances of your change being accepted.
>  
> -Read Documentation/SubmitChecklist for a list of items to check
> -before submitting code.  If you are submitting a driver, also read
> +This document contains a large number of suggestions in a relatively terse
> +format.  For detailed information on how the kernel development process
> +works, see Documentation/development-process.  Also, read
> +Documentation/SubmitChecklist for a list of items to check before
> +submitting code.  If you are submitting a driver, also read
>  Documentation/SubmittingDrivers.
>  
>  Many of these steps describe the default behavior of the git version
>  control system; if you use git to prepare your patches, you'll find much
>  of the mechanical work done for you, though you'll still need to prepare
> -and document a sensible set of patches.
> +and document a sensible set of patches.  In general, use of git will make
> +your life as a kernel developer easier.
>  
>  --------------------------------------------
>  SECTION 1 - CREATING AND SENDING YOUR CHANGE
>  --------------------------------------------
>  
>  
> +0) Obtain a current source tree
> +-------------------------------
> +
> +If you do not have a repository with the current kernel source handy, use
> +git to obtain one.  You'll want to start with the mainline repository,
> +which can be grabbed with:
> +
> +  git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
> +
> +Note, however, that you may not want to develop against the mainline tree
> +directly.  Most subsystem maintainers run their own trees and want to see
> +patches prepared against those trees.  See the "T:" entry for the subsystem
> +in the MAINTAINERS file to find that tree, or simply ask the maintainer if
> +the tree is not listed there.
> +
> +It is still possible to download kernel releases via tarballs (as described
> +in the next section), but that is the hard way to do kernel development.
>  
>  1) "diff -up"
>  ------------
>  
> -Use "diff -up" or "diff -uprN" to create patches.  git generates patches
> -in this form by default; if you're using git, you can skip this section
> -entirely.
> +If you must generate your patches by hand, use "diff -up" or "diff -uprN"
> +to create patches.  Git generates patches in this form by default; if
> +you're using git, you can skip this section entirely.
>  
>  All changes to the Linux kernel occur in the form of patches, as
>  generated by diff(1).  When creating your patch, make sure to create it
> @@ -42,7 +63,7 @@ not in any lower subdirectory.
>  
>  To create a patch for a single file, it is often sufficient to do:
>  
> -	SRCTREE= linux-2.6
> +	SRCTREE= linux
>  	MYFILE=  drivers/net/mydriver.c
>  
>  	cd $SRCTREE
> @@ -55,17 +76,16 @@ To create a patch for multiple files, you should unpack a "vanilla",
>  or unmodified kernel source tree, and generate a diff against your
>  own source tree.  For example:
>  
> -	MYSRC= /devel/linux-2.6
> +	MYSRC= /devel/linux
>  
> -	tar xvfz linux-2.6.12.tar.gz
> -	mv linux-2.6.12 linux-2.6.12-vanilla
> -	diff -uprN -X linux-2.6.12-vanilla/Documentation/dontdiff \
> -		linux-2.6.12-vanilla $MYSRC > /tmp/patch
> +	tar xvfz linux-3.19.tar.gz
> +	mv linux-3.19 linux-3.19-vanilla
> +	diff -uprN -X linux-3.19-vanilla/Documentation/dontdiff \
> +		linux-3.19-vanilla $MYSRC > /tmp/patch
>  
>  "dontdiff" is a list of files which are generated by the kernel during
>  the build process, and should be ignored in any diff(1)-generated
> -patch.  The "dontdiff" file is included in the kernel tree in
> -2.6.12 and later.
> +patch.
>  
>  Make sure your patch does not include any extra files which do not
>  belong in a patch submission.  Make sure to review your patch -after-
> @@ -83,6 +103,7 @@ is another popular alternative.
>  
>  
>  2) Describe your changes.
> +-------------------------
>  
>  Describe your problem.  Whether your patch is a one-line bug fix or
>  5000 lines of a new feature, there must be an underlying problem that
> @@ -124,10 +145,10 @@ See #3, next.
>  When you submit or resubmit a patch or patch series, include the
>  complete patch description and justification for it.  Don't just
>  say that this is version N of the patch (series).  Don't expect the
> -patch merger to refer back to earlier patch versions or referenced
> +subsystem maintainer to refer back to earlier patch versions or referenced
>  URLs to find the patch description and put that into the patch.
>  I.e., the patch (series) and its description should be self-contained.
> -This benefits both the patch merger(s) and reviewers.  Some reviewers
> +This benefits both the maintainers and reviewers.  Some reviewers
>  probably didn't even receive earlier versions of the patch.
>  
>  Describe your changes in imperative mood, e.g. "make xyzzy do frotz"
> @@ -156,10 +177,15 @@ Example:
>  	platform_set_drvdata(), but left the variable "dev" unused,
>  	delete it.
>  
> +You should also be sure to use at least the first twelve characters of the
> +SHA-1 ID.  The kernel repository holds a *lot* of objects, making
> +collisions with shorter IDs a real possibility.  Bear in mind that, even if
> +there is no collision with your six-character ID now, that condition may
> +change five years from now.
> +
>  If your patch fixes a bug in a specific commit, e.g. you found an issue using
>  git-bisect, please use the 'Fixes:' tag with the first 12 characters of the
> -SHA-1 ID, and the one line summary.
> -Example:
> +SHA-1 ID, and the one line summary.  For example:
>  
>  	Fixes: e21d2170f366 ("video: remove unnecessary platform_set_drvdata()")
>  
> @@ -172,8 +198,9 @@ outputting the above style in the git log or git show commands
>  		fixes = Fixes: %h (\"%s\")
>  
>  3) Separate your changes.
> +-------------------------
>  
> -Separate _logical changes_ into a single patch file.
> +Separate each _logical change_ into a separate patch.
>  
>  For example, if your changes include both bug fixes and performance
>  enhancements for a single driver, separate those changes into two
> @@ -184,90 +211,114 @@ On the other hand, if you make a single change to numerous files,
>  group those changes into a single patch.  Thus a single logical change
>  is contained within a single patch.
>  
> +The point to remember is that each patch should make an easily understood
> +change that can be verified by reviewers.  Each patch should be justifiable
> +on its own merits.
> +
>  If one patch depends on another patch in order for a change to be
>  complete, that is OK.  Simply note "this patch depends on patch X"
>  in your patch description.
>  
> +When dividing your change into a series of patches, take special care to
> +ensure that the kernel builds and runs properly after each patch in the
> +series.  Developers using "git bisect" to track down a problem can end up
> +splitting your patch series at any point; they will not thank you if you
> +introduce bugs in the middle.
> +
>  If you cannot condense your patch set into a smaller set of patches,
>  then only post say 15 or so at a time and wait for review and integration.
>  
>  
>  
> -4) Style check your changes.
> +4) Style-check your changes.
> +----------------------------
>  
>  Check your patch for basic style violations, details of which can be
>  found in Documentation/CodingStyle.  Failure to do so simply wastes
>  the reviewers time and will get your patch rejected, probably
>  without even being read.
>  
> -At a minimum you should check your patches with the patch style
> -checker prior to submission (scripts/checkpatch.pl).  You should
> -be able to justify all violations that remain in your patch.
> +One significant exception is when moving code from one file to
> +another -- in this case you should not modify the moved code at all in
> +the same patch which moves it.  This clearly delineates the act of
> +moving the code and your changes.  This greatly aids review of the
> +actual differences and allows tools to better track the history of
> +the code itself.
>  
> +Check your patches with the patch style checker prior to submission
> +(scripts/checkpatch.pl).  Note, though, that the style checker should be
> +viewed as a guide, not as a replacement for human judgment.  If your code
> +looks better with a violation then its probably best left alone.
>  
> +The checker reports at three levels:
> + - ERROR: things that are very likely to be wrong
> + - WARNING: things requiring careful review
> + - CHECK: things requiring thought
>  
> -5) Select e-mail destination.
> +You should be able to justify all violations that remain in your
> +patch.
>  
> -Look through the MAINTAINERS file and the source code, and determine
> -if your change applies to a specific subsystem of the kernel, with
> -an assigned maintainer.  If so, e-mail that person.  The script
> -scripts/get_maintainer.pl can be very useful at this step.
>  
> -If no maintainer is listed, or the maintainer does not respond, send
> -your patch to the primary Linux kernel developer's mailing list,
> -linux-kernel@...r.kernel.org.  Most kernel developers monitor this
> -e-mail list, and can comment on your changes.
> +5) Select the recipients for your patch.
> +----------------------------------------
>  
> +You should always copy the appropriate subsystem maintainer(s) on any patch
> +to code that they maintain; Look through the MAINTAINERS file and the
> +source code revision history to see who those maintainers are.  The
> +script scripts/get_maintainer.pl can be very useful at this step.  If you
> +cannot find a maintainer for the subsystem your are working on, Andrew
> +Morton (akpm@...ux-foundation.org) serves as a maintainer of last resort.
>  
> -Do not send more than 15 patches at once to the vger mailing lists!!!
> +You should also normally choose at least one mailing list to receive a copy
> +of your patch set.  linux-kernel@...r.kernel.org functions as a list of
> +last resort, but the volume on that list has caused a number of developers
> +to tune it out.  Look in the MAINTAINERS file for a subsystem-specific
> +list; your patch will probably get more attention there.  Please do not
> +spam unrelated lists, though.
>  
> +Many kernel-related lists are hosted on vger.kernel.org; you can find a
> +list of them at http://vger.kernel.org/vger-lists.html.  There are
> +kernel-related lists hosted elsewhere as well, though.
> +
> +Do not send more than 15 patches at once to the vger mailing lists!!!
>  
>  Linus Torvalds is the final arbiter of all changes accepted into the
>  Linux kernel.  His e-mail address is <torvalds@...ux-foundation.org>. 
> -He gets a lot of e-mail, so typically you should do your best to -avoid-
> -sending him e-mail. 
> +He gets a lot of e-mail, and, at this point, very few patches go through
> +Linus directly, so typically you should do your best to -avoid-
> +sending him e-mail.
>  
> -Patches which are bug fixes, are "obvious" changes, or similarly
> -require little discussion should be sent or CC'd to Linus.  Patches
> -which require discussion or do not have a clear advantage should
> -usually be sent first to linux-kernel.  Only after the patch is
> -discussed should the patch then be submitted to Linus.
> +If you have a patch that fixes an exploitable security bug, send that patch
> +to security@...nel.org.  For severe bugs, a short embargo may be considered
> +to allow distrbutors to get the patch out to users; in such cases,
> +obviously, the patch should not be sent to any public lists.
>  
> +Patches that fix a severe bug in a released kernel should be directed
> +toward the stable maintainers; putting a line like this:
>  
> +  Cc: stable@...r.kernel.org
>  
> -6) Select your CC (e-mail carbon copy) list.
> +Note, however, that some subsystem maintainers want to come to their own
> +conclusions on which patches should go to the stable trees.  The networking
> +maintainer, in particular, would rather not see individual developers
> +adding lines like the above to their patches.
>  
> -Unless you have a reason NOT to do so, CC linux-kernel@...r.kernel.org.
> -
> -Other kernel developers besides Linus need to be aware of your change,
> -so that they may comment on it and offer code review and suggestions.
> -linux-kernel is the primary Linux kernel developer mailing list.
> -Other mailing lists are available for specific subsystems, such as
> -USB, framebuffer devices, the VFS, the SCSI subsystem, etc.  See the
> -MAINTAINERS file for a mailing list that relates specifically to
> -your change.
> -
> -Majordomo lists of VGER.KERNEL.ORG at:
> -	<http://vger.kernel.org/vger-lists.html>
> -
> -If changes affect userland-kernel interfaces, please send
> -the MAN-PAGES maintainer (as listed in the MAINTAINERS file)
> -a man-pages patch, or at least a notification of the change,
> -so that some information makes its way into the manual pages.
> -
> -Even if the maintainer did not respond in step #5, make sure to ALWAYS
> -copy the maintainer when you change their code.
> +If changes affect userland-kernel interfaces, please send the MAN-PAGES
> +maintainer (as listed in the MAINTAINERS file) a man-pages patch, or at
> +least a notification of the change, so that some information makes its way
> +into the manual pages.  User-space API changes should also be copied to
> +linux-api@...r.kernel.org. 
>  
>  For small patches you may want to CC the Trivial Patch Monkey
>  trivial@...nel.org which collects "trivial" patches. Have a look
>  into the MAINTAINERS file for its current manager.
>  Trivial patches must qualify for one of the following rules:
>   Spelling fixes in documentation
> - Spelling fixes which could break grep(1)
> + Spelling fixes for errors which could break grep(1)
>   Warning fixes (cluttering with useless warnings is bad)
>   Compilation fixes (only if they are actually correct)
>   Runtime fixes (only if they actually fix things)
> - Removing use of deprecated functions/macros (eg. check_region)
> + Removing use of deprecated functions/macros
>   Contact detail and documentation fixes
>   Non-portable code replaced by portable code (even in arch-specific,
>   since people copy, as long as it's trivial)
> @@ -276,7 +327,8 @@ Trivial patches must qualify for one of the following rules:
>  
>  
>  
> -7) No MIME, no links, no compression, no attachments.  Just plain text.
> +6) No MIME, no links, no compression, no attachments.  Just plain text.
> +-----------------------------------------------------------------------
>  
>  Linus and other kernel developers need to be able to read and comment
>  on the changes you are submitting.  It is important for a kernel
> @@ -299,54 +351,48 @@ you to re-send them using MIME.
>  See Documentation/email-clients.txt for hints about configuring
>  your e-mail client so that it sends your patches untouched.
>  
> -8) E-mail size.
> -
> -When sending patches to Linus, always follow step #7.
> +7) E-mail size.
> +---------------
>  
>  Large changes are not appropriate for mailing lists, and some
>  maintainers.  If your patch, uncompressed, exceeds 300 kB in size,
>  it is preferred that you store your patch on an Internet-accessible
> -server, and provide instead a URL (link) pointing to your patch.
> +server, and provide instead a URL (link) pointing to your patch.  But note
> +that if your patch exceeds 300kB, it almost certainly needs to be broken up
> +anyway.
>  
> +8) Respond to review comments.
> +------------------------------
>  
> +Your patch will almost certainly get comments from reviewers on ways in
> +which the patch can be improved.  You must respond to those comments;
> +ignoring reviewers is a good way to get ignored in return.  Review comments
> +or questions that to not lead to a code change should almost certainly
> +bring about a comment or changelog entry so that the next reviewer better
> +understands what is going on.
>  
> -9) Name your kernel version.
> +Be sure to tell the reviewers what changes you are making and to thank them
> +for their time.  Code review is a tiring and time-consuming process, and
> +reviewers sometimes get grumpy.  Even in that case, though, respond
> +politely and address the problems they have pointed out.
>  
> -It is important to note, either in the subject line or in the patch
> -description, the kernel version to which this patch applies.
>  
> -If the patch does not apply cleanly to the latest kernel version,
> -Linus will not apply it.
> +9) Don't get discouraged - or impatient.
> +----------------------------------------
>  
> +After you have submitted your change, be patient and wait.  Reviewers are
> +busy people and may not get to your patch right away.
>  
> +Once upon a time, patches used to dissappear into the void without comment,
> +but the development process works more smoothly than that now.  You should
> +receive comments within a week or so; if that does not happen, make sure
> +that you have sent your patches to the right place.  Wait for a minimum of
> +one week before resubmitting or pinging reviewers - possibly longer during
> +busy times like merge windows.
>  
> -10) Don't get discouraged.  Re-submit.
>  
> -After you have submitted your change, be patient and wait.  If Linus
> -likes your change and applies it, it will appear in the next version
> -of the kernel that he releases.
> -
> -However, if your change doesn't appear in the next version of the
> -kernel, there could be any number of reasons.  It's YOUR job to
> -narrow down those reasons, correct what was wrong, and submit your
> -updated change.
> -
> -It is quite common for Linus to "drop" your patch without comment.
> -That's the nature of the system.  If he drops your patch, it could be
> -due to
> -* Your patch did not apply cleanly to the latest kernel version.
> -* Your patch was not sufficiently discussed on linux-kernel.
> -* A style issue (see section 2).
> -* An e-mail formatting issue (re-read this section).
> -* A technical problem with your change.
> -* He gets tons of e-mail, and yours got lost in the shuffle.
> -* You are being annoying.
> -
> -When in doubt, solicit comments on linux-kernel mailing list.
> -
> -
> -
> -11) Include PATCH in the subject
> +10) Include PATCH in the subject
> +--------------------------------
>  
>  Due to high e-mail traffic to Linus, and to linux-kernel, it is common
>  convention to prefix your subject line with [PATCH].  This lets Linus
> @@ -355,7 +401,8 @@ e-mail discussions.
>  
>  
>  
> -12) Sign your work
> +11) Sign your work
> +------------------
>  
>  To improve tracking of who did what, especially with patches that can
>  percolate to their final resting place in the kernel through several
> @@ -429,15 +476,15 @@ which appears in the changelog.
>  Special note to back-porters: It seems to be a common and useful practice
>  to insert an indication of the origin of a patch at the top of the commit
>  message (just after the subject line) to facilitate tracking. For instance,
> -here's what we see in 2.6-stable :
> +here's what we see in a 3.x-stable release:
>  
> -    Date:   Tue May 13 19:10:30 2008 +0000
> +Date:   Tue Oct 7 07:26:38 2014 -0400
>  
> -        SCSI: libiscsi regression in 2.6.25: fix nop timer handling
> +    libata: Un-break ATA blacklist
>  
> -        commit 4cf1043593db6a337f10e006c23c69e5fc93e722 upstream
> +    commit 1c40279960bcd7d52dbdf1d466b20d24b99176c8 upstream.
>  
> -And here's what appears in 2.4 :
> +And here's what might appear in an older kernel once a patch is backported:
>  
>      Date:   Tue May 13 22:12:27 2008 +0200
>  
> @@ -446,18 +493,19 @@ And here's what appears in 2.4 :
>          [backport of 2.6 commit b7acbdfbd1f277c1eb23f344f899cfa4cd0bf36a]
>  
>  Whatever the format, this information provides a valuable help to people
> -tracking your trees, and to people trying to trouble-shoot bugs in your
> +tracking your trees, and to people trying to troubleshoot bugs in your
>  tree.
>  
>  
> -13) When to use Acked-by: and Cc:
> +12) When to use Acked-by: and Cc:
> +---------------------------------
>  
>  The Signed-off-by: tag indicates that the signer was involved in the
>  development of the patch, or that he/she was in the patch's delivery path.
>  
>  If a person was not directly involved in the preparation or handling of a
>  patch but wishes to signify and record their approval of it then they can
> -arrange to have an Acked-by: line added to the patch's changelog.
> +ask to have an Acked-by: line added to the patch's changelog.
>  
>  Acked-by: is often used by the maintainer of the affected code when that
>  maintainer neither contributed to nor forwarded the patch.
> @@ -465,7 +513,8 @@ maintainer neither contributed to nor forwarded the patch.
>  Acked-by: is not as formal as Signed-off-by:.  It is a record that the acker
>  has at least reviewed the patch and has indicated acceptance.  Hence patch
>  mergers will sometimes manually convert an acker's "yep, looks good to me"
> -into an Acked-by:.
> +into an Acked-by: (but note that it is usually better to ask for an
> +explicit ack).
>  
>  Acked-by: does not necessarily indicate acknowledgement of the entire patch.
>  For example, if a patch affects multiple subsystems and has an Acked-by: from
> @@ -477,11 +526,13 @@ list archives.
>  If a person has had the opportunity to comment on a patch, but has not
>  provided such comments, you may optionally add a "Cc:" tag to the patch.
>  This is the only tag which might be added without an explicit action by the
> -person it names.  This tag documents that potentially interested parties
> -have been included in the discussion
> +person it names - but it should indicate that this person was copied on the
> +patch.  This tag documents that potentially interested parties
> +have been included in the discussion.
>  
>  
> -14) Using Reported-by:, Tested-by:, Reviewed-by:, Suggested-by: and Fixes:
> +13) Using Reported-by:, Tested-by:, Reviewed-by:, Suggested-by: and Fixes:
> +--------------------------------------------------------------------------
>  
>  The Reported-by tag gives credit to people who find bugs and report them and it
>  hopefully inspires them to help us again in the future.  Please note that if
> @@ -541,7 +592,13 @@ which stable kernel versions should receive your fix. This is the preferred
>  method for indicating a bug fixed by the patch. See #2 above for more details.
>  
>  
> -15) The canonical patch format
> +14) The canonical patch format
> +------------------------------
> +
> +This section describes how the patch itself should be formatted.  Note
> +that, if you have your patches stored in a git repository, proper patch
> +formatting can be had with "git format-patch".  The tools can not create
> +the necessary text, though, so read the instructions below anyway.
>  
>  The canonical patch subject line is:
>  
> @@ -549,7 +606,8 @@ The canonical patch subject line is:
>  
>  The canonical patch message body contains the following:
>  
> -  - A "from" line specifying the patch author.
> +  - A "from" line specifying the patch author (only needed if the person
> +    sending the patch is not the author).
>  
>    - An empty line.
>  
> @@ -656,128 +714,61 @@ See more details on the proper patch format in the following
>  references.
>  
>  
> -16) Sending "git pull" requests  (from Linus emails)
> -
> -Please write the git repo address and branch name alone on the same line
> -so that I can't even by mistake pull from the wrong branch, and so
> -that a triple-click just selects the whole thing.
> -
> -So the proper format is something along the lines of:
> -
> -	"Please pull from
> -
> -		git://jdelvare.pck.nerim.net/jdelvare-2.6 i2c-for-linus
> -
> -	 to get these changes:"
> -
> -so that I don't have to hunt-and-peck for the address and inevitably
> -get it wrong (actually, I've only gotten it wrong a few times, and
> -checking against the diffstat tells me when I get it wrong, but I'm
> -just a lot more comfortable when I don't have to "look for" the right
> -thing to pull, and double-check that I have the right branch-name).
> -
> -
> -Please use "git diff -M --stat --summary" to generate the diffstat:
> -the -M enables rename detection, and the summary enables a summary of
> -new/deleted or renamed files.
> -
> -With rename detection, the statistics are rather different [...]
> -because git will notice that a fair number of the changes are renames.
> -
> ------------------------------------
> -SECTION 2 - HINTS, TIPS, AND TRICKS
> ------------------------------------
> -
> -This section lists many of the common "rules" associated with code
> -submitted to the kernel.  There are always exceptions... but you must
> -have a really good reason for doing so.  You could probably call this
> -section Linus Computer Science 101.
> -
> -
> -
> -1) Read Documentation/CodingStyle
> -
> -Nuff said.  If your code deviates too much from this, it is likely
> -to be rejected without further review, and without comment.
> -
> -One significant exception is when moving code from one file to
> -another -- in this case you should not modify the moved code at all in
> -the same patch which moves it.  This clearly delineates the act of
> -moving the code and your changes.  This greatly aids review of the
> -actual differences and allows tools to better track the history of
> -the code itself.
> -
> -Check your patches with the patch style checker prior to submission
> -(scripts/checkpatch.pl).  The style checker should be viewed as
> -a guide not as the final word.  If your code looks better with
> -a violation then its probably best left alone.
> -
> -The checker reports at three levels:
> - - ERROR: things that are very likely to be wrong
> - - WARNING: things requiring careful review
> - - CHECK: things requiring thought
> -
> -You should be able to justify all violations that remain in your
> -patch.
> -
> -
> -
> -2) #ifdefs are ugly
> -
> -Code cluttered with ifdefs is difficult to read and maintain.  Don't do
> -it.  Instead, put your ifdefs in a header, and conditionally define
> -'static inline' functions, or macros, which are used in the code.
> -Let the compiler optimize away the "no-op" case.
> -
> -Simple example, of poor code:
> -
> -	dev = alloc_etherdev (sizeof(struct funky_private));
> -	if (!dev)
> -		return -ENODEV;
> -	#ifdef CONFIG_NET_FUNKINESS
> -	init_funky_net(dev);
> -	#endif
> -
> -Cleaned-up example:
> -
> -(in header)
> -	#ifndef CONFIG_NET_FUNKINESS
> -	static inline void init_funky_net (struct net_device *d) {}
> -	#endif
> +15) Sending "git pull" requests
> +-------------------------------
>  
> -(in the code itself)
> -	dev = alloc_etherdev (sizeof(struct funky_private));
> -	if (!dev)
> -		return -ENODEV;
> -	init_funky_net(dev);
> +If you have a series of patches, it may be most convenient to have the
> +maintainer pull them directly into the subsystem repository with a
> +"git pull" operation.  Note, however, that pulling patches from a developer
> +requires a higher degree of trust than taking patches from a mailing list.
> +As a result, many subsystem maintainers are reluctant to take pull
> +requests, especially from new, unknown developers.
>  
> +A pull request should have [GIT] or [PULL] in the subject line.  The
> +request itself should include the repository name and the branch of
> +interest on a single line; it should look something like:
>  
> +  Please pull from
>  
> -3) 'static inline' is better than a macro
> +      git://jdelvare.pck.nerim.net/jdelvare-2.6 i2c-for-linus
>  
> -Static inline functions are greatly preferred over macros.
> -They provide type safety, have no length limitations, no formatting
> -limitations, and under gcc they are as cheap as macros.
> +  to get these changes:"
>  
> -Macros should only be used for cases where a static inline is clearly
> -suboptimal [there are a few, isolated cases of this in fast paths],
> -or where it is impossible to use a static inline function [such as
> -string-izing].
> +A pull request should also include an overall message saying what will be
> +included in the request, a "git shortlog" listing of the patches
> +themselves, and a diffstat showing the overall effect of the patch series.
> +The easiest way to get all this information together is, of course, to let
> +git do it for you with the "git request-pull" command.
>  
> -'static inline' is preferred over 'static __inline__', 'extern inline',
> -and 'extern __inline__'.
> +Some maintainers (including Linus) want to see pull requests from signed
> +commits; that increases their confidence that the request actually came
> +from you.  Linus, in particular, will not pull from public hosting sites
> +like GitHub in the absence of a signed tag.
>  
> +The first step toward creating such tags is to make a GNUPG key and get it
> +signed by one or more core kernel developers.  This step can be hard for
> +new developers, but there is no way around it.  Attending conferences can
> +be a good way to find developers who can sign your key.
>  
> +Once you have prepared a patch series in git that you wish to have somebody
> +pull, create a signed tag with "git tag -s".  This will create a new tag
> +identifying the last commit in the series and containing a signature
> +created with your private key.  You will also have the opportunity to add a
> +changelog-style message to the tag; this is an ideal place to describe the
> +effects of the pull request as a whole.
>  
> -4) Don't over-design.
> +If the tree the maintainer will be pulling from is not the repository you
> +are working from, don't forget to push the signed tag explicitly to the
> +public tree.
>  
> -Don't try to anticipate nebulous future cases which may or may not
> -be useful:  "Make it as simple as you can, and no simpler."
> +When generating your pull request, use the signed tag as the target.  A
> +command like this will do the trick:
>  
> +  git request-pull master git://my.public.tree/linux.git my-signed-tag
>  
>  
>  ----------------------
> -SECTION 3 - REFERENCES
> +SECTION 2 - REFERENCES
>  ----------------------
>  
>  Andrew Morton, "The perfect patch" (tpp).

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ