All of lore.kernel.org
 help / color / mirror / Atom feed
From: James Morse <james.morse@arm.com>
To: linux-acpi@vger.kernel.org
Cc: jonathan.zhang@cavium.com, Rafael Wysocki <rjw@rjwysocki.net>,
	Tony Luck <tony.luck@intel.com>,
	Punit Agrawal <punit.agrawal@arm.com>,
	Marc Zyngier <marc.zyngier@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Tyler Baicar <tbaicar@codeaurora.org>,
	Will Deacon <will.deacon@arm.com>,
	Dongjiu Geng <gengdongjiu@huawei.com>,
	linux-mm@kvack.org, Borislav Petkov <bp@alien8.de>,
	Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
	kvmarm@lists.cs.columbia.edu,
	linux-arm-kernel@lists.infradead.org, Len Brown <lenb@kernel.org>
Subject: [PATCH v6 00/18] APEI in_nmi() rework
Date: Fri, 21 Sep 2018 23:16:47 +0100	[thread overview]
Message-ID: <20180921221705.6478-1-james.morse@arm.com> (raw)

Hello,

The GHES driver has collected quite a few bugs:

ghes_proc() at ghes_probe() time can be interrupted by an NMI that
will clobber the ghes->estatus fields, flags, and the buffer_paddr.

ghes_copy_tofrom_phys() uses in_nmi() to decide which path to take. arm64's
SEA taking both paths, depending on what it interrupted.

There is no guarantee that queued memory_failure() errors will be processed
before this CPU returns to user-space.

x86 can't TLBI from interrupt-masked code which this driver does all the
time.


This series aims to fix the first three, with an eye to fixing the
last one with a follow-up series.

Previous postings included the SDEI notification calls, which I haven't
finished re-testing. This series is big enough as it is.


Any NMIlike notification should always be in_nmi(), and should use the
ghes estatus cache to hold the CPER records until they can be processed.

The path through GHES should be nmi-safe, without the need to look at
in_nmi(). Abstract the estatus cache, and re-plumb arm64 to always
nmi_enter() before making the ghes_notify_sea() call.

To remove the use of in_nmi(), the locks are pushed out to the notification
helpers, and the fixmap slot to use is passed in. (A future series could
change as many nnotification helpers as possible to not mask-irqs, and
pass in some GHES_FIXMAP_NONE that indicates ioremap() should be used)

Change the now common _in_nmi_notify_one() to use local estatus/paddr/flags,
instead of clobbering those in the struct ghes.

Finally we try and ensure the memory_failure() work will run before this
CPU returns to user-space where the error may be triggered again.


Changes since v5:
 * Fixed phys_addr_t/u64 that failed to build on 32bit x86.
 * Removed buffer/flags from struct ghes, these are now on the stack.

To make future irq/tlbi fixes easier:
 * Moved the locking further out to make it easier to avoid masking interrupts
   for notifications where it isn't needed.
 * Restored map/unmap helpers so they can use ioremap() when interrupts aren't
   masked.


Feedback welcome,

Thanks

James Morse (18):
  ACPI / APEI: Move the estatus queue code up, and under its own ifdef
  ACPI / APEI: Generalise the estatus queue's add/remove and notify code
  ACPI / APEI: don't wait to serialise with oops messages when
    panic()ing
  ACPI / APEI: Switch NOTIFY_SEA to use the estatus queue
  ACPI / APEI: Make estatus queue a Kconfig symbol
  KVM: arm/arm64: Add kvm_ras.h to collect kvm specific RAS plumbing
  arm64: KVM/mm: Move SEA handling behind a single 'claim' interface
  ACPI / APEI: Move locking to the notification helper
  ACPI / APEI: Let the notification helper specify the fixmap slot
  ACPI / APEI: preparatory split of ghes->estatus
  ACPI / APEI: Remove silent flag from ghes_read_estatus()
  ACPI / APEI: Don't store CPER records physical address in struct ghes
  ACPI / APEI: Don't update struct ghes' flags in read/clear estatus
  ACPI / APEI: Split ghes_read_estatus() to read CPER length
  ACPI / APEI: Only use queued estatus entry during _in_nmi_notify_one()
  ACPI / APEI: Split fixmap pages for arm64 NMI-like notifications
  mm/memory-failure: increase queued recovery work's priority
  arm64: acpi: Make apei_claim_sea() synchronise with APEI's irq work

 arch/arm/include/asm/kvm_ras.h       |  14 +
 arch/arm/include/asm/system_misc.h   |   5 -
 arch/arm64/include/asm/acpi.h        |   4 +
 arch/arm64/include/asm/daifflags.h   |   1 +
 arch/arm64/include/asm/fixmap.h      |   4 +-
 arch/arm64/include/asm/kvm_ras.h     |  25 ++
 arch/arm64/include/asm/system_misc.h |   2 -
 arch/arm64/kernel/acpi.c             |  48 +++
 arch/arm64/mm/fault.c                |  25 +-
 drivers/acpi/apei/Kconfig            |   6 +
 drivers/acpi/apei/ghes.c             | 564 +++++++++++++++------------
 include/acpi/ghes.h                  |   2 -
 mm/memory-failure.c                  |  11 +-
 virt/kvm/arm/mmu.c                   |   4 +-
 14 files changed, 426 insertions(+), 289 deletions(-)
 create mode 100644 arch/arm/include/asm/kvm_ras.h
 create mode 100644 arch/arm64/include/asm/kvm_ras.h

-- 
2.19.0

WARNING: multiple messages have this Message-ID (diff)
From: James Morse <james.morse@arm.com>
To: linux-acpi@vger.kernel.org
Cc: kvmarm@lists.cs.columbia.edu,
	linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org,
	Borislav Petkov <bp@alien8.de>,
	Marc Zyngier <marc.zyngier@arm.com>,
	Christoffer Dall <christoffer.dall@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
	Rafael Wysocki <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>,
	Tony Luck <tony.luck@intel.com>,
	Tyler Baicar <tbaicar@codeaurora.org>,
	Dongjiu Geng <gengdongjiu@huawei.com>,
	Xie XiuQi <xiexiuqi@huawei.com>,
	Punit Agrawal <punit.agrawal@arm.com>,
	jonathan.zhang@cavium.com, James Morse <james.morse@arm.com>
Subject: [PATCH v6 00/18] APEI in_nmi() rework
Date: Fri, 21 Sep 2018 23:16:47 +0100	[thread overview]
Message-ID: <20180921221705.6478-1-james.morse@arm.com> (raw)

Hello,

The GHES driver has collected quite a few bugs:

ghes_proc() at ghes_probe() time can be interrupted by an NMI that
will clobber the ghes->estatus fields, flags, and the buffer_paddr.

ghes_copy_tofrom_phys() uses in_nmi() to decide which path to take. arm64's
SEA taking both paths, depending on what it interrupted.

There is no guarantee that queued memory_failure() errors will be processed
before this CPU returns to user-space.

x86 can't TLBI from interrupt-masked code which this driver does all the
time.


This series aims to fix the first three, with an eye to fixing the
last one with a follow-up series.

Previous postings included the SDEI notification calls, which I haven't
finished re-testing. This series is big enough as it is.


Any NMIlike notification should always be in_nmi(), and should use the
ghes estatus cache to hold the CPER records until they can be processed.

The path through GHES should be nmi-safe, without the need to look at
in_nmi(). Abstract the estatus cache, and re-plumb arm64 to always
nmi_enter() before making the ghes_notify_sea() call.

To remove the use of in_nmi(), the locks are pushed out to the notification
helpers, and the fixmap slot to use is passed in. (A future series could
change as many nnotification helpers as possible to not mask-irqs, and
pass in some GHES_FIXMAP_NONE that indicates ioremap() should be used)

Change the now common _in_nmi_notify_one() to use local estatus/paddr/flags,
instead of clobbering those in the struct ghes.

Finally we try and ensure the memory_failure() work will run before this
CPU returns to user-space where the error may be triggered again.


Changes since v5:
 * Fixed phys_addr_t/u64 that failed to build on 32bit x86.
 * Removed buffer/flags from struct ghes, these are now on the stack.

To make future irq/tlbi fixes easier:
 * Moved the locking further out to make it easier to avoid masking interrupts
   for notifications where it isn't needed.
 * Restored map/unmap helpers so they can use ioremap() when interrupts aren't
   masked.


Feedback welcome,

Thanks

James Morse (18):
  ACPI / APEI: Move the estatus queue code up, and under its own ifdef
  ACPI / APEI: Generalise the estatus queue's add/remove and notify code
  ACPI / APEI: don't wait to serialise with oops messages when
    panic()ing
  ACPI / APEI: Switch NOTIFY_SEA to use the estatus queue
  ACPI / APEI: Make estatus queue a Kconfig symbol
  KVM: arm/arm64: Add kvm_ras.h to collect kvm specific RAS plumbing
  arm64: KVM/mm: Move SEA handling behind a single 'claim' interface
  ACPI / APEI: Move locking to the notification helper
  ACPI / APEI: Let the notification helper specify the fixmap slot
  ACPI / APEI: preparatory split of ghes->estatus
  ACPI / APEI: Remove silent flag from ghes_read_estatus()
  ACPI / APEI: Don't store CPER records physical address in struct ghes
  ACPI / APEI: Don't update struct ghes' flags in read/clear estatus
  ACPI / APEI: Split ghes_read_estatus() to read CPER length
  ACPI / APEI: Only use queued estatus entry during _in_nmi_notify_one()
  ACPI / APEI: Split fixmap pages for arm64 NMI-like notifications
  mm/memory-failure: increase queued recovery work's priority
  arm64: acpi: Make apei_claim_sea() synchronise with APEI's irq work

 arch/arm/include/asm/kvm_ras.h       |  14 +
 arch/arm/include/asm/system_misc.h   |   5 -
 arch/arm64/include/asm/acpi.h        |   4 +
 arch/arm64/include/asm/daifflags.h   |   1 +
 arch/arm64/include/asm/fixmap.h      |   4 +-
 arch/arm64/include/asm/kvm_ras.h     |  25 ++
 arch/arm64/include/asm/system_misc.h |   2 -
 arch/arm64/kernel/acpi.c             |  48 +++
 arch/arm64/mm/fault.c                |  25 +-
 drivers/acpi/apei/Kconfig            |   6 +
 drivers/acpi/apei/ghes.c             | 564 +++++++++++++++------------
 include/acpi/ghes.h                  |   2 -
 mm/memory-failure.c                  |  11 +-
 virt/kvm/arm/mmu.c                   |   4 +-
 14 files changed, 426 insertions(+), 289 deletions(-)
 create mode 100644 arch/arm/include/asm/kvm_ras.h
 create mode 100644 arch/arm64/include/asm/kvm_ras.h

-- 
2.19.0

WARNING: multiple messages have this Message-ID (diff)
From: james.morse@arm.com (James Morse)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v6 00/18] APEI in_nmi() rework
Date: Fri, 21 Sep 2018 23:16:47 +0100	[thread overview]
Message-ID: <20180921221705.6478-1-james.morse@arm.com> (raw)

Hello,

The GHES driver has collected quite a few bugs:

ghes_proc() at ghes_probe() time can be interrupted by an NMI that
will clobber the ghes->estatus fields, flags, and the buffer_paddr.

ghes_copy_tofrom_phys() uses in_nmi() to decide which path to take. arm64's
SEA taking both paths, depending on what it interrupted.

There is no guarantee that queued memory_failure() errors will be processed
before this CPU returns to user-space.

x86 can't TLBI from interrupt-masked code which this driver does all the
time.


This series aims to fix the first three, with an eye to fixing the
last one with a follow-up series.

Previous postings included the SDEI notification calls, which I haven't
finished re-testing. This series is big enough as it is.


Any NMIlike notification should always be in_nmi(), and should use the
ghes estatus cache to hold the CPER records until they can be processed.

The path through GHES should be nmi-safe, without the need to look at
in_nmi(). Abstract the estatus cache, and re-plumb arm64 to always
nmi_enter() before making the ghes_notify_sea() call.

To remove the use of in_nmi(), the locks are pushed out to the notification
helpers, and the fixmap slot to use is passed in. (A future series could
change as many nnotification helpers as possible to not mask-irqs, and
pass in some GHES_FIXMAP_NONE that indicates ioremap() should be used)

Change the now common _in_nmi_notify_one() to use local estatus/paddr/flags,
instead of clobbering those in the struct ghes.

Finally we try and ensure the memory_failure() work will run before this
CPU returns to user-space where the error may be triggered again.


Changes since v5:
 * Fixed phys_addr_t/u64 that failed to build on 32bit x86.
 * Removed buffer/flags from struct ghes, these are now on the stack.

To make future irq/tlbi fixes easier:
 * Moved the locking further out to make it easier to avoid masking interrupts
   for notifications where it isn't needed.
 * Restored map/unmap helpers so they can use ioremap() when interrupts aren't
   masked.


Feedback welcome,

Thanks

James Morse (18):
  ACPI / APEI: Move the estatus queue code up, and under its own ifdef
  ACPI / APEI: Generalise the estatus queue's add/remove and notify code
  ACPI / APEI: don't wait to serialise with oops messages when
    panic()ing
  ACPI / APEI: Switch NOTIFY_SEA to use the estatus queue
  ACPI / APEI: Make estatus queue a Kconfig symbol
  KVM: arm/arm64: Add kvm_ras.h to collect kvm specific RAS plumbing
  arm64: KVM/mm: Move SEA handling behind a single 'claim' interface
  ACPI / APEI: Move locking to the notification helper
  ACPI / APEI: Let the notification helper specify the fixmap slot
  ACPI / APEI: preparatory split of ghes->estatus
  ACPI / APEI: Remove silent flag from ghes_read_estatus()
  ACPI / APEI: Don't store CPER records physical address in struct ghes
  ACPI / APEI: Don't update struct ghes' flags in read/clear estatus
  ACPI / APEI: Split ghes_read_estatus() to read CPER length
  ACPI / APEI: Only use queued estatus entry during _in_nmi_notify_one()
  ACPI / APEI: Split fixmap pages for arm64 NMI-like notifications
  mm/memory-failure: increase queued recovery work's priority
  arm64: acpi: Make apei_claim_sea() synchronise with APEI's irq work

 arch/arm/include/asm/kvm_ras.h       |  14 +
 arch/arm/include/asm/system_misc.h   |   5 -
 arch/arm64/include/asm/acpi.h        |   4 +
 arch/arm64/include/asm/daifflags.h   |   1 +
 arch/arm64/include/asm/fixmap.h      |   4 +-
 arch/arm64/include/asm/kvm_ras.h     |  25 ++
 arch/arm64/include/asm/system_misc.h |   2 -
 arch/arm64/kernel/acpi.c             |  48 +++
 arch/arm64/mm/fault.c                |  25 +-
 drivers/acpi/apei/Kconfig            |   6 +
 drivers/acpi/apei/ghes.c             | 564 +++++++++++++++------------
 include/acpi/ghes.h                  |   2 -
 mm/memory-failure.c                  |  11 +-
 virt/kvm/arm/mmu.c                   |   4 +-
 14 files changed, 426 insertions(+), 289 deletions(-)
 create mode 100644 arch/arm/include/asm/kvm_ras.h
 create mode 100644 arch/arm64/include/asm/kvm_ras.h

-- 
2.19.0

             reply	other threads:[~2018-09-21 22:16 UTC|newest]

Thread overview: 123+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-21 22:16 James Morse [this message]
2018-09-21 22:16 ` [PATCH v6 00/18] APEI in_nmi() rework James Morse
2018-09-21 22:16 ` James Morse
2018-09-21 22:16 ` [PATCH v6 01/18] ACPI / APEI: Move the estatus queue code up, and under its own ifdef James Morse
2018-09-21 22:16   ` James Morse
2018-09-21 22:16   ` James Morse
2018-09-21 22:16 ` [PATCH v6 02/18] ACPI / APEI: Generalise the estatus queue's add/remove and notify code James Morse
2018-09-21 22:16   ` James Morse
2018-09-21 22:16   ` James Morse
2018-09-21 22:16 ` [PATCH v6 03/18] ACPI / APEI: don't wait to serialise with oops messages when panic()ing James Morse
2018-09-21 22:16   ` James Morse
2018-09-21 22:16   ` James Morse
2018-09-21 22:16 ` [PATCH v6 04/18] ACPI / APEI: Switch NOTIFY_SEA to use the estatus queue James Morse
2018-09-21 22:16   ` James Morse
2018-09-21 22:16   ` James Morse
2018-09-28 17:04   ` Borislav Petkov
2018-09-28 17:04     ` Borislav Petkov
2018-09-28 17:04     ` Borislav Petkov
2018-09-21 22:16 ` [PATCH v6 05/18] ACPI / APEI: Make estatus queue a Kconfig symbol James Morse
2018-09-21 22:16   ` James Morse
2018-09-21 22:16   ` James Morse
2018-10-01 17:59   ` Borislav Petkov
2018-10-01 17:59     ` Borislav Petkov
2018-10-01 17:59     ` Borislav Petkov
2018-10-03 17:50     ` James Morse
2018-10-03 17:50       ` James Morse
2018-10-03 17:50       ` James Morse
2018-10-04 17:34       ` Borislav Petkov
2018-10-04 17:34         ` Borislav Petkov
2018-10-04 17:34         ` Borislav Petkov
2018-10-12 17:17         ` James Morse
2018-10-12 17:17           ` James Morse
2018-10-12 17:17           ` James Morse
2018-10-12 18:10           ` Borislav Petkov
2018-10-12 18:10             ` Borislav Petkov
2018-10-12 18:10             ` Borislav Petkov
2018-09-21 22:16 ` [PATCH v6 06/18] KVM: arm/arm64: Add kvm_ras.h to collect kvm specific RAS plumbing James Morse
2018-09-21 22:16   ` James Morse
2018-09-21 22:16   ` James Morse
2018-10-12  9:57   ` Borislav Petkov
2018-10-12  9:57     ` Borislav Petkov
2018-10-12  9:57     ` Borislav Petkov
2018-10-12 17:18     ` James Morse
2018-10-12 17:18       ` James Morse
2018-10-12 17:18       ` James Morse
2018-09-21 22:16 ` [PATCH v6 07/18] arm64: KVM/mm: Move SEA handling behind a single 'claim' interface James Morse
2018-09-21 22:16   ` James Morse
2018-09-21 22:16   ` James Morse
2018-10-12 10:02   ` Borislav Petkov
2018-10-12 10:02     ` Borislav Petkov
2018-10-12 10:02     ` Borislav Petkov
2018-10-12 17:18     ` James Morse
2018-10-12 17:18       ` James Morse
2018-10-12 17:18       ` James Morse
2018-09-21 22:16 ` [PATCH v6 08/18] ACPI / APEI: Move locking to the notification helper James Morse
2018-09-21 22:16   ` James Morse
2018-09-21 22:16   ` James Morse
2018-10-12 11:08   ` Borislav Petkov
2018-10-12 11:08     ` Borislav Petkov
2018-10-12 11:08     ` Borislav Petkov
2018-09-21 22:16 ` [PATCH v6 09/18] ACPI / APEI: Let the notification helper specify the fixmap slot James Morse
2018-09-21 22:16   ` James Morse
2018-09-21 22:16   ` James Morse
2018-10-12 11:14   ` Borislav Petkov
2018-10-12 11:14     ` Borislav Petkov
2018-10-12 11:14     ` Borislav Petkov
2018-09-21 22:16 ` [PATCH v6 10/18] ACPI / APEI: preparatory split of ghes->estatus James Morse
2018-09-21 22:16   ` James Morse
2018-09-21 22:16   ` James Morse
2018-10-12 16:37   ` Borislav Petkov
2018-10-12 16:37     ` Borislav Petkov
2018-10-12 16:37     ` Borislav Petkov
2018-09-21 22:16 ` [PATCH v6 11/18] ACPI / APEI: Remove silent flag from ghes_read_estatus() James Morse
2018-09-21 22:16   ` James Morse
2018-09-21 22:16   ` James Morse
2018-10-12 16:55   ` Borislav Petkov
2018-10-12 16:55     ` Borislav Petkov
2018-10-12 16:55     ` Borislav Petkov
2018-09-21 22:16 ` [PATCH v6 12/18] ACPI / APEI: Don't store CPER records physical address in struct ghes James Morse
2018-09-21 22:16   ` James Morse
2018-09-21 22:16   ` James Morse
2018-09-21 22:17 ` [PATCH v6 13/18] ACPI / APEI: Don't update struct ghes' flags in read/clear estatus James Morse
2018-09-21 22:17   ` James Morse
2018-09-21 22:17   ` James Morse
2018-10-12 17:14   ` Borislav Petkov
2018-10-12 17:14     ` Borislav Petkov
2018-10-12 17:14     ` Borislav Petkov
2018-09-21 22:17 ` [PATCH v6 14/18] ACPI / APEI: Split ghes_read_estatus() to read CPER length James Morse
2018-09-21 22:17   ` James Morse
2018-09-21 22:17   ` James Morse
2018-10-12 17:25   ` Borislav Petkov
2018-10-12 17:25     ` Borislav Petkov
2018-10-12 17:25     ` Borislav Petkov
2018-09-21 22:17 ` [PATCH v6 15/18] ACPI / APEI: Only use queued estatus entry during _in_nmi_notify_one() James Morse
2018-09-21 22:17   ` James Morse
2018-09-21 22:17   ` James Morse
2018-10-12 17:34   ` Borislav Petkov
2018-10-12 17:34     ` Borislav Petkov
2018-10-12 17:34     ` Borislav Petkov
2018-09-21 22:17 ` [PATCH v6 16/18] ACPI / APEI: Split fixmap pages for arm64 NMI-like notifications James Morse
2018-09-21 22:17   ` James Morse
2018-09-21 22:17   ` James Morse
2018-09-21 22:17 ` [PATCH v6 17/18] mm/memory-failure: increase queued recovery work's priority James Morse
2018-09-21 22:17   ` James Morse
2018-09-21 22:17   ` James Morse
2018-10-15 16:49   ` Borislav Petkov
2018-10-15 16:49     ` Borislav Petkov
2018-10-15 16:49     ` Borislav Petkov
2018-10-16  7:43     ` Peter Zijlstra
2018-10-16  7:43       ` Peter Zijlstra
2018-10-16  7:43       ` Peter Zijlstra
2018-09-21 22:17 ` [PATCH v6 18/18] arm64: acpi: Make apei_claim_sea() synchronise with APEI's irq work James Morse
2018-09-21 22:17   ` James Morse
2018-09-21 22:17   ` James Morse
2018-09-25 12:45 ` [PATCH v6 00/18] APEI in_nmi() rework Borislav Petkov
2018-09-25 12:45   ` Borislav Petkov
2018-09-25 12:45   ` Borislav Petkov
2018-10-03 17:50   ` James Morse
2018-10-03 17:50     ` James Morse
2018-10-03 17:50     ` James Morse
2018-10-04 15:15     ` Borislav Petkov
2018-10-04 15:15       ` Borislav Petkov
2018-10-04 15:15       ` Borislav Petkov

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=20180921221705.6478-1-james.morse@arm.com \
    --to=james.morse@arm.com \
    --cc=bp@alien8.de \
    --cc=catalin.marinas@arm.com \
    --cc=gengdongjiu@huawei.com \
    --cc=jonathan.zhang@cavium.com \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-mm@kvack.org \
    --cc=marc.zyngier@arm.com \
    --cc=n-horiguchi@ah.jp.nec.com \
    --cc=punit.agrawal@arm.com \
    --cc=rjw@rjwysocki.net \
    --cc=tbaicar@codeaurora.org \
    --cc=tony.luck@intel.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.