linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Huacai Chen <chenhc@lemote.com>,
	Huang Pei <huangpei@loongson.cn>,
	Paul Burton <paul.burton@mips.com>,
	Ralf Baechle <ralf@linux-mips.org>,
	ambrosehua@gmail.com, "Steven J . Hill" <Steven.Hill@cavium.com>,
	linux-mips@linux-mips.org, Fuxin Zhang <zhangfx@lemote.com>,
	Zhangjin Wu <wuzhangjin@gmail.com>,
	Li Xuefeng <lixuefeng@loongson.cn>,
	Xu Chenghua <xuchenghua@loongson.cn>,
	Sasha Levin <sashal@kernel.org>
Subject: [PATCH 4.20 131/171] MIPS: Loongson: Introduce and use loongson_llsc_mb()
Date: Tue, 12 Mar 2019 10:08:31 -0700	[thread overview]
Message-ID: <20190312170359.012142566@linuxfoundation.org> (raw)
In-Reply-To: <20190312170347.868927101@linuxfoundation.org>

4.20-stable review patch.  If anyone has any objections, please let me know.

------------------

[ Upstream commit e02e07e3127d8aec1f4bcdfb2fc52a2d99b4859e ]

On the Loongson-2G/2H/3A/3B there is a hardware flaw that ll/sc and
lld/scd is very weak ordering. We should add sync instructions "before
each ll/lld" and "at the branch-target between ll/sc" to workaround.
Otherwise, this flaw will cause deadlock occasionally (e.g. when doing
heavy load test with LTP).

Below is the explaination of CPU designer:

"For Loongson 3 family, when a memory access instruction (load, store,
or prefetch)'s executing occurs between the execution of LL and SC, the
success or failure of SC is not predictable. Although programmer would
not insert memory access instructions between LL and SC, the memory
instructions before LL in program-order, may dynamically executed
between the execution of LL/SC, so a memory fence (SYNC) is needed
before LL/LLD to avoid this situation.

Since Loongson-3A R2 (3A2000), we have improved our hardware design to
handle this case. But we later deduce a rarely circumstance that some
speculatively executed memory instructions due to branch misprediction
between LL/SC still fall into the above case, so a memory fence (SYNC)
at branch-target (if its target is not between LL/SC) is needed for
Loongson 3A1000, 3B1500, 3A2000 and 3A3000.

Our processor is continually evolving and we aim to to remove all these
workaround-SYNCs around LL/SC for new-come processor."

Here is an example:

Both cpu1 and cpu2 simutaneously run atomic_add by 1 on same atomic var,
this bug cause both 'sc' run by two cpus (in atomic_add) succeed at same
time('sc' return 1), and the variable is only *added by 1*, sometimes,
which is wrong and unacceptable(it should be added by 2).

Why disable fix-loongson3-llsc in compiler?
Because compiler fix will cause problems in kernel's __ex_table section.

This patch fix all the cases in kernel, but:

+. the fix at the end of futex_atomic_cmpxchg_inatomic is for branch-target
of 'bne', there other cases which smp_mb__before_llsc() and smp_llsc_mb() fix
the ll and branch-target coincidently such as atomic_sub_if_positive/
cmpxchg/xchg, just like this one.

+. Loongson 3 does support CONFIG_EDAC_ATOMIC_SCRUB, so no need to touch
edac.h

+. local_ops and cmpxchg_local should not be affected by this bug since
only the owner can write.

+. mips_atomic_set for syscall.c is deprecated and rarely used, just let
it go

Signed-off-by: Huacai Chen <chenhc@lemote.com>
Signed-off-by: Huang Pei <huangpei@loongson.cn>
[paul.burton@mips.com:
  - Simplify the addition of -mno-fix-loongson3-llsc to cflags, and add
    a comment describing why it's there.
  - Make loongson_llsc_mb() a no-op when
    CONFIG_CPU_LOONGSON3_WORKAROUNDS=n, rather than a compiler memory
    barrier.
  - Add a comment describing the bug & how loongson_llsc_mb() helps
    in asm/barrier.h.]
Signed-off-by: Paul Burton <paul.burton@mips.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: ambrosehua@gmail.com
Cc: Steven J . Hill <Steven.Hill@cavium.com>
Cc: linux-mips@linux-mips.org
Cc: Fuxin Zhang <zhangfx@lemote.com>
Cc: Zhangjin Wu <wuzhangjin@gmail.com>
Cc: Li Xuefeng <lixuefeng@loongson.cn>
Cc: Xu Chenghua <xuchenghua@loongson.cn>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 arch/mips/Kconfig               | 15 ++++++++++++++
 arch/mips/include/asm/atomic.h  |  6 ++++++
 arch/mips/include/asm/barrier.h | 36 +++++++++++++++++++++++++++++++++
 arch/mips/include/asm/bitops.h  |  5 +++++
 arch/mips/include/asm/futex.h   |  3 +++
 arch/mips/include/asm/pgtable.h |  2 ++
 arch/mips/loongson64/Platform   | 23 +++++++++++++++++++++
 arch/mips/mm/tlbex.c            | 10 +++++++++
 8 files changed, 100 insertions(+)

diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index bfb3d8451c0a..0fbd88489c04 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -1400,6 +1400,21 @@ config LOONGSON3_ENHANCEMENT
 	  please say 'N' here. If you want a high-performance kernel to run on
 	  new Loongson 3 machines only, please say 'Y' here.
 
+config CPU_LOONGSON3_WORKAROUNDS
+	bool "Old Loongson 3 LLSC Workarounds"
+	default y if SMP
+	depends on CPU_LOONGSON3
+	help
+	  Loongson 3 processors have the llsc issues which require workarounds.
+	  Without workarounds the system may hang unexpectedly.
+
+	  Newer Loongson 3 will fix these issues and no workarounds are needed.
+	  The workarounds have no significant side effect on them but may
+	  decrease the performance of the system so this option should be
+	  disabled unless the kernel is intended to be run on old systems.
+
+	  If unsure, please say Y.
+
 config CPU_LOONGSON2E
 	bool "Loongson 2E"
 	depends on SYS_HAS_CPU_LOONGSON2E
diff --git a/arch/mips/include/asm/atomic.h b/arch/mips/include/asm/atomic.h
index 9e805317847d..1fc6f04e85a1 100644
--- a/arch/mips/include/asm/atomic.h
+++ b/arch/mips/include/asm/atomic.h
@@ -58,6 +58,7 @@ static __inline__ void atomic_##op(int i, atomic_t * v)			      \
 	if (kernel_uses_llsc) {						      \
 		int temp;						      \
 									      \
+		loongson_llsc_mb();					      \
 		__asm__ __volatile__(					      \
 		"	.set	"MIPS_ISA_LEVEL"			\n"   \
 		"1:	ll	%0, %1		# atomic_" #op "	\n"   \
@@ -84,6 +85,7 @@ static __inline__ int atomic_##op##_return_relaxed(int i, atomic_t * v)	      \
 	if (kernel_uses_llsc) {						      \
 		int temp;						      \
 									      \
+		loongson_llsc_mb();					      \
 		__asm__ __volatile__(					      \
 		"	.set	"MIPS_ISA_LEVEL"			\n"   \
 		"1:	ll	%1, %2		# atomic_" #op "_return	\n"   \
@@ -116,6 +118,7 @@ static __inline__ int atomic_fetch_##op##_relaxed(int i, atomic_t * v)	      \
 	if (kernel_uses_llsc) {						      \
 		int temp;						      \
 									      \
+		loongson_llsc_mb();					      \
 		__asm__ __volatile__(					      \
 		"	.set	"MIPS_ISA_LEVEL"			\n"   \
 		"1:	ll	%1, %2		# atomic_fetch_" #op "	\n"   \
@@ -251,6 +254,7 @@ static __inline__ void atomic64_##op(long i, atomic64_t * v)		      \
 	if (kernel_uses_llsc) {						      \
 		long temp;						      \
 									      \
+		loongson_llsc_mb();					      \
 		__asm__ __volatile__(					      \
 		"	.set	"MIPS_ISA_LEVEL"			\n"   \
 		"1:	lld	%0, %1		# atomic64_" #op "	\n"   \
@@ -277,6 +281,7 @@ static __inline__ long atomic64_##op##_return_relaxed(long i, atomic64_t * v) \
 	if (kernel_uses_llsc) {						      \
 		long temp;						      \
 									      \
+		loongson_llsc_mb();					      \
 		__asm__ __volatile__(					      \
 		"	.set	"MIPS_ISA_LEVEL"			\n"   \
 		"1:	lld	%1, %2		# atomic64_" #op "_return\n"  \
@@ -309,6 +314,7 @@ static __inline__ long atomic64_fetch_##op##_relaxed(long i, atomic64_t * v)  \
 	if (kernel_uses_llsc) {						      \
 		long temp;						      \
 									      \
+		loongson_llsc_mb();					      \
 		__asm__ __volatile__(					      \
 		"	.set	"MIPS_ISA_LEVEL"			\n"   \
 		"1:	lld	%1, %2		# atomic64_fetch_" #op "\n"   \
diff --git a/arch/mips/include/asm/barrier.h b/arch/mips/include/asm/barrier.h
index a5eb1bb199a7..b7f6ac5e513c 100644
--- a/arch/mips/include/asm/barrier.h
+++ b/arch/mips/include/asm/barrier.h
@@ -222,6 +222,42 @@
 #define __smp_mb__before_atomic()	__smp_mb__before_llsc()
 #define __smp_mb__after_atomic()	smp_llsc_mb()
 
+/*
+ * Some Loongson 3 CPUs have a bug wherein execution of a memory access (load,
+ * store or pref) in between an ll & sc can cause the sc instruction to
+ * erroneously succeed, breaking atomicity. Whilst it's unusual to write code
+ * containing such sequences, this bug bites harder than we might otherwise
+ * expect due to reordering & speculation:
+ *
+ * 1) A memory access appearing prior to the ll in program order may actually
+ *    be executed after the ll - this is the reordering case.
+ *
+ *    In order to avoid this we need to place a memory barrier (ie. a sync
+ *    instruction) prior to every ll instruction, in between it & any earlier
+ *    memory access instructions. Many of these cases are already covered by
+ *    smp_mb__before_llsc() but for the remaining cases, typically ones in
+ *    which multiple CPUs may operate on a memory location but ordering is not
+ *    usually guaranteed, we use loongson_llsc_mb() below.
+ *
+ *    This reordering case is fixed by 3A R2 CPUs, ie. 3A2000 models and later.
+ *
+ * 2) If a conditional branch exists between an ll & sc with a target outside
+ *    of the ll-sc loop, for example an exit upon value mismatch in cmpxchg()
+ *    or similar, then misprediction of the branch may allow speculative
+ *    execution of memory accesses from outside of the ll-sc loop.
+ *
+ *    In order to avoid this we need a memory barrier (ie. a sync instruction)
+ *    at each affected branch target, for which we also use loongson_llsc_mb()
+ *    defined below.
+ *
+ *    This case affects all current Loongson 3 CPUs.
+ */
+#ifdef CONFIG_CPU_LOONGSON3_WORKAROUNDS /* Loongson-3's LLSC workaround */
+#define loongson_llsc_mb()	__asm__ __volatile__(__WEAK_LLSC_MB : : :"memory")
+#else
+#define loongson_llsc_mb()	do { } while (0)
+#endif
+
 #include <asm-generic/barrier.h>
 
 #endif /* __ASM_BARRIER_H */
diff --git a/arch/mips/include/asm/bitops.h b/arch/mips/include/asm/bitops.h
index da1b8718861e..2a40ecd69ac4 100644
--- a/arch/mips/include/asm/bitops.h
+++ b/arch/mips/include/asm/bitops.h
@@ -68,6 +68,7 @@ static inline void set_bit(unsigned long nr, volatile unsigned long *addr)
 		: "ir" (1UL << bit), GCC_OFF_SMALL_ASM() (*m));
 #if defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6)
 	} else if (kernel_uses_llsc && __builtin_constant_p(bit)) {
+		loongson_llsc_mb();
 		do {
 			__asm__ __volatile__(
 			"	" __LL "%0, %1		# set_bit	\n"
@@ -78,6 +79,7 @@ static inline void set_bit(unsigned long nr, volatile unsigned long *addr)
 		} while (unlikely(!temp));
 #endif /* CONFIG_CPU_MIPSR2 || CONFIG_CPU_MIPSR6 */
 	} else if (kernel_uses_llsc) {
+		loongson_llsc_mb();
 		do {
 			__asm__ __volatile__(
 			"	.set	"MIPS_ISA_ARCH_LEVEL"		\n"
@@ -120,6 +122,7 @@ static inline void clear_bit(unsigned long nr, volatile unsigned long *addr)
 		: "ir" (~(1UL << bit)));
 #if defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6)
 	} else if (kernel_uses_llsc && __builtin_constant_p(bit)) {
+		loongson_llsc_mb();
 		do {
 			__asm__ __volatile__(
 			"	" __LL "%0, %1		# clear_bit	\n"
@@ -130,6 +133,7 @@ static inline void clear_bit(unsigned long nr, volatile unsigned long *addr)
 		} while (unlikely(!temp));
 #endif /* CONFIG_CPU_MIPSR2 || CONFIG_CPU_MIPSR6 */
 	} else if (kernel_uses_llsc) {
+		loongson_llsc_mb();
 		do {
 			__asm__ __volatile__(
 			"	.set	"MIPS_ISA_ARCH_LEVEL"		\n"
@@ -188,6 +192,7 @@ static inline void change_bit(unsigned long nr, volatile unsigned long *addr)
 		unsigned long *m = ((unsigned long *) addr) + (nr >> SZLONG_LOG);
 		unsigned long temp;
 
+		loongson_llsc_mb();
 		do {
 			__asm__ __volatile__(
 			"	.set	"MIPS_ISA_ARCH_LEVEL"		\n"
diff --git a/arch/mips/include/asm/futex.h b/arch/mips/include/asm/futex.h
index a9e61ea54ca9..0a62a91b592d 100644
--- a/arch/mips/include/asm/futex.h
+++ b/arch/mips/include/asm/futex.h
@@ -50,6 +50,7 @@
 		  "i" (-EFAULT)						\
 		: "memory");						\
 	} else if (cpu_has_llsc) {					\
+		loongson_llsc_mb();					\
 		__asm__ __volatile__(					\
 		"	.set	push				\n"	\
 		"	.set	noat				\n"	\
@@ -162,6 +163,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
 		  "i" (-EFAULT)
 		: "memory");
 	} else if (cpu_has_llsc) {
+		loongson_llsc_mb();
 		__asm__ __volatile__(
 		"# futex_atomic_cmpxchg_inatomic			\n"
 		"	.set	push					\n"
@@ -190,6 +192,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
 		: GCC_OFF_SMALL_ASM() (*uaddr), "Jr" (oldval), "Jr" (newval),
 		  "i" (-EFAULT)
 		: "memory");
+		loongson_llsc_mb();
 	} else
 		return -ENOSYS;
 
diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h
index 129e0328367f..6a35bbf46b93 100644
--- a/arch/mips/include/asm/pgtable.h
+++ b/arch/mips/include/asm/pgtable.h
@@ -229,6 +229,7 @@ static inline void set_pte(pte_t *ptep, pte_t pteval)
 			: [buddy] "+m" (buddy->pte), [tmp] "=&r" (tmp)
 			: [global] "r" (page_global));
 		} else if (kernel_uses_llsc) {
+			loongson_llsc_mb();
 			__asm__ __volatile__ (
 			"	.set	"MIPS_ISA_ARCH_LEVEL"		\n"
 			"	.set	push				\n"
@@ -244,6 +245,7 @@ static inline void set_pte(pte_t *ptep, pte_t pteval)
 			"	.set	mips0				\n"
 			: [buddy] "+m" (buddy->pte), [tmp] "=&r" (tmp)
 			: [global] "r" (page_global));
+			loongson_llsc_mb();
 		}
 #else /* !CONFIG_SMP */
 		if (pte_none(*buddy))
diff --git a/arch/mips/loongson64/Platform b/arch/mips/loongson64/Platform
index 0fce4608aa88..c1a4d4dc4665 100644
--- a/arch/mips/loongson64/Platform
+++ b/arch/mips/loongson64/Platform
@@ -23,6 +23,29 @@ ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS
 endif
 
 cflags-$(CONFIG_CPU_LOONGSON3)	+= -Wa,--trap
+
+#
+# Some versions of binutils, not currently mainline as of 2019/02/04, support
+# an -mfix-loongson3-llsc flag which emits a sync prior to each ll instruction
+# to work around a CPU bug (see loongson_llsc_mb() in asm/barrier.h for a
+# description).
+#
+# We disable this in order to prevent the assembler meddling with the
+# instruction that labels refer to, ie. if we label an ll instruction:
+#
+# 1: ll v0, 0(a0)
+#
+# ...then with the assembler fix applied the label may actually point at a sync
+# instruction inserted by the assembler, and if we were using the label in an
+# exception table the table would no longer contain the address of the ll
+# instruction.
+#
+# Avoid this by explicitly disabling that assembler behaviour. If upstream
+# binutils does not merge support for the flag then we can revisit & remove
+# this later - for now it ensures vendor toolchains don't cause problems.
+#
+cflags-$(CONFIG_CPU_LOONGSON3)	+= $(call as-option,-Wa$(comma)-mno-fix-loongson3-llsc,)
+
 #
 # binutils from v2.25 on and gcc starting from v4.9.0 treat -march=loongson3a
 # as MIPS64 R2; older versions as just R1.  This leaves the possibility open
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c
index 067714291643..64db0400a8be 100644
--- a/arch/mips/mm/tlbex.c
+++ b/arch/mips/mm/tlbex.c
@@ -931,6 +931,8 @@ build_get_pgd_vmalloc64(u32 **p, struct uasm_label **l, struct uasm_reloc **r,
 		 * to mimic that here by taking a load/istream page
 		 * fault.
 		 */
+		if (IS_ENABLED(CONFIG_CPU_LOONGSON3_WORKAROUNDS))
+			uasm_i_sync(p, 0);
 		UASM_i_LA(p, ptr, (unsigned long)tlb_do_page_fault_0);
 		uasm_i_jr(p, ptr);
 
@@ -1645,6 +1647,8 @@ static void
 iPTE_LW(u32 **p, unsigned int pte, unsigned int ptr)
 {
 #ifdef CONFIG_SMP
+	if (IS_ENABLED(CONFIG_CPU_LOONGSON3_WORKAROUNDS))
+		uasm_i_sync(p, 0);
 # ifdef CONFIG_PHYS_ADDR_T_64BIT
 	if (cpu_has_64bits)
 		uasm_i_lld(p, pte, 0, ptr);
@@ -2258,6 +2262,8 @@ static void build_r4000_tlb_load_handler(void)
 #endif
 
 	uasm_l_nopage_tlbl(&l, p);
+	if (IS_ENABLED(CONFIG_CPU_LOONGSON3_WORKAROUNDS))
+		uasm_i_sync(&p, 0);
 	build_restore_work_registers(&p);
 #ifdef CONFIG_CPU_MICROMIPS
 	if ((unsigned long)tlb_do_page_fault_0 & 1) {
@@ -2312,6 +2318,8 @@ static void build_r4000_tlb_store_handler(void)
 #endif
 
 	uasm_l_nopage_tlbs(&l, p);
+	if (IS_ENABLED(CONFIG_CPU_LOONGSON3_WORKAROUNDS))
+		uasm_i_sync(&p, 0);
 	build_restore_work_registers(&p);
 #ifdef CONFIG_CPU_MICROMIPS
 	if ((unsigned long)tlb_do_page_fault_1 & 1) {
@@ -2367,6 +2375,8 @@ static void build_r4000_tlb_modify_handler(void)
 #endif
 
 	uasm_l_nopage_tlbm(&l, p);
+	if (IS_ENABLED(CONFIG_CPU_LOONGSON3_WORKAROUNDS))
+		uasm_i_sync(&p, 0);
 	build_restore_work_registers(&p);
 #ifdef CONFIG_CPU_MICROMIPS
 	if ((unsigned long)tlb_do_page_fault_1 & 1) {
-- 
2.19.1




  parent reply	other threads:[~2019-03-12 17:14 UTC|newest]

Thread overview: 178+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-12 17:06 [PATCH 4.20 000/171] 4.20.16-stable review Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 001/171] media: uvcvideo: Fix type check leading to overflow Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 002/171] vti4: Fix a ipip packet processing bug in IPCOMP virtual tunnel Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 003/171] perf ordered_events: Fix crash in ordered_events__free Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 004/171] netfilter: nft_compat: use refcnt_t type for nft_xt reference count Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 005/171] netfilter: nft_compat: make lists per netns Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 006/171] netfilter: nft_compat: destroy function must not have side effects Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 007/171] perf script: Fix crash with printing mixed trace point and other events Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 008/171] perf core: Fix perf_proc_update_handler() bug Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 009/171] perf python: Remove -fstack-clash-protection when building with some clang versions Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 010/171] perf tools: Handle TOPOLOGY headers with no CPU Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 011/171] perf script: Fix crash when processing recorded stat data Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 012/171] IB/{hfi1, qib}: Fix WC.byte_len calculation for UD_SEND_WITH_IMM Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 013/171] iommu/amd: Call free_iova_fast with pfn in map_sg Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 014/171] iommu/amd: Unmap all mapped pages in error path of map_sg Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 015/171] riscv: fixup max_low_pfn with PFN_DOWN Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 016/171] ipvs: Fix signed integer overflow when setsockopt timeout Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 017/171] iommu/amd: Fix IOMMU page flush when detach device from a domain Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 018/171] clk: ti: Fix error handling in ti_clk_parse_divider_data() Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 019/171] clk: qcom: gcc: Use active only source for CPUSS clocks Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 020/171] xtensa: SMP: fix ccount_timer_shutdown Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 021/171] RDMA/umem: Add missing initialization of owning_mm Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 022/171] riscv: Adjust mmap base address at a third of task size Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 023/171] IB/ipoib: Fix for use-after-free in ipoib_cm_tx_start Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 024/171] selftests: cpu-hotplug: fix case where CPUs offline > CPUs present Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 025/171] xtensa: SMP: fix secondary CPU initialization Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 026/171] xtensa: smp_lx200_defconfig: fix vectors clash Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 027/171] xtensa: SMP: mark each possible CPU as present Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 028/171] iomap: get/put the page in iomap_page_create/release() Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 029/171] iomap: fix a use after free in iomap_dio_rw Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 030/171] xtensa: SMP: limit number of possible CPUs by NR_CPUS Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 031/171] net: altera_tse: fix msgdma_tx_completion on non-zero fill_level case Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 032/171] net: hns: Fix for missing of_node_put() after of_parse_phandle() Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 033/171] net: hns: Restart autoneg need return failed when autoneg off Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 034/171] net: hns: Fix wrong read accesses via Clause 45 MDIO protocol Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 035/171] net: stmmac: dwmac-rk: fix error handling in rk_gmac_powerup() Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 036/171] netfilter: ebtables: compat: un-break 32bit setsockopt when no rules are present Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 037/171] gpio: vf610: Mask all GPIO interrupts Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 038/171] selftests: net: use LDLIBS instead of LDFLAGS Greg Kroah-Hartman
2019-03-12 17:06 ` [PATCH 4.20 039/171] selftests: timers: " Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 040/171] nfs: Fix NULL pointer dereference of dev_name Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 041/171] qed: Fix bug in tx promiscuous mode settings Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 042/171] qed: Fix LACP pdu drops for VFs Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 043/171] qed: Fix VF probe failure while FLR Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 044/171] qed: Fix system crash in ll2 xmit Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 045/171] qed: Fix stack out of bounds bug Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 046/171] scsi: libfc: free skb when receiving invalid flogi resp Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 047/171] scsi: scsi_debug: fix write_same with virtual_gb problem Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 048/171] scsi: bnx2fc: Fix error handling in probe() Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 049/171] scsi: 53c700: pass correct "dev" to dma_alloc_attrs() Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 050/171] platform/x86: Fix unmet dependency warning for ACPI_CMPC Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 051/171] platform/x86: Fix unmet dependency warning for SAMSUNG_Q10 Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 052/171] x86/cpu: Add Atom Tremont (Jacobsville) Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 053/171] net: macb: Apply RXUBR workaround only to versions with errata Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 054/171] x86/boot/compressed/64: Set EFER.LME=1 in 32-bit trampoline before returning to long mode Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 055/171] cifs: fix computation for MAX_SMB2_HDR_SIZE Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 056/171] x86/microcode/amd: Dont falsely trick the late loading mechanism Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 057/171] apparmor: Fix warning about unused function apparmor_ipv6_postroute Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 058/171] arm64: kprobe: Always blacklist the KVM world-switch code Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 059/171] apparmor: Fix aa_label_build() error handling for failed merges Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 060/171] x86/kexec: Dont setup EFI info if EFI runtime is not enabled Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 061/171] proc: fix /proc/net/* after setns(2) Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 062/171] x86_64: increase stack size for KASAN_EXTRA Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 063/171] mm, memory_hotplug: is_mem_section_removable do not pass the end of a zone Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 064/171] mm, memory_hotplug: test_pages_in_a_zone do not pass the end of zone Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 065/171] psi: fix aggregation idle shut-off Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 066/171] lib/test_kmod.c: potential double free in error handling Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 067/171] fs/drop_caches.c: avoid softlockups in drop_pagecache_sb() Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 068/171] autofs: drop dentry reference only when it is never used Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 069/171] autofs: fix error return in autofs_fill_super() Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 070/171] mm, memory_hotplug: fix off-by-one in is_pageblock_removable Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 071/171] ARM: OMAP: dts: N950/N9: fix onenand timings Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 072/171] ARM: dts: omap4-droid4: Fix typo in cpcap IRQ flags Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 073/171] ARM: dts: sun8i: h3: Add ethernet0 alias to Beelink X2 Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 074/171] arm: dts: meson: Fix IRQ trigger type for macirq Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 075/171] ARM: dts: meson8b: odroidc1: mark the SD card detection GPIO active-low Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 076/171] ARM: dts: meson8b: ec100: " Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 077/171] ARM: dts: meson8m2: mxiii-plus: " Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 078/171] signal: Make siginmask safe when passed a signal of 0 Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 079/171] ARM: dts: imx6sx: correct backward compatible of gpt Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 080/171] arm64: dts: renesas: r8a7796: Enable DMA for SCIF2 Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 081/171] arm64: dts: renesas: r8a77965: " Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 082/171] soc: fsl: qbman: avoid race in clearing QMan interrupt Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 083/171] pinctrl: mcp23s08: spi: Fix regmap allocation for mcp23s18 Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 084/171] wlcore: sdio: Fixup power on/off sequence Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 085/171] bpftool: Fix prog dump by tag Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 086/171] bpftool: fix percpu maps updating Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 087/171] bpf: sock recvbuff must be limited by rmem_max in bpf_setsockopt() Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 088/171] ARM: pxa: ssp: unneeded to free devm_ allocated data Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 089/171] ARM: dts: omap3-gta04: Fix graph_port warning Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 090/171] ARM: dts: n900: fix mmc1 card detect gpio polarity Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 091/171] ARM: dts: am335x-shc.dts: fix wrong cd pin level Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 092/171] arm64: dts: add msm8996 compatible to gicv3 Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 093/171] batman-adv: release station info tidstats Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 094/171] MIPS: DTS: jz4740: Correct interrupt number of DMA core Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 095/171] DTS: CI20: Fix bugs in ci20s device tree Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 096/171] usb: phy: fix link errors Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 097/171] usb: dwc3: exynos: Fix error handling of clk_prepare_enable Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 098/171] irqchip/gic-v4: Fix occasional VLPI drop Greg Kroah-Hartman
2019-03-12 17:07 ` [PATCH 4.20 099/171] irqchip/gic-v3-its: Gracefully fail on LPI exhaustion Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 100/171] irqchip/mmp: Only touch the PJ4 IRQ & FIQ bits on enable/disable Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 101/171] drm/amdgpu: Add missing power attribute to APU check Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 102/171] drm/radeon: check if device is root before getting pci speed caps Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 103/171] drm/amdgpu: Transfer fences to dmabuf importer Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 104/171] net: stmmac: Fallback to Platform Data clock in Watchdog conversion Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 105/171] net: stmmac: Send TSO packets always from Queue 0 Greg Kroah-Hartman
2019-04-08 20:22   ` Ben Hutchings
2019-03-12 17:08 ` [PATCH 4.20 106/171] net: stmmac: Disable EEE mode earlier in XMIT callback Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 107/171] irqchip/gic-v3-its: Fix ITT_entry_size accessor Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 108/171] relay: check return of create_buf_file() properly Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 109/171] ath10k: correct bus type for WCN3990 Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 110/171] bpf, selftests: fix handling of sparse CPU allocations Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 111/171] bpf: run bpf programs with preemption disabled Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 112/171] bpf: fix lockdep false positive in percpu_freelist Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 113/171] bpf: fix potential deadlock in bpf_prog_register Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 114/171] bpf: Fix syscalls stackmap lookup potential deadlock Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 115/171] drm/amdgpu: Implement doorbell self-ring for NBIO 7.4 Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 116/171] drm/amdgpu: fix the incorrect external id for raven series Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 117/171] drm/sun4i: tcon: Prepare and enable TCON channel 0 clock at init Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 118/171] dmaengine: at_xdmac: Fix wrongfull report of a channel as in use Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 119/171] vsock/virtio: fix kernel panic after device hot-unplug Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 120/171] vsock/virtio: reset connected sockets on device removal Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 121/171] dmaengine: dmatest: Abort test in case of mapping error Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 122/171] selftests: netfilter: fix config fragment CONFIG_NF_TABLES_INET Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 123/171] selftests: netfilter: add simple masq/redirect test cases Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 124/171] netfilter: nf_nat: skip nat clash resolution for same-origin entries Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 125/171] s390/qeth: release cmd buffer in error paths Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 126/171] s390/qeth: fix use-after-free in error path Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 127/171] s390/qeth: cancel close_dev work before removing a card Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 128/171] s390/qeth: conclude all event processing before offlining " Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 129/171] perf symbols: Filter out hidden symbols from labels Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 130/171] perf trace: Support multiple "vfs_getname" probes Greg Kroah-Hartman
2019-03-12 17:08 ` Greg Kroah-Hartman [this message]
2019-03-12 17:08 ` [PATCH 4.20 132/171] MIPS: Remove function size check in get_frame_info() Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 133/171] Revert "scsi: libfc: Add WARN_ON() when deleting rports" Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 134/171] i2c: omap: Use noirq system sleep pm ops to idle device for suspend Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 135/171] drm/amdgpu: use spin_lock_irqsave to protect vm_manager.pasid_idr Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 136/171] drm/omap: dsi: Fix crash in DSI debug dumps Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 137/171] drm/omap: dsi: Fix OF platform depopulate Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 138/171] drm/omap: dsi: Hack-fix DSI bus flags Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 139/171] nvme: lock NS list changes while handling command effects Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 140/171] nvme-pci: fix rapid add remove sequence Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 141/171] fs: ratelimit __find_get_block_slow() failure message Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 142/171] qed: Fix EQ full firmware assert Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 143/171] qed: Consider TX tcs while deriving the max num_queues for PF Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 144/171] qede: Fix system crash on configuring channels Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 145/171] blk-iolatency: fix IO hang due to negative inflight counter Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 146/171] nvme-pci: add missing unlock for reset error Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 147/171] netfilter: nf_tables: unbind set in rule from commit path Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 148/171] netfilter: nft_compat: dont use refcount_inc on newly allocated entry Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 149/171] Input: wacom_serial4 - add support for Wacom ArtPad II tablet Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 150/171] Input: elan_i2c - add id for touchpad found in Lenovo s21e-20 Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 151/171] iscsi_ibft: Fix missing break in switch statement Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 152/171] scsi: aacraid: " Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 153/171] x86/PCI: Fixup RTIT_BAR of Intel Denverton Trace Hub Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 154/171] arm64: dts: zcu100-revC: Give wifi some time after power-on Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 155/171] arm64: dts: hikey: " Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 156/171] arm64: dts: hikey: Revert "Enable HS200 mode on eMMC" Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 157/171] ARM: dts: exynos: Fix pinctrl definition for eMMC RTSN line on Odroid X2/U3 Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 158/171] ARM: dts: exynos: Add minimal clkout parameters to Exynos3250 PMU Greg Kroah-Hartman
2019-03-12 17:08 ` [PATCH 4.20 159/171] ARM: dts: exynos: Fix max voltage for buck8 regulator on Odroid XU3/XU4 Greg Kroah-Hartman
2019-03-12 17:09 ` [PATCH 4.20 160/171] drm: disable uncached DMA optimization for ARM and arm64 Greg Kroah-Hartman
2019-03-12 17:09 ` [PATCH 4.20 161/171] media: Revert "media: rc: some events are dropped by userspace" Greg Kroah-Hartman
2019-03-12 17:09 ` [PATCH 4.20 162/171] Revert "PCI/PME: Implement runtime PM callbacks" Greg Kroah-Hartman
2019-03-12 17:09 ` [PATCH 4.20 163/171] sk_msg: Always cancel strp work before freeing the psock Greg Kroah-Hartman
2019-03-12 17:09 ` [PATCH 4.20 164/171] bpf: Stop the psock parser before canceling its work Greg Kroah-Hartman
2019-03-12 17:09 ` [PATCH 4.20 165/171] gfs2: Fix missed wakeups in find_insert_glock Greg Kroah-Hartman
2019-03-12 17:09 ` [PATCH 4.20 166/171] staging: erofs: keep corrupted fs from crashing kernel in erofs_namei() Greg Kroah-Hartman
2019-03-12 17:09 ` [PATCH 4.20 167/171] ath9k: Avoid OF no-EEPROM quirks without qca,no-eeprom Greg Kroah-Hartman
2019-03-12 17:09 ` [PATCH 4.20 168/171] perf/x86/intel: Make cpuc allocations consistent Greg Kroah-Hartman
2019-03-12 17:09 ` [PATCH 4.20 169/171] perf/x86/intel: Generalize dynamic constraint creation Greg Kroah-Hartman
2019-03-12 17:09 ` [PATCH 4.20 170/171] x86: Add TSX Force Abort CPUID/MSR Greg Kroah-Hartman
2019-03-12 17:09 ` [PATCH 4.20 171/171] perf/x86/intel: Implement support for TSX Force Abort Greg Kroah-Hartman
2019-03-13 11:54 ` [PATCH 4.20 000/171] 4.20.16-stable review Naresh Kamboju
2019-03-13 20:56   ` Greg Kroah-Hartman
2019-03-13 17:36 ` Jon Hunter
2019-03-13 20:56   ` Greg Kroah-Hartman
2019-03-13 20:35 ` Guenter Roeck

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=20190312170359.012142566@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=Steven.Hill@cavium.com \
    --cc=ambrosehua@gmail.com \
    --cc=chenhc@lemote.com \
    --cc=huangpei@loongson.cn \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@linux-mips.org \
    --cc=lixuefeng@loongson.cn \
    --cc=paul.burton@mips.com \
    --cc=ralf@linux-mips.org \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=wuzhangjin@gmail.com \
    --cc=xuchenghua@loongson.cn \
    --cc=zhangfx@lemote.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).