All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@linuxfoundation.org>
To: "Enrico Weigelt, metux IT consult" <lkml@metux.net>
Cc: "Enrico Weigelt, metux IT consult" <info@metux.net>,
	linux-kernel@vger.kernel.org, eric@anholt.net,
	stefan.wahren@i2se.com, f.fainelli@gmail.com, rjui@broadcom.com,
	sbranden@broadcom.com, bcm-kernel-feedback-list@broadcom.com,
	andriy.shevchenko@linux.intel.com, vz@mleia.com,
	matthias.bgg@gmail.com, yamada.masahiro@socionext.com,
	tklauser@distanz.ch, richard.genoud@gmail.com,
	macro@linux-mips.org, u.kleine-koenig@pengutronix.de,
	kernel@pengutronix.de, slemieux.tyco@gmail.com,
	andy.gross@linaro.org, david.brown@linaro.org,
	shawnguo@kernel.org, s.hauer@pengutronix.de, festevam@gmail.com,
	linux-imx@nxp.com, baohua@kernel.org, jacmet@sunsite.dk,
	linux-serial@vger.kernel.org, linux-arm-msm@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v2 10/45] drivers: tty: serial: zs: use devm_* functions
Date: Fri, 15 Mar 2019 07:26:28 -0700	[thread overview]
Message-ID: <20190315142628.GA30650@kroah.com> (raw)
In-Reply-To: <3734d588-6b9c-29e2-45b6-82e778f47602@metux.net>

On Fri, Mar 15, 2019 at 10:06:16AM +0100, Enrico Weigelt, metux IT consult wrote:
> On 14.03.19 23:52, Greg KH wrote:
> > On Thu, Mar 14, 2019 at 11:33:40PM +0100, Enrico Weigelt, metux IT consult wrote:
> >> Use the safer devm versions of memory mapping functions.
> > 
> > What is "safer" about them?
> 
> Garbage collection :)

At times, but not when you do not use the api correctly :)

> Several drivers didn't seem to clean up properly (maybe these're just
> used compiled-in, so nobody noticed yet).

Yes, there are lots of drivers for devices that are never unloaded or
removed from the system.  The fact that no one has reported any problems
with them means that they are never used in situations like this.

> In general, I think devm_* should be the standard case, unless there's
> a really good reason to do otherwise.

No, you need to have a good reason why it needs to be changed, when you
can not verify that this actually resolves a problem.  As this patch
shows, you just replaced one api call with another, so nothing changed
at all, except you actually took up more memory and logic to do the same
thing :(

> > Isn't the whole goal of the devm* functions such that you are not
> > required to call "release" on them?
> 
> Looks that one slipped through, when I was doing that big bulk change
> in the middle of the night and not enough coffe ;-)
> 
> One problem here is that many drivers do this stuff in request/release
> port, instead of probe/remove. I'm not sure yet, whether we should
> rewrite that. There're also cases which do request/release, but no
> ioremap (doing hardcoded register accesses), others do ioremap w/o
> request/release.
> 
> IMHO, we should have a closer look at those and check whether that's
> really okay (just adding request/release blindly could cause trouble)

I agree, please feel free to audit these to verify they are all correct.
But that's not what you did here, so that's not a valid justification
for these patches to be accepted.

> > And also, why make the change, you aren't changing any functionality for
> > these old drivers at all from what I can tell (for the devm calls).
> > What am I missing here?
> 
> Okay, there's a bigger story behind, you can't know yet. Finally, I'd
> like to move everything to using struct resource and corresponding
> helpers consistently, so most of the drivers would be pretty simple
> at that point. (there're of course special cases, like devices w/
> multiple register spaces, etc)
> 
> Here's my wip branch:
> 
> https://github.com/metux/linux/commits/wip/serial-res
> 
> In this consolidation process, I'm trying to move everything to
> devm_*, to have it more generic (for now, I still need two versions
> of the request/release/ioremap/iounmap helpers - one w/ and one
> w/o devm).

Move everything in what part of the kernel?  The whole kernel or just
one subsystem?

> My idea was moving to devm first, so it can be reviewed/tested
> independently, before moving forward. Smaller, easily digestable
> pieces should minimize the risk of breaking anything. But if you
> prefer having this things squashed together, just let me know.

Small pieces are required, that's fine, but those pieces need to have a
justification for why they should be accepted at all points along the
way.

> In the queue are also other minor cleanups like using dev_err()
> instead of printk(), etc. Should I send these separately ?

Of course.

> By the way: do you have some public branch where you're collecting
> accepted patches, which I could base mine on ? (tty.git/tty-next ?)

Yes, that is the tree and branch, but remember that none of my trees can
open up until after -rc1 is out.

thanks,

greg k-h

WARNING: multiple messages have this Message-ID (diff)
From: Greg KH <gregkh@linuxfoundation.org>
To: "Enrico Weigelt, metux IT consult" <lkml@metux.net>
Cc: linux-arm-msm@vger.kernel.org, yamada.masahiro@socionext.com,
	macro@linux-mips.org, jacmet@sunsite.dk, festevam@gmail.com,
	stefan.wahren@i2se.com, f.fainelli@gmail.com,
	bcm-kernel-feedback-list@broadcom.com, linux-imx@nxp.com,
	linux-serial@vger.kernel.org, slemieux.tyco@gmail.com,
	andy.gross@linaro.org, tklauser@distanz.ch,
	david.brown@linaro.org, rjui@broadcom.com,
	s.hauer@pengutronix.de, u.kleine-koenig@pengutronix.de,
	linuxppc-dev@lists.ozlabs.org, vz@mleia.com,
	matthias.bgg@gmail.com, andriy.shevchenko@linux.intel.com,
	baohua@kernel.org, sbranden@broadcom.com, eric@anholt.net,
	richard.genoud@gmail.com, "Enrico Weigelt,
	metux IT consult" <info@metux.net>,
	linux-kernel@vger.kernel.org, kernel@pengutronix.de,
	shawnguo@kernel.org
Subject: Re: [PATCH v2 10/45] drivers: tty: serial: zs: use devm_* functions
Date: Fri, 15 Mar 2019 07:26:28 -0700	[thread overview]
Message-ID: <20190315142628.GA30650@kroah.com> (raw)
In-Reply-To: <3734d588-6b9c-29e2-45b6-82e778f47602@metux.net>

On Fri, Mar 15, 2019 at 10:06:16AM +0100, Enrico Weigelt, metux IT consult wrote:
> On 14.03.19 23:52, Greg KH wrote:
> > On Thu, Mar 14, 2019 at 11:33:40PM +0100, Enrico Weigelt, metux IT consult wrote:
> >> Use the safer devm versions of memory mapping functions.
> > 
> > What is "safer" about them?
> 
> Garbage collection :)

At times, but not when you do not use the api correctly :)

> Several drivers didn't seem to clean up properly (maybe these're just
> used compiled-in, so nobody noticed yet).

Yes, there are lots of drivers for devices that are never unloaded or
removed from the system.  The fact that no one has reported any problems
with them means that they are never used in situations like this.

> In general, I think devm_* should be the standard case, unless there's
> a really good reason to do otherwise.

No, you need to have a good reason why it needs to be changed, when you
can not verify that this actually resolves a problem.  As this patch
shows, you just replaced one api call with another, so nothing changed
at all, except you actually took up more memory and logic to do the same
thing :(

> > Isn't the whole goal of the devm* functions such that you are not
> > required to call "release" on them?
> 
> Looks that one slipped through, when I was doing that big bulk change
> in the middle of the night and not enough coffe ;-)
> 
> One problem here is that many drivers do this stuff in request/release
> port, instead of probe/remove. I'm not sure yet, whether we should
> rewrite that. There're also cases which do request/release, but no
> ioremap (doing hardcoded register accesses), others do ioremap w/o
> request/release.
> 
> IMHO, we should have a closer look at those and check whether that's
> really okay (just adding request/release blindly could cause trouble)

I agree, please feel free to audit these to verify they are all correct.
But that's not what you did here, so that's not a valid justification
for these patches to be accepted.

> > And also, why make the change, you aren't changing any functionality for
> > these old drivers at all from what I can tell (for the devm calls).
> > What am I missing here?
> 
> Okay, there's a bigger story behind, you can't know yet. Finally, I'd
> like to move everything to using struct resource and corresponding
> helpers consistently, so most of the drivers would be pretty simple
> at that point. (there're of course special cases, like devices w/
> multiple register spaces, etc)
> 
> Here's my wip branch:
> 
> https://github.com/metux/linux/commits/wip/serial-res
> 
> In this consolidation process, I'm trying to move everything to
> devm_*, to have it more generic (for now, I still need two versions
> of the request/release/ioremap/iounmap helpers - one w/ and one
> w/o devm).

Move everything in what part of the kernel?  The whole kernel or just
one subsystem?

> My idea was moving to devm first, so it can be reviewed/tested
> independently, before moving forward. Smaller, easily digestable
> pieces should minimize the risk of breaking anything. But if you
> prefer having this things squashed together, just let me know.

Small pieces are required, that's fine, but those pieces need to have a
justification for why they should be accepted at all points along the
way.

> In the queue are also other minor cleanups like using dev_err()
> instead of printk(), etc. Should I send these separately ?

Of course.

> By the way: do you have some public branch where you're collecting
> accepted patches, which I could base mine on ? (tty.git/tty-next ?)

Yes, that is the tree and branch, but remember that none of my trees can
open up until after -rc1 is out.

thanks,

greg k-h

  reply	other threads:[~2019-03-15 14:26 UTC|newest]

Thread overview: 142+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-14 22:33 serial driver cleanups v2 Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 01/45] drivers: tty: serial: 8250_bcm2835aux: use devm_platform_ioremap_resource() Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 02/45] drivers: tty: serial: 8250_dw: use devm_ioremap_resource() Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-15  9:04   ` Andy Shevchenko
2019-03-15  9:04     ` Andy Shevchenko
2019-03-15  9:04     ` Andy Shevchenko
2019-03-15  9:37     ` Enrico Weigelt, metux IT consult
2019-03-15  9:37       ` Enrico Weigelt, metux IT consult
2019-03-15  9:37       ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 03/45] drivers: tty: serial: 8250_ingenic: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 04/45] drivers: tty: serial: amba-pl010: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 05/45] drivers: tty: serial: sirfsoc_uart: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 06/45] drivers: tty: serial: samsung: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 07/45] drivers: tty: serial: 8250_uniphier: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-18  7:44   ` Masahiro Yamada
2019-03-18  7:44     ` Masahiro Yamada
2019-03-18  7:44     ` Masahiro Yamada
2019-03-14 22:33 ` [PATCH v2 08/45] drivers: tty: serial: 8250_lpc18xx: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 09/45] drivers: tty: serial: 8250_mtk: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 10/45] drivers: tty: serial: zs: use devm_* functions Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:52   ` Greg KH
2019-03-14 22:52     ` Greg KH
2019-03-15  9:06     ` Enrico Weigelt, metux IT consult
2019-03-15  9:06       ` Enrico Weigelt, metux IT consult
2019-03-15 14:26       ` Greg KH [this message]
2019-03-15 14:26         ` Greg KH
2019-03-15 19:12         ` Enrico Weigelt, metux IT consult
2019-03-15 19:12           ` Enrico Weigelt, metux IT consult
2019-03-16  3:26           ` Greg KH
2019-03-16  3:26             ` Greg KH
2019-03-16  9:17             ` Enrico Weigelt, metux IT consult
2019-03-16  9:17               ` Enrico Weigelt, metux IT consult
2019-03-17  9:54               ` Greg KH
2019-03-17  9:54                 ` Greg KH
2019-03-18  8:03               ` Maciej W. Rozycki
2019-03-18  8:03                 ` Maciej W. Rozycki
2019-03-14 22:33 ` [PATCH v2 11/45] drivers: tty: serial: zs: use dev_err() instead of printk() Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 12/45] drivers: tty: serial: xilinx_uartps: use devm_* functions Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 13/45] drivers: tty: serial: 21285: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 14/45] drivers: tty: serial: vr41xx_siu: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 15/45] drivers: tty: serial: uartlite: use dev_err() instead of printk() Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 16/45] drivers: tty: serial: uartlite: use devm_* functions Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 17/45] drivers: tty: serial: timuart: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 18/45] drivers: tty: serial: sirfsoc_uart: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 19/45] drivers: tty: serial: sh-sci: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 20/45] drivers: tty: serial: msm_serial: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-05-27  5:57   ` Bjorn Andersson
2019-05-27  5:57     ` Bjorn Andersson
2019-03-14 22:33 ` [PATCH v2 21/45] drivers: tty: serial: altera_jtaguart: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 22/45] drivers: tty: serial: altera_uart: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 23/45] drivers: tty: serial: amba-pl010: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 24/45] drivers: tty: serial: mxs-auart: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 25/45] drivers: tty: serial: pxa: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 26/45] drivers: tty: serial: dz: use dev_err() instead of printk() Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 27/45] drivers: tty: serial: dz: use devm_* functions Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 28/45] drivers: tty: serial: netx-serial: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:33 ` [PATCH v2 29/45] drivers: tty: serial: serial_txx9: " Enrico Weigelt, metux IT consult
2019-03-14 22:33   ` Enrico Weigelt, metux IT consult
2019-03-14 22:34 ` [PATCH v2 30/45] drivers: tty: serial: serial_ks8695: " Enrico Weigelt, metux IT consult
2019-03-14 22:34   ` Enrico Weigelt, metux IT consult
2019-03-14 22:34 ` [PATCH v2 31/45] drivers: tty: serial: amba-pl011: " Enrico Weigelt, metux IT consult
2019-03-14 22:34   ` Enrico Weigelt, metux IT consult
2019-03-14 22:34 ` [PATCH v2 32/45] drivers: tty: serial: atmel_serial: " Enrico Weigelt, metux IT consult
2019-03-14 22:34   ` Enrico Weigelt, metux IT consult
2019-03-14 22:34 ` [PATCH v2 33/45] drivers: tty: serial: sb1250-duart: use dev_err() instead of printk() Enrico Weigelt, metux IT consult
2019-03-14 22:34   ` Enrico Weigelt, metux IT consult
2019-03-14 22:34 ` [PATCH v2 34/45] drivers: tty: serial: sb1250-duart: use devm_* functions Enrico Weigelt, metux IT consult
2019-03-14 22:34   ` Enrico Weigelt, metux IT consult
2019-03-14 22:34 ` [PATCH v2 35/45] drivers: tty: serial: lpc32xx_hs: " Enrico Weigelt, metux IT consult
2019-03-14 22:34   ` Enrico Weigelt, metux IT consult
2019-03-14 22:34 ` [PATCH v2 36/45] drivers: tty: serial: pic32_uart: " Enrico Weigelt, metux IT consult
2019-03-14 22:34   ` Enrico Weigelt, metux IT consult
2019-03-14 22:34 ` [PATCH v2 37/45] drivers: tty: serial: apbuart: " Enrico Weigelt, metux IT consult
2019-03-14 22:34   ` Enrico Weigelt, metux IT consult
2019-03-14 22:34 ` [PATCH v2 38/45] drivers: tty: serial: samsung: " Enrico Weigelt, metux IT consult
2019-03-14 22:34   ` Enrico Weigelt, metux IT consult
2019-03-14 22:34 ` [PATCH v2 39/45] drivers: tty: serial: efm32-uart: " Enrico Weigelt, metux IT consult
2019-03-14 22:34   ` Enrico Weigelt, metux IT consult
2019-03-15  7:46   ` Uwe Kleine-König
2019-03-15  7:46     ` Uwe Kleine-König
2019-03-14 22:34 ` [PATCH v2 40/45] drivers: tty: serial: mpc52xx_uart: " Enrico Weigelt, metux IT consult
2019-03-14 22:34   ` Enrico Weigelt, metux IT consult
2019-03-14 22:34 ` [PATCH v2 41/45] drivers: tty: serial: timuart: " Enrico Weigelt, metux IT consult
2019-03-14 22:34   ` Enrico Weigelt, metux IT consult
2019-03-14 22:34 ` [PATCH v2 42/45] drivers: tty: serial: sa1100: " Enrico Weigelt, metux IT consult
2019-03-14 22:34   ` Enrico Weigelt, metux IT consult
2019-03-14 22:34 ` [PATCH v2 43/45] drivers: tty: serial: pmac_zilog: " Enrico Weigelt, metux IT consult
2019-03-14 22:34   ` Enrico Weigelt, metux IT consult
2019-03-14 22:34 ` [PATCH v2 44/45] drivers: tty: serial: pnx8xxx_uart: " Enrico Weigelt, metux IT consult
2019-03-14 22:34   ` Enrico Weigelt, metux IT consult
2019-03-14 22:34 ` [PATCH v2 45/45] drivers: tty: serial: mux: " Enrico Weigelt, metux IT consult
2019-03-14 22:34   ` Enrico Weigelt, metux IT consult
2019-03-15  9:08   ` Andy Shevchenko
2019-03-15  9:08     ` Andy Shevchenko
2019-03-15  9:08     ` Andy Shevchenko
2019-03-15  9:12 ` serial driver cleanups v2 Andy Shevchenko
2019-03-15  9:12   ` Andy Shevchenko
2019-03-15  9:12   ` Andy Shevchenko
2019-03-15  9:20   ` Andy Shevchenko
2019-03-15  9:20     ` Andy Shevchenko
2019-03-15  9:20     ` Andy Shevchenko
2019-03-15 10:36   ` Enrico Weigelt, metux IT consult
2019-03-15 10:36     ` Enrico Weigelt, metux IT consult
2019-03-15 10:36     ` Enrico Weigelt, metux IT consult
2019-03-15 18:11     ` Andy Shevchenko
2019-03-15 18:11       ` Andy Shevchenko
2019-03-15 18:11       ` Andy Shevchenko
2019-03-15 18:41       ` Enrico Weigelt, metux IT consult
2019-03-15 18:41         ` Enrico Weigelt, metux IT consult
2019-03-15 18:41         ` Enrico Weigelt, metux IT consult
2019-03-15 18:45         ` Andy Shevchenko
2019-03-15 18:45           ` Andy Shevchenko
2019-03-15 18:45           ` Andy Shevchenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190315142628.GA30650@kroah.com \
    --to=gregkh@linuxfoundation.org \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=andy.gross@linaro.org \
    --cc=baohua@kernel.org \
    --cc=bcm-kernel-feedback-list@broadcom.com \
    --cc=david.brown@linaro.org \
    --cc=eric@anholt.net \
    --cc=f.fainelli@gmail.com \
    --cc=festevam@gmail.com \
    --cc=info@metux.net \
    --cc=jacmet@sunsite.dk \
    --cc=kernel@pengutronix.de \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-imx@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=lkml@metux.net \
    --cc=macro@linux-mips.org \
    --cc=matthias.bgg@gmail.com \
    --cc=richard.genoud@gmail.com \
    --cc=rjui@broadcom.com \
    --cc=s.hauer@pengutronix.de \
    --cc=sbranden@broadcom.com \
    --cc=shawnguo@kernel.org \
    --cc=slemieux.tyco@gmail.com \
    --cc=stefan.wahren@i2se.com \
    --cc=tklauser@distanz.ch \
    --cc=u.kleine-koenig@pengutronix.de \
    --cc=vz@mleia.com \
    --cc=yamada.masahiro@socionext.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.