From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Will Deacon <will.deacon@arm.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Peter Zijlstra <peterz@infradead.org>,
Tim Chen <tim.c.chen@linux.intel.com>,
Ingo Molnar <mingo@elte.hu>,
Andrew Morton <akpm@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
linux-mm <linux-mm@kvack.org>,
"linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
Waiman Long <waiman.long@hp.com>,
Andrea Arcangeli <aarcange@redhat.com>,
Alex Shi <alex.shi@linaro.org>, Andi Kleen <andi@firstfloor.org>,
Michel Lespinasse <walken@google.com>,
Davidlohr Bueso <davidlohr.bueso@hp.com>,
Matthew R Wilcox <matthew.r.wilcox@intel.com>,
Dave Hansen <dave.hansen@intel.com>,
Rik van Riel <riel@redhat.com>,
Peter Hurley <peter@hurleysoftware.com>R
Subject: Re: [PATCH v6 4/5] MCS Lock: Barrier corrections
Date: Thu, 28 Nov 2013 11:50:40 -0800 [thread overview]
Message-ID: <20131128195039.GX4137@linux.vnet.ibm.com> (raw)
In-Reply-To: <20131128185341.GG16203@mudshark.cambridge.arm.com>
On Thu, Nov 28, 2013 at 06:53:41PM +0000, Will Deacon wrote:
> On Thu, Nov 28, 2013 at 06:27:12PM +0000, Paul E. McKenney wrote:
> > On Thu, Nov 28, 2013 at 06:03:18PM +0000, Will Deacon wrote:
> > > Hmm, without horrible hacks to keep track of whether we've done an
> > > mb__before_spinlock() without a matching spinlock(), that's going to end up
> > > with full-barrier + pointless half-barrier (similarly on the release path).
> >
> > We should be able to detect mb__before_spinlock() without a matching
> > spinlock via static analysis, right?
> >
> > Or am I missing your point?
>
> See below...
>
> > > > Yes, we might need better names, but I believe that this approach does
> > > > what you need.
> > > >
> > > > Thoughts?
> > >
> > > I still think we need to draw the distinction between ordering all accesses
> > > against a lock and ordering an unlock against a lock. The latter is free for
> > > arm64 (STLR => LDAR is ordered) but the former requires a DMB.
> > >
> > > Not sure I completely got your drift...
> >
> > Here is what I am suggesting:
> >
> > o mb__before_spinlock():
> >
> > o Must appear immediately before a lock acquisition.
> > o Upgrades a lock acquisition to a full barrier.
> > o Emits DMB on ARM64.
>
> Ok, so that then means that:
>
> mb__before_spinlock();
> spin_lock();
>
> on ARM64 expands to:
>
> dmb ish
> ldaxr ...
>
> so there's a redundant half-barrier there. If we want to get rid of that, we
> need mb__before_spinlock() to set a flag, then we could conditionalise
> ldaxr/ldxr but it's really horrible and you have to deal with interrupts
> etc. so in reality we just end up having extra barriers.
Given that there was just a dmb, how much does the ish &c really hurt?
Would the performance difference be measurable at the system level?
> Or we have separate a spin_lock_mb() function.
And mutex_lock_mb(). And spin_lock_irqsave_mb(). And spin_lock_irq_mb().
And...
Admittedly this is not yet a problem given the current very low usage
of smp_mb__before_spinlock(), but the potential for API explosion is
non-trivial.
That said, if the effect on ARM64 is measurable at the system level, I
won't stand in the way of the additional APIs.
> > o mb_after_spinlock():
> >
> > o Must appear immediatly after a lock acquisition.
> > o Upgrades an unlock+lock pair to a full barrier.
> > o Emits a no-op on ARM64, as in "do { } while (0)".
> > o Might need a separate flavor for queued locks on
> > some platforms, but no sign of that yet.
>
> Ok, so mb__after_spinlock() doesn't imply a full barrier but
> mb__before_spinlock() does? I think people will get that wrong :)
As I said earlier in the thread, I am open to better names.
How about smp_mb__after_spin_unlock_lock_pair()? That said, I am sure that
I could come up with something longer given enough time. ;-)
Thanx, Paul
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Will Deacon <will.deacon@arm.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Peter Zijlstra <peterz@infradead.org>,
Tim Chen <tim.c.chen@linux.intel.com>,
Ingo Molnar <mingo@elte.hu>,
Andrew Morton <akpm@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
linux-mm <linux-mm@kvack.org>,
"linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
Waiman Long <waiman.long@hp.com>,
Andrea Arcangeli <aarcange@redhat.com>,
Alex Shi <alex.shi@linaro.org>, Andi Kleen <andi@firstfloor.org>,
Michel Lespinasse <walken@google.com>,
Davidlohr Bueso <davidlohr.bueso@hp.com>,
Matthew R Wilcox <matthew.r.wilcox@intel.com>,
Dave Hansen <dave.hansen@intel.com>,
Rik van Riel <riel@redhat.com>,
Peter Hurley <peter@hurleysoftware.com>,
Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>,
George Spelvin <linux@horizon.com>,
"H. Peter Anvin" <hpa@zytor.com>, Arnd Bergmann <arnd@arndb.de>,
Aswin Chandramouleeswaran <aswin@hp.com>,
Scott J Norton <scott.norton@hp.com>,
"Figo.zhang" <figo1802@gmail.com>
Subject: Re: [PATCH v6 4/5] MCS Lock: Barrier corrections
Date: Thu, 28 Nov 2013 11:50:40 -0800 [thread overview]
Message-ID: <20131128195039.GX4137@linux.vnet.ibm.com> (raw)
In-Reply-To: <20131128185341.GG16203@mudshark.cambridge.arm.com>
On Thu, Nov 28, 2013 at 06:53:41PM +0000, Will Deacon wrote:
> On Thu, Nov 28, 2013 at 06:27:12PM +0000, Paul E. McKenney wrote:
> > On Thu, Nov 28, 2013 at 06:03:18PM +0000, Will Deacon wrote:
> > > Hmm, without horrible hacks to keep track of whether we've done an
> > > mb__before_spinlock() without a matching spinlock(), that's going to end up
> > > with full-barrier + pointless half-barrier (similarly on the release path).
> >
> > We should be able to detect mb__before_spinlock() without a matching
> > spinlock via static analysis, right?
> >
> > Or am I missing your point?
>
> See below...
>
> > > > Yes, we might need better names, but I believe that this approach does
> > > > what you need.
> > > >
> > > > Thoughts?
> > >
> > > I still think we need to draw the distinction between ordering all accesses
> > > against a lock and ordering an unlock against a lock. The latter is free for
> > > arm64 (STLR => LDAR is ordered) but the former requires a DMB.
> > >
> > > Not sure I completely got your drift...
> >
> > Here is what I am suggesting:
> >
> > o mb__before_spinlock():
> >
> > o Must appear immediately before a lock acquisition.
> > o Upgrades a lock acquisition to a full barrier.
> > o Emits DMB on ARM64.
>
> Ok, so that then means that:
>
> mb__before_spinlock();
> spin_lock();
>
> on ARM64 expands to:
>
> dmb ish
> ldaxr ...
>
> so there's a redundant half-barrier there. If we want to get rid of that, we
> need mb__before_spinlock() to set a flag, then we could conditionalise
> ldaxr/ldxr but it's really horrible and you have to deal with interrupts
> etc. so in reality we just end up having extra barriers.
Given that there was just a dmb, how much does the ish &c really hurt?
Would the performance difference be measurable at the system level?
> Or we have separate a spin_lock_mb() function.
And mutex_lock_mb(). And spin_lock_irqsave_mb(). And spin_lock_irq_mb().
And...
Admittedly this is not yet a problem given the current very low usage
of smp_mb__before_spinlock(), but the potential for API explosion is
non-trivial.
That said, if the effect on ARM64 is measurable at the system level, I
won't stand in the way of the additional APIs.
> > o mb_after_spinlock():
> >
> > o Must appear immediatly after a lock acquisition.
> > o Upgrades an unlock+lock pair to a full barrier.
> > o Emits a no-op on ARM64, as in "do { } while (0)".
> > o Might need a separate flavor for queued locks on
> > some platforms, but no sign of that yet.
>
> Ok, so mb__after_spinlock() doesn't imply a full barrier but
> mb__before_spinlock() does? I think people will get that wrong :)
As I said earlier in the thread, I am open to better names.
How about smp_mb__after_spin_unlock_lock_pair()? That said, I am sure that
I could come up with something longer given enough time. ;-)
Thanx, Paul
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2013-11-28 19:50 UTC|newest]
Thread overview: 239+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <cover.1384885312.git.tim.c.chen@linux.intel.com>
2013-11-20 1:37 ` [PATCH v6 0/5] MCS Lock: MCS lock code cleanup and optimizations Tim Chen
2013-11-20 1:37 ` Tim Chen
2013-11-20 1:37 ` Tim Chen
2013-11-20 10:19 ` Will Deacon
2013-11-20 10:19 ` Will Deacon
2013-11-20 12:50 ` Paul E. McKenney
2013-11-20 12:50 ` Paul E. McKenney
2013-11-20 17:00 ` Will Deacon
2013-11-20 17:00 ` Will Deacon
2013-11-20 17:14 ` Paul E. McKenney
2013-11-20 17:14 ` Paul E. McKenney
2013-11-20 17:00 ` Tim Chen
2013-11-20 17:00 ` Tim Chen
2013-11-20 17:16 ` Paul E. McKenney
2013-11-20 17:16 ` Paul E. McKenney
2013-11-20 1:37 ` [PATCH v6 1/5] MCS Lock: Restructure the MCS lock defines and locking code into its own file Tim Chen
2013-11-20 1:37 ` Tim Chen
2013-11-20 1:37 ` Tim Chen
2013-11-20 1:37 ` [PATCH v6 2/5] MCS Lock: optimizations and extra comments Tim Chen
2013-11-20 1:37 ` Tim Chen
2013-11-20 1:37 ` Tim Chen
2013-11-20 1:37 ` [PATCH v6 3/5] MCS Lock: Move mcs_lock/unlock function into its own file Tim Chen
2013-11-20 1:37 ` Tim Chen
2013-11-20 1:37 ` Tim Chen
2013-11-20 1:37 ` [PATCH v6 4/5] MCS Lock: Barrier corrections Tim Chen
2013-11-20 1:37 ` Tim Chen
2013-11-20 1:37 ` Tim Chen
2013-11-20 15:31 ` Paul E. McKenney
2013-11-20 15:31 ` Paul E. McKenney
2013-11-20 15:31 ` Paul E. McKenney
2013-11-20 15:46 ` Will Deacon
2013-11-20 15:46 ` Will Deacon
2013-11-20 17:14 ` Paul E. McKenney
2013-11-20 17:14 ` Paul E. McKenney
2013-11-20 18:43 ` Tim Chen
2013-11-20 18:43 ` Tim Chen
2013-11-20 19:06 ` Paul E. McKenney
2013-11-20 19:06 ` Paul E. McKenney
2013-11-20 20:36 ` Tim Chen
2013-11-20 20:36 ` Tim Chen
2013-11-20 21:44 ` Paul E. McKenney
2013-11-20 21:44 ` Paul E. McKenney
2013-11-20 23:51 ` Tim Chen
2013-11-20 23:51 ` Tim Chen
2013-11-21 4:53 ` Paul E. McKenney
2013-11-21 4:53 ` Paul E. McKenney
2013-11-21 10:17 ` Will Deacon
2013-11-21 10:17 ` Will Deacon
2013-11-21 13:16 ` Paul E. McKenney
2013-11-21 13:16 ` Paul E. McKenney
2013-11-21 10:45 ` Peter Zijlstra
2013-11-21 10:45 ` Peter Zijlstra
2013-11-21 13:18 ` Paul E. McKenney
2013-11-21 13:18 ` Paul E. McKenney
2013-11-21 22:27 ` Linus Torvalds
2013-11-21 22:27 ` Linus Torvalds
2013-11-21 22:52 ` Paul E. McKenney
2013-11-21 22:52 ` Paul E. McKenney
2013-11-22 0:09 ` Linus Torvalds
2013-11-22 0:09 ` Linus Torvalds
2013-11-22 4:08 ` Paul E. McKenney
2013-11-22 4:08 ` Paul E. McKenney
2013-11-22 4:25 ` Linus Torvalds
2013-11-22 4:25 ` Linus Torvalds
2013-11-22 6:23 ` Paul E. McKenney
2013-11-22 6:23 ` Paul E. McKenney
2013-11-22 15:16 ` Ingo Molnar
2013-11-22 15:16 ` Ingo Molnar
2013-11-22 18:49 ` Paul E. McKenney
2013-11-22 18:49 ` Paul E. McKenney
2013-11-22 19:06 ` Linus Torvalds
2013-11-22 19:06 ` Linus Torvalds
2013-11-22 20:06 ` Paul E. McKenney
2013-11-22 20:06 ` Paul E. McKenney
2013-11-22 20:09 ` Linus Torvalds
2013-11-22 20:09 ` Linus Torvalds
2013-11-22 20:37 ` Paul E. McKenney
2013-11-22 20:37 ` Paul E. McKenney
2013-11-22 21:01 ` Linus Torvalds
2013-11-22 21:01 ` Linus Torvalds
2013-11-22 21:52 ` Paul E. McKenney
2013-11-22 21:52 ` Paul E. McKenney
2013-11-22 22:19 ` Linus Torvalds
2013-11-22 22:19 ` Linus Torvalds
2013-11-23 0:25 ` Paul E. McKenney
2013-11-23 0:25 ` Paul E. McKenney
2013-11-23 0:42 ` Linus Torvalds
2013-11-23 0:42 ` Linus Torvalds
2013-11-23 1:36 ` Paul E. McKenney
2013-11-23 1:36 ` Paul E. McKenney
2013-11-23 2:11 ` Linus Torvalds
2013-11-23 2:11 ` Linus Torvalds
2013-11-23 4:05 ` Paul E. McKenney
2013-11-23 4:05 ` Paul E. McKenney
2013-11-23 11:24 ` Ingo Molnar
2013-11-23 11:24 ` Ingo Molnar
2013-11-23 17:06 ` Paul E. McKenney
2013-11-23 17:06 ` Paul E. McKenney
2013-11-26 12:02 ` Ingo Molnar
2013-11-26 12:02 ` Ingo Molnar
2013-11-26 19:28 ` Paul E. McKenney
2013-11-26 19:28 ` Paul E. McKenney
2013-11-23 20:21 ` Linus Torvalds
2013-11-23 20:21 ` Linus Torvalds
2013-11-23 20:39 ` Linus Torvalds
2013-11-23 20:39 ` Linus Torvalds
2013-11-25 12:09 ` Peter Zijlstra
2013-11-25 12:09 ` Peter Zijlstra
2013-11-25 17:18 ` Will Deacon
2013-11-25 17:18 ` Will Deacon
2013-11-25 17:56 ` Paul E. McKenney
2013-11-25 17:56 ` Paul E. McKenney
2013-11-25 17:54 ` Paul E. McKenney
2013-11-25 17:54 ` Paul E. McKenney
2013-11-23 21:29 ` Peter Zijlstra
2013-11-23 21:29 ` Peter Zijlstra
2013-11-23 22:24 ` Linus Torvalds
2013-11-23 22:24 ` Linus Torvalds
2013-11-25 17:53 ` Paul E. McKenney
2013-11-25 17:53 ` Paul E. McKenney
2013-11-25 18:21 ` Peter Zijlstra
2013-11-25 18:21 ` Peter Zijlstra
2013-11-21 11:03 ` Peter Zijlstra
2013-11-21 11:03 ` Peter Zijlstra
2013-11-21 12:56 ` Peter Zijlstra
2013-11-21 12:56 ` Peter Zijlstra
2013-11-21 13:20 ` Paul E. McKenney
2013-11-21 13:20 ` Paul E. McKenney
2013-11-21 17:25 ` Paul E. McKenney
2013-11-21 17:25 ` Paul E. McKenney
2013-11-21 21:52 ` Peter Zijlstra
2013-11-21 21:52 ` Peter Zijlstra
2013-11-21 22:18 ` Paul E. McKenney
2013-11-21 22:18 ` Paul E. McKenney
2013-11-22 15:58 ` Peter Zijlstra
2013-11-22 15:58 ` Peter Zijlstra
2013-11-22 18:26 ` Paul E. McKenney
2013-11-22 18:26 ` Paul E. McKenney
2013-11-22 18:51 ` Peter Zijlstra
2013-11-22 18:51 ` Peter Zijlstra
2013-11-22 18:59 ` Paul E. McKenney
2013-11-22 18:59 ` Paul E. McKenney
2013-11-25 17:35 ` Peter Zijlstra
2013-11-25 17:35 ` Peter Zijlstra
2013-11-25 18:02 ` Paul E. McKenney
2013-11-25 18:02 ` Paul E. McKenney
2013-11-25 18:24 ` Peter Zijlstra
2013-11-25 18:24 ` Peter Zijlstra
2013-11-25 18:34 ` Tim Chen
2013-11-25 18:34 ` Tim Chen
2013-11-25 18:27 ` Peter Zijlstra
2013-11-25 18:27 ` Peter Zijlstra
2013-11-25 23:52 ` Paul E. McKenney
2013-11-25 23:52 ` Paul E. McKenney
2013-11-26 9:59 ` Peter Zijlstra
2013-11-26 9:59 ` Peter Zijlstra
2013-11-26 17:11 ` Paul E. McKenney
2013-11-26 17:11 ` Paul E. McKenney
2013-11-26 17:18 ` Peter Zijlstra
2013-11-26 17:18 ` Peter Zijlstra
2013-11-26 19:00 ` Linus Torvalds
2013-11-26 19:00 ` Linus Torvalds
2013-11-26 19:20 ` Paul E. McKenney
2013-11-26 19:20 ` Paul E. McKenney
2013-11-26 19:32 ` Linus Torvalds
2013-11-26 19:32 ` Linus Torvalds
2013-11-26 22:51 ` Paul E. McKenney
2013-11-26 22:51 ` Paul E. McKenney
2013-11-26 23:58 ` Linus Torvalds
2013-11-26 23:58 ` Linus Torvalds
2013-11-27 0:21 ` Thomas Gleixner
2013-11-27 0:21 ` Thomas Gleixner
2013-11-27 0:39 ` Paul E. McKenney
2013-11-27 0:39 ` Paul E. McKenney
2013-11-27 1:05 ` Linus Torvalds
2013-11-27 1:05 ` Linus Torvalds
2013-11-27 1:31 ` Paul E. McKenney
2013-11-27 1:31 ` Paul E. McKenney
2013-11-27 10:16 ` Will Deacon
2013-11-27 10:16 ` Will Deacon
2013-11-27 17:11 ` Paul E. McKenney
2013-11-27 17:11 ` Paul E. McKenney
2013-11-28 11:40 ` Will Deacon
2013-11-28 11:40 ` Will Deacon
2013-11-28 17:38 ` Paul E. McKenney
2013-11-28 17:38 ` Paul E. McKenney
2013-11-28 18:03 ` Will Deacon
2013-11-28 18:03 ` Will Deacon
2013-11-28 18:27 ` Paul E. McKenney
2013-11-28 18:27 ` Paul E. McKenney
2013-11-28 18:53 ` Will Deacon
2013-11-28 18:53 ` Will Deacon
2013-11-28 19:50 ` Paul E. McKenney [this message]
2013-11-28 19:50 ` Paul E. McKenney
2013-11-29 16:17 ` Will Deacon
2013-11-29 16:17 ` Will Deacon
2013-11-29 16:44 ` Linus Torvalds
2013-11-29 16:44 ` Linus Torvalds
2013-11-29 18:18 ` Will Deacon
2013-11-29 18:18 ` Will Deacon
2013-11-30 17:38 ` Paul E. McKenney
2013-11-30 17:38 ` Paul E. McKenney
2013-11-26 19:21 ` Peter Zijlstra
2013-11-26 19:21 ` Peter Zijlstra
2013-11-27 16:58 ` Oleg Nesterov
2013-11-27 16:58 ` Oleg Nesterov
2013-11-26 23:08 ` Benjamin Herrenschmidt
2013-11-26 23:08 ` Benjamin Herrenschmidt
2013-11-25 23:55 ` H. Peter Anvin
2013-11-25 23:55 ` H. Peter Anvin
2013-11-26 3:16 ` Paul E. McKenney
2013-11-26 3:16 ` Paul E. McKenney
2013-11-27 0:46 ` H. Peter Anvin
2013-11-27 0:46 ` H. Peter Anvin
2013-11-27 1:07 ` Linus Torvalds
2013-11-27 1:07 ` Linus Torvalds
2013-11-27 1:27 ` Paul E. McKenney
2013-11-27 1:27 ` Paul E. McKenney
2013-11-27 2:59 ` H. Peter Anvin
2013-11-27 2:59 ` H. Peter Anvin
2013-11-25 18:52 ` H. Peter Anvin
2013-11-25 18:52 ` H. Peter Anvin
2013-11-25 22:58 ` Tim Chen
2013-11-25 22:58 ` Tim Chen
2013-11-25 23:28 ` H. Peter Anvin
2013-11-25 23:28 ` H. Peter Anvin
2013-11-25 23:51 ` Paul E. McKenney
2013-11-25 23:51 ` Paul E. McKenney
2013-11-25 23:36 ` Paul E. McKenney
2013-11-25 23:36 ` Paul E. McKenney
2013-12-04 21:26 ` Andi Kleen
2013-12-04 21:26 ` Andi Kleen
2013-12-04 22:07 ` Paul E. McKenney
2013-12-04 22:07 ` Paul E. McKenney
2013-11-21 13:19 ` Paul E. McKenney
2013-11-21 13:19 ` Paul E. McKenney
2013-11-20 1:37 ` [PATCH v6 5/5] MCS Lock: Allows for architecture specific mcs lock and unlock Tim Chen
2013-11-20 1:37 ` Tim Chen
2013-11-20 1:37 ` Tim Chen
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=20131128195039.GX4137@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=alex.shi@linaro.org \
--cc=andi@firstfloor.org \
--cc=dave.hansen@intel.com \
--cc=davidlohr.bueso@hp.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=matthew.r.wilcox@intel.com \
--cc=mingo@elte.hu \
--cc=peter@hurleysoftware.com \
--cc=peterz@infradead.org \
--cc=riel@redhat.com \
--cc=tglx@linutronix.de \
--cc=tim.c.chen@linux.intel.com \
--cc=torvalds@linux-foundation.org \
--cc=waiman.long@hp.com \
--cc=walken@google.com \
--cc=will.deacon@arm.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.