All of lore.kernel.org
 help / color / mirror / Atom feed
From: daniel.thompson@linaro.org (Daniel Thompson)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 3.19-rc2 v14 0/7] arm: Implement arch_trigger_all_cpu_backtrace
Date: Wed, 21 Jan 2015 10:47:37 +0000	[thread overview]
Message-ID: <54BF83C9.5060300@linaro.org> (raw)
In-Reply-To: <54BEC04D.1050402@codeaurora.org>

On 20/01/15 20:53, Stephen Boyd wrote:
> On 01/20/2015 02:25 AM, Daniel Thompson wrote:
>> On 13/01/15 10:26, Daniel Thompson wrote:
>>> Hi Thomas, Hi Jason:
>>>     Patches 1 to 3 are for you (and should be separable from the rest
>>>     of the series). The patches haven't changes since the last time
>>>     I posted them. The changes in v14 tidy up the later part of the
>>>     patch set in order to share more code between x86 and arm.
>> No review comments! Have I finally got this right?
>>
>> If so it possible and/or sensible to get patches 1-3 in a tree that
>> feeds linux-next. I'd really like the gic changes to meet the various
>> ARM build and boot bots.
> 
> With this patchset, is it possible to call sched_clock() from within NMI
> context? I ask because the generic sched_clock() code is not NMI safe
> today. We were planning on making it NMI safe by doing something similar
> to what was done for ktime_get_mono_fast_ns() but we haven't gotten
> around to it. Mostly because no architecture that uses generic
> sched_clock() has support for NMIs right now.

I've not done any work to make sched_clock() safe to call from NMI.
However since my patchset does not introduce any calls to sched_clock()
from NMI I think this is OK!

I ported Steven Rostedt's work to make arch_trigger_all_cpu_backtrace()
safe from NMI from x86 to ARM. One result of Steven's approach are that
printk() timestamping is deferred until we return to normal context.
Thus even with CONFIG_PRINTK_TIME we do not call local_clock() during
NMI processing.

To confirm the above I have added the code below to my kernel and ran it
with a fairly paranoid set of debugging options. The check does not fire.


Daniel.

diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h
index 630dd2372238..fea0deeb524b 100644
--- a/include/asm-generic/bug.h
+++ b/include/asm-generic/bug.h
@@ -111,8 +111,10 @@ extern void warn_slowpath_null(const char *file,
const int line);
        int __ret_warn_once = !!(condition);                    \
                                                                \
        if (unlikely(__ret_warn_once))                          \
-               if (WARN_ON(!__warned))                         \
+               if (unlikely(!__warned)) {                      \
                        __warned = true;                        \
+                       __WARN();                               \
+               }                                               \
        unlikely(__ret_warn_once);                              \
 })

diff --git a/kernel/time/sched_clock.c b/kernel/time/sched_clock.c
index 01d2d15aa662..81ea469b7e68 100644
--- a/kernel/time/sched_clock.c
+++ b/kernel/time/sched_clock.c
@@ -63,6 +63,8 @@ unsigned long long notrace sched_clock(void)
        u64 cyc;
        unsigned long seq;

+       WARN_ON_ONCE(in_nmi());
+
        if (cd.suspended)
                return cd.epoch_ns;

WARNING: multiple messages have this Message-ID (diff)
From: Daniel Thompson <daniel.thompson@linaro.org>
To: Stephen Boyd <sboyd@codeaurora.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Jason Cooper <jason@lakedaemon.net>
Cc: Russell King <linux@arm.linux.org.uk>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, patches@linaro.org,
	linaro-kernel@lists.linaro.org,
	John Stultz <john.stultz@linaro.org>,
	Sumit Semwal <sumit.semwal@linaro.org>,
	Dirk Behme <dirk.behme@de.bosch.com>,
	Daniel Drake <drake@endlessm.com>,
	Dmitry Pervushin <dpervushin@gmail.com>,
	Tim Sander <tim@krieglstein.org>,
	Steven Rostedt <rostedt@goodmis.org>
Subject: Re: [PATCH 3.19-rc2 v14 0/7] arm: Implement arch_trigger_all_cpu_backtrace
Date: Wed, 21 Jan 2015 10:47:37 +0000	[thread overview]
Message-ID: <54BF83C9.5060300@linaro.org> (raw)
In-Reply-To: <54BEC04D.1050402@codeaurora.org>

On 20/01/15 20:53, Stephen Boyd wrote:
> On 01/20/2015 02:25 AM, Daniel Thompson wrote:
>> On 13/01/15 10:26, Daniel Thompson wrote:
>>> Hi Thomas, Hi Jason:
>>>     Patches 1 to 3 are for you (and should be separable from the rest
>>>     of the series). The patches haven't changes since the last time
>>>     I posted them. The changes in v14 tidy up the later part of the
>>>     patch set in order to share more code between x86 and arm.
>> No review comments! Have I finally got this right?
>>
>> If so it possible and/or sensible to get patches 1-3 in a tree that
>> feeds linux-next. I'd really like the gic changes to meet the various
>> ARM build and boot bots.
> 
> With this patchset, is it possible to call sched_clock() from within NMI
> context? I ask because the generic sched_clock() code is not NMI safe
> today. We were planning on making it NMI safe by doing something similar
> to what was done for ktime_get_mono_fast_ns() but we haven't gotten
> around to it. Mostly because no architecture that uses generic
> sched_clock() has support for NMIs right now.

I've not done any work to make sched_clock() safe to call from NMI.
However since my patchset does not introduce any calls to sched_clock()
from NMI I think this is OK!

I ported Steven Rostedt's work to make arch_trigger_all_cpu_backtrace()
safe from NMI from x86 to ARM. One result of Steven's approach are that
printk() timestamping is deferred until we return to normal context.
Thus even with CONFIG_PRINTK_TIME we do not call local_clock() during
NMI processing.

To confirm the above I have added the code below to my kernel and ran it
with a fairly paranoid set of debugging options. The check does not fire.


Daniel.

diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h
index 630dd2372238..fea0deeb524b 100644
--- a/include/asm-generic/bug.h
+++ b/include/asm-generic/bug.h
@@ -111,8 +111,10 @@ extern void warn_slowpath_null(const char *file,
const int line);
        int __ret_warn_once = !!(condition);                    \
                                                                \
        if (unlikely(__ret_warn_once))                          \
-               if (WARN_ON(!__warned))                         \
+               if (unlikely(!__warned)) {                      \
                        __warned = true;                        \
+                       __WARN();                               \
+               }                                               \
        unlikely(__ret_warn_once);                              \
 })

diff --git a/kernel/time/sched_clock.c b/kernel/time/sched_clock.c
index 01d2d15aa662..81ea469b7e68 100644
--- a/kernel/time/sched_clock.c
+++ b/kernel/time/sched_clock.c
@@ -63,6 +63,8 @@ unsigned long long notrace sched_clock(void)
        u64 cyc;
        unsigned long seq;

+       WARN_ON_ONCE(in_nmi());
+
        if (cd.suspended)
                return cd.epoch_ns;






  reply	other threads:[~2015-01-21 10:47 UTC|newest]

Thread overview: 206+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-05 10:27 [PATCH 3.18-rc3 v7 0/4] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2014-11-05 10:27 ` Daniel Thompson
2014-11-05 10:27 ` [PATCH 3.18-rc3 v7 1/4] irqchip: gic: Make gic_raise_softirq() FIQ-safe Daniel Thompson
2014-11-05 10:27   ` Daniel Thompson
2014-11-05 10:27 ` [PATCH 3.18-rc3 v7 2/4] irqchip: gic: Introduce plumbing for IPI FIQ Daniel Thompson
2014-11-05 10:27   ` Daniel Thompson
2014-11-05 10:27 ` [PATCH 3.18-rc3 v7 3/4] ARM: add basic support for on-demand backtrace of other CPUs Daniel Thompson
2014-11-05 10:27   ` Daniel Thompson
2014-11-05 10:27 ` [PATCH 3.18-rc3 v7 4/4] arm: smp: Handle ipi_cpu_backtrace() using FIQ (if available) Daniel Thompson
2014-11-05 10:27   ` Daniel Thompson
2014-11-14 12:35 ` [PATCH 3.18-rc3 v8 0/4] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2014-11-14 12:35   ` Daniel Thompson
2014-11-14 12:35   ` [PATCH 3.18-rc3 v8 1/4] irqchip: gic: Make gic_raise_softirq() FIQ-safe Daniel Thompson
2014-11-14 12:35     ` Daniel Thompson
2014-11-24 18:20     ` Thomas Gleixner
2014-11-24 18:20       ` Thomas Gleixner
2014-11-24 18:40       ` Daniel Thompson
2014-11-24 18:40         ` Daniel Thompson
2014-11-24 18:48       ` Thomas Gleixner
2014-11-24 18:48         ` Thomas Gleixner
2014-11-24 20:36         ` Daniel Thompson
2014-11-24 20:36           ` Daniel Thompson
2014-11-24 20:41           ` Thomas Gleixner
2014-11-24 20:41             ` Thomas Gleixner
2014-11-24 21:09             ` Daniel Thompson
2014-11-24 21:09               ` Daniel Thompson
2014-11-24 20:38         ` Thomas Gleixner
2014-11-24 20:38           ` Thomas Gleixner
2014-11-24 21:01           ` Daniel Thompson
2014-11-24 21:01             ` Daniel Thompson
2014-11-24 21:29             ` Thomas Gleixner
2014-11-24 21:29               ` Thomas Gleixner
2014-11-14 12:35   ` [PATCH 3.18-rc3 v8 2/4] irqchip: gic: Introduce plumbing for IPI FIQ Daniel Thompson
2014-11-14 12:35     ` Daniel Thompson
2014-11-14 12:35   ` [PATCH 3.18-rc3 v8 3/4] ARM: add basic support for on-demand backtrace of other CPUs Daniel Thompson
2014-11-14 12:35     ` Daniel Thompson
2014-11-14 12:35   ` [PATCH 3.18-rc3 v8 4/4] arm: smp: Handle ipi_cpu_backtrace() using FIQ (if available) Daniel Thompson
2014-11-14 12:35     ` Daniel Thompson
2014-11-24 17:09   ` [PATCH 3.18-rc3 v8 0/4] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2014-11-24 17:09     ` Daniel Thompson
2014-11-25 17:26   ` [PATCH 3.18-rc3 v9 0/5] " Daniel Thompson
2014-11-25 17:26     ` Daniel Thompson
2014-11-25 17:26     ` [PATCH 3.18-rc3 v9 1/5] irqchip: gic: Finer grain locking for gic_raise_softirq Daniel Thompson
2014-11-25 17:26       ` Daniel Thompson
2014-11-25 17:40       ` Marc Zyngier
2014-11-25 17:40         ` Marc Zyngier
2014-11-25 20:17         ` Nicolas Pitre
2014-11-25 20:17           ` Nicolas Pitre
2014-11-25 21:10           ` Daniel Thompson
2014-11-25 21:10             ` Daniel Thompson
2014-11-26  1:27             ` Stephen Boyd
2014-11-26  1:27               ` Stephen Boyd
2014-11-26 11:05         ` Daniel Thompson
2014-11-26 11:05           ` Daniel Thompson
2014-11-25 17:26     ` [PATCH 3.18-rc3 v9 2/5] irqchip: gic: Make gic_raise_softirq() FIQ-safe Daniel Thompson
2014-11-25 17:26       ` Daniel Thompson
2014-11-25 17:26     ` [PATCH 3.18-rc3 v9 3/5] irqchip: gic: Introduce plumbing for IPI FIQ Daniel Thompson
2014-11-25 17:26       ` Daniel Thompson
2014-11-26 15:09       ` Tim Sander
2014-11-26 15:09         ` Tim Sander
2014-11-26 15:48         ` Daniel Thompson
2014-11-26 15:48           ` Daniel Thompson
2014-11-26 16:58           ` Tim Sander
2014-11-26 16:58             ` Tim Sander
2014-11-25 17:26     ` [PATCH 3.18-rc3 v9 4/5] ARM: add basic support for on-demand backtrace of other CPUs Daniel Thompson
2014-11-25 17:26       ` Daniel Thompson
2014-11-25 17:26     ` [PATCH 3.18-rc3 v9 5/5] arm: smp: Handle ipi_cpu_backtrace() using FIQ (if available) Daniel Thompson
2014-11-25 17:26       ` Daniel Thompson
2014-11-26 12:46       ` Tim Sander
2014-11-26 12:46         ` Tim Sander
2014-11-26 13:12         ` Russell King - ARM Linux
2014-11-26 13:12           ` Russell King - ARM Linux
2014-11-26 16:17           ` Daniel Thompson
2014-11-26 16:17             ` Daniel Thompson
2014-11-28  9:10             ` Tim Sander
2014-11-28  9:10               ` Tim Sander
2014-11-28 10:08               ` Russell King - ARM Linux
2014-11-28 10:08                 ` Russell King - ARM Linux
2014-12-01 10:32                 ` Tim Sander
2014-12-01 10:32                   ` Tim Sander
2014-12-01 10:38                   ` Russell King - ARM Linux
2014-12-01 10:38                     ` Russell King - ARM Linux
2014-12-01 13:54                     ` Tim Sander
2014-12-01 13:54                       ` Tim Sander
2014-12-01 14:13                       ` Daniel Thompson
2014-12-01 14:13                         ` Daniel Thompson
2014-12-03 13:41                         ` Tim Sander
2014-12-03 13:41                           ` Tim Sander
2014-12-03 14:53                           ` Daniel Thompson
2014-12-03 14:53                             ` Daniel Thompson
2014-12-01 15:02                       ` Russell King - ARM Linux
2014-12-01 15:02                         ` Russell King - ARM Linux
2014-12-05 16:00                         ` Tim Sander
2014-12-05 16:00                           ` Tim Sander
2014-11-26 16:23   ` [PATCH 3.18-rc4 v10 0/6] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2014-11-26 16:23     ` Daniel Thompson
2014-11-26 16:23     ` [PATCH 3.18-rc4 v10 1/6] irqchip: gic: Finer grain locking for gic_raise_softirq Daniel Thompson
2014-11-26 16:23       ` Daniel Thompson
2014-11-26 16:23     ` [PATCH 3.18-rc4 v10 2/6] irqchip: gic: Optimize locking in gic_raise_softirq Daniel Thompson
2014-11-26 16:23       ` Daniel Thompson
2014-11-26 16:23     ` [PATCH 3.18-rc4 v10 3/6] irqchip: gic: Make gic_raise_softirq FIQ-safe Daniel Thompson
2014-11-26 16:23       ` Daniel Thompson
2014-11-26 16:23     ` [PATCH 3.18-rc4 v10 4/6] irqchip: gic: Introduce plumbing for IPI FIQ Daniel Thompson
2014-11-26 16:23       ` Daniel Thompson
2014-11-26 17:42       ` Jason Cooper
2014-11-26 17:42         ` Jason Cooper
2014-11-27 13:39         ` Daniel Thompson
2014-11-27 13:39           ` Daniel Thompson
2014-11-27 18:06           ` Jason Cooper
2014-11-27 18:06             ` Jason Cooper
2014-11-27 19:42             ` Daniel Thompson
2014-11-27 19:42               ` Daniel Thompson
2014-11-27 20:16               ` Daniel Thompson
2014-11-27 20:16                 ` Daniel Thompson
2014-11-26 16:23     ` [PATCH 3.18-rc4 v10 5/6] ARM: add basic support for on-demand backtrace of other CPUs Daniel Thompson
2014-11-26 16:23       ` Daniel Thompson
2014-11-26 16:23     ` [PATCH 3.18-rc4 v10 6/6] arm: smp: Handle ipi_cpu_backtrace() using FIQ (if available) Daniel Thompson
2014-11-26 16:23       ` Daniel Thompson
2014-11-27 20:10   ` [PATCH 3.18-rc4 v11 0/6] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2014-11-27 20:10     ` Daniel Thompson
2014-11-27 20:10     ` [PATCH 3.18-rc4 v11 1/6] irqchip: gic: Finer grain locking for gic_raise_softirq Daniel Thompson
2014-11-27 20:10       ` Daniel Thompson
2014-11-27 20:10     ` [PATCH 3.18-rc4 v11 2/6] irqchip: gic: Optimize locking in gic_raise_softirq Daniel Thompson
2014-11-27 20:10       ` Daniel Thompson
2014-11-27 21:37       ` Thomas Gleixner
2014-11-27 21:37         ` Thomas Gleixner
2014-11-28 10:14         ` Daniel Thompson
2014-11-28 10:14           ` Daniel Thompson
2014-11-27 20:10     ` [PATCH 3.18-rc4 v11 3/6] irqchip: gic: Make gic_raise_softirq FIQ-safe Daniel Thompson
2014-11-27 20:10       ` Daniel Thompson
2014-11-27 21:45       ` Thomas Gleixner
2014-11-27 21:45         ` Thomas Gleixner
2014-11-28  9:21         ` Daniel Thompson
2014-11-28  9:21           ` Daniel Thompson
2014-11-27 20:10     ` [PATCH 3.18-rc4 v11 4/6] irqchip: gic: Introduce plumbing for IPI FIQ Daniel Thompson
2014-11-27 20:10       ` Daniel Thompson
2014-11-27 20:10     ` [PATCH 3.18-rc4 v11 5/6] ARM: add basic support for on-demand backtrace of other CPUs Daniel Thompson
2014-11-27 20:10       ` Daniel Thompson
2014-11-27 20:10     ` [PATCH 3.18-rc4 v11 6/6] arm: smp: Handle ipi_cpu_backtrace() using FIQ (if available) Daniel Thompson
2014-11-27 20:10       ` Daniel Thompson
2014-11-28 16:16   ` [PATCH 3.18-rc4 v12 0/5] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2014-11-28 16:16     ` Daniel Thompson
2014-11-28 16:16     ` [PATCH 3.18-rc4 v12 1/5] irqchip: gic: Optimize locking in gic_raise_softirq Daniel Thompson
2014-11-28 16:16       ` Daniel Thompson
2014-11-28 16:16     ` [PATCH 3.18-rc4 v12 2/5] irqchip: gic: Make gic_raise_softirq FIQ-safe Daniel Thompson
2014-11-28 16:16       ` Daniel Thompson
2014-11-28 16:16     ` [PATCH 3.18-rc4 v12 3/5] irqchip: gic: Introduce plumbing for IPI FIQ Daniel Thompson
2014-11-28 16:16       ` Daniel Thompson
2014-11-28 16:16     ` [PATCH 3.18-rc4 v12 4/5] ARM: add basic support for on-demand backtrace of other CPUs Daniel Thompson
2014-11-28 16:16       ` Daniel Thompson
2014-11-28 16:16     ` [PATCH 3.18-rc4 v12 5/5] arm: smp: Handle ipi_cpu_backtrace() using FIQ (if available) Daniel Thompson
2014-11-28 16:16       ` Daniel Thompson
2014-12-08 16:00     ` [PATCH 3.18-rc4 v12 0/5] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2014-12-08 16:00       ` Daniel Thompson
2015-01-05 14:54   ` [PATCH 3.19-rc2 v13 " Daniel Thompson
2015-01-05 14:54     ` Daniel Thompson
2015-01-05 14:54     ` [PATCH 3.19-rc2 v13 1/5] irqchip: gic: Optimize locking in gic_raise_softirq Daniel Thompson
2015-01-05 14:54       ` Daniel Thompson
2015-01-05 14:54     ` [PATCH 3.19-rc2 v13 2/5] irqchip: gic: Make gic_raise_softirq FIQ-safe Daniel Thompson
2015-01-05 14:54       ` Daniel Thompson
2015-01-05 14:54     ` [PATCH 3.19-rc2 v13 3/5] irqchip: gic: Introduce plumbing for IPI FIQ Daniel Thompson
2015-01-05 14:54       ` Daniel Thompson
2015-01-05 14:54     ` [PATCH 3.19-rc2 v13 4/5] ARM: Add support for on-demand backtrace of other CPUs Daniel Thompson
2015-01-05 14:54       ` Daniel Thompson
2015-01-05 15:19       ` Steven Rostedt
2015-01-05 15:19         ` Steven Rostedt
2015-01-05 17:07         ` Daniel Thompson
2015-01-05 17:07           ` Daniel Thompson
2015-01-09 16:48         ` Russell King - ARM Linux
2015-01-09 16:48           ` Russell King - ARM Linux
2015-01-11 23:37           ` Steven Rostedt
2015-01-11 23:37             ` Steven Rostedt
2015-01-13 10:36             ` Daniel Thompson
2015-01-13 10:36               ` Daniel Thompson
2015-01-13 12:27               ` Steven Rostedt
2015-01-13 12:27                 ` Steven Rostedt
2015-01-05 14:54     ` [PATCH 3.19-rc2 v13 5/5] ARM: Fix on-demand backtrace triggered by IRQ Daniel Thompson
2015-01-05 14:54       ` Daniel Thompson
2015-01-13 10:26   ` [PATCH 3.19-rc2 v14 0/7] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2015-01-13 10:26     ` Daniel Thompson
2015-01-13 10:26     ` [PATCH 3.19-rc2 v14 1/7] irqchip: gic: Optimize locking in gic_raise_softirq Daniel Thompson
2015-01-13 10:26       ` Daniel Thompson
2015-01-13 10:26     ` [PATCH 3.19-rc2 v14 2/7] irqchip: gic: Make gic_raise_softirq FIQ-safe Daniel Thompson
2015-01-13 10:26       ` Daniel Thompson
2015-01-13 10:26     ` [PATCH 3.19-rc2 v14 3/7] irqchip: gic: Introduce plumbing for IPI FIQ Daniel Thompson
2015-01-13 10:26       ` Daniel Thompson
2015-01-13 10:26     ` [PATCH 3.19-rc2 v14 4/7] printk: Simple implementation for NMI backtracing Daniel Thompson
2015-01-13 10:26       ` Daniel Thompson
2015-01-13 10:26     ` [PATCH 3.19-rc2 v14 5/7] x86/nmi: Use common printk functions Daniel Thompson
2015-01-13 10:26       ` Daniel Thompson
2015-01-13 10:26     ` [PATCH 3.19-rc2 v14 6/7] ARM: Add support for on-demand backtrace of other CPUs Daniel Thompson
2015-01-13 10:26       ` Daniel Thompson
2015-01-13 10:26     ` [PATCH 3.19-rc2 v14 7/7] ARM: Fix on-demand backtrace triggered by IRQ Daniel Thompson
2015-01-13 10:26       ` Daniel Thompson
2015-01-20 10:25     ` [PATCH 3.19-rc2 v14 0/7] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2015-01-20 10:25       ` Daniel Thompson
2015-01-20 20:53       ` Stephen Boyd
2015-01-20 20:53         ` Stephen Boyd
2015-01-21 10:47         ` Daniel Thompson [this message]
2015-01-21 10:47           ` Daniel Thompson
2015-01-21 13:06           ` Steven Rostedt
2015-01-21 13:06             ` Steven Rostedt
2015-01-21 13:48             ` Daniel Thompson
2015-01-21 13:48               ` Daniel Thompson
2015-01-22 11:21               ` Daniel Thompson
2015-01-22 11:21                 ` Daniel Thompson

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=54BF83C9.5060300@linaro.org \
    --to=daniel.thompson@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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.