From: kernel test robot <lkp@intel.com>
To: Nicholas Piggin <npiggin@gmail.com>,
linux-mm@kvack.org, Andrew Morton <akpm@linux-foundation.org>
Cc: linux-arch@vger.kernel.org, kbuild-all@lists.01.org,
Linux Memory Management List <linux-mm@kvack.org>,
linux-kernel@vger.kernel.org, Nicholas Piggin <npiggin@gmail.com>,
Christoph Hellwig <hch@infradead.org>,
clang-built-linux@googlegroups.com,
Jonathan Cameron <Jonathan.Cameron@Huawei.com>,
linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v11 05/13] mm: HUGE_VMAP arch support cleanup
Date: Tue, 26 Jan 2021 21:26:38 +0800 [thread overview]
Message-ID: <202101262135.iGGzi8oa-lkp@intel.com> (raw)
In-Reply-To: <20210126044510.2491820-6-npiggin@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 13953 bytes --]
Hi Nicholas,
I love your patch! Yet something to improve:
[auto build test ERROR on powerpc/next]
[also build test ERROR on arm64/for-next/core v5.11-rc5 next-20210125]
[cannot apply to hnaz-linux-mm/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Nicholas-Piggin/huge-vmalloc-mappings/20210126-143141
base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
config: x86_64-randconfig-a002-20210126 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 925ae8c790c7e354f12ec14a6cac6aa49fc75b29)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# https://github.com/0day-ci/linux/commit/e43d3c665212ea34b790ab8d150bbde9d42e35b8
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Nicholas-Piggin/huge-vmalloc-mappings/20210126-143141
git checkout e43d3c665212ea34b790ab8d150bbde9d42e35b8
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
>> mm/debug_vm_pgtable.c:221:7: error: implicit declaration of function 'arch_ioremap_pmd_supported' [-Werror,-Wimplicit-function-declaration]
if (!arch_ioremap_pmd_supported())
^
mm/debug_vm_pgtable.c:221:7: note: did you mean 'arch_vmap_pmd_supported'?
arch/x86/include/asm/vmalloc.h:10:6: note: 'arch_vmap_pmd_supported' declared here
bool arch_vmap_pmd_supported(pgprot_t prot);
^
>> mm/debug_vm_pgtable.c:343:7: error: implicit declaration of function 'arch_ioremap_pud_supported' [-Werror,-Wimplicit-function-declaration]
if (!arch_ioremap_pud_supported())
^
mm/debug_vm_pgtable.c:343:7: note: did you mean 'arch_vmap_pud_supported'?
arch/x86/include/asm/vmalloc.h:9:6: note: 'arch_vmap_pud_supported' declared here
bool arch_vmap_pud_supported(pgprot_t prot);
^
2 errors generated.
vim +/arch_ioremap_pmd_supported +221 mm/debug_vm_pgtable.c
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 215
85a144632dcc71 Aneesh Kumar K.V 2020-10-15 216 #ifdef CONFIG_HAVE_ARCH_HUGE_VMAP
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 217 static void __init pmd_huge_tests(pmd_t *pmdp, unsigned long pfn, pgprot_t prot)
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 218 {
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 219 pmd_t pmd;
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 220
85a144632dcc71 Aneesh Kumar K.V 2020-10-15 @221 if (!arch_ioremap_pmd_supported())
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 222 return;
6315df41afccf1 Anshuman Khandual 2020-08-06 223
6315df41afccf1 Anshuman Khandual 2020-08-06 224 pr_debug("Validating PMD huge\n");
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 225 /*
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 226 * X86 defined pmd_set_huge() verifies that the given
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 227 * PMD is not a populated non-leaf entry.
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 228 */
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 229 WRITE_ONCE(*pmdp, __pmd(0));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 230 WARN_ON(!pmd_set_huge(pmdp, __pfn_to_phys(pfn), prot));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 231 WARN_ON(!pmd_clear_huge(pmdp));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 232 pmd = READ_ONCE(*pmdp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 233 WARN_ON(!pmd_none(pmd));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 234 }
85a144632dcc71 Aneesh Kumar K.V 2020-10-15 235 #else /* CONFIG_HAVE_ARCH_HUGE_VMAP */
85a144632dcc71 Aneesh Kumar K.V 2020-10-15 236 static void __init pmd_huge_tests(pmd_t *pmdp, unsigned long pfn, pgprot_t prot) { }
85a144632dcc71 Aneesh Kumar K.V 2020-10-15 237 #endif /* CONFIG_HAVE_ARCH_HUGE_VMAP */
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 238
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 239 static void __init pmd_savedwrite_tests(unsigned long pfn, pgprot_t prot)
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 240 {
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 241 pmd_t pmd = pfn_pmd(pfn, prot);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 242
4200605b1f80e4 Aneesh Kumar K.V 2020-10-15 243 if (!IS_ENABLED(CONFIG_NUMA_BALANCING))
4200605b1f80e4 Aneesh Kumar K.V 2020-10-15 244 return;
4200605b1f80e4 Aneesh Kumar K.V 2020-10-15 245
6315df41afccf1 Anshuman Khandual 2020-08-06 246 pr_debug("Validating PMD saved write\n");
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 247 WARN_ON(!pmd_savedwrite(pmd_mk_savedwrite(pmd_clear_savedwrite(pmd))));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 248 WARN_ON(pmd_savedwrite(pmd_clear_savedwrite(pmd_mk_savedwrite(pmd))));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 249 }
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 250
399145f9eb6c67 Anshuman Khandual 2020-06-04 251 #ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD
399145f9eb6c67 Anshuman Khandual 2020-06-04 252 static void __init pud_basic_tests(unsigned long pfn, pgprot_t prot)
399145f9eb6c67 Anshuman Khandual 2020-06-04 253 {
399145f9eb6c67 Anshuman Khandual 2020-06-04 254 pud_t pud = pfn_pud(pfn, prot);
399145f9eb6c67 Anshuman Khandual 2020-06-04 255
787d563b8642f3 Aneesh Kumar K.V 2020-06-10 256 if (!has_transparent_hugepage())
787d563b8642f3 Aneesh Kumar K.V 2020-06-10 257 return;
787d563b8642f3 Aneesh Kumar K.V 2020-06-10 258
6315df41afccf1 Anshuman Khandual 2020-08-06 259 pr_debug("Validating PUD basic\n");
399145f9eb6c67 Anshuman Khandual 2020-06-04 260 WARN_ON(!pud_same(pud, pud));
399145f9eb6c67 Anshuman Khandual 2020-06-04 261 WARN_ON(!pud_young(pud_mkyoung(pud_mkold(pud))));
399145f9eb6c67 Anshuman Khandual 2020-06-04 262 WARN_ON(!pud_write(pud_mkwrite(pud_wrprotect(pud))));
399145f9eb6c67 Anshuman Khandual 2020-06-04 263 WARN_ON(pud_write(pud_wrprotect(pud_mkwrite(pud))));
399145f9eb6c67 Anshuman Khandual 2020-06-04 264 WARN_ON(pud_young(pud_mkold(pud_mkyoung(pud))));
399145f9eb6c67 Anshuman Khandual 2020-06-04 265
399145f9eb6c67 Anshuman Khandual 2020-06-04 266 if (mm_pmd_folded(mm))
399145f9eb6c67 Anshuman Khandual 2020-06-04 267 return;
399145f9eb6c67 Anshuman Khandual 2020-06-04 268
399145f9eb6c67 Anshuman Khandual 2020-06-04 269 /*
399145f9eb6c67 Anshuman Khandual 2020-06-04 270 * A huge page does not point to next level page table
399145f9eb6c67 Anshuman Khandual 2020-06-04 271 * entry. Hence this must qualify as pud_bad().
399145f9eb6c67 Anshuman Khandual 2020-06-04 272 */
399145f9eb6c67 Anshuman Khandual 2020-06-04 273 WARN_ON(!pud_bad(pud_mkhuge(pud)));
399145f9eb6c67 Anshuman Khandual 2020-06-04 274 }
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 275
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 276 static void __init pud_advanced_tests(struct mm_struct *mm,
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 277 struct vm_area_struct *vma, pud_t *pudp,
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 278 unsigned long pfn, unsigned long vaddr,
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 279 pgprot_t prot)
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 280 {
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 281 pud_t pud = pfn_pud(pfn, prot);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 282
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 283 if (!has_transparent_hugepage())
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 284 return;
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 285
6315df41afccf1 Anshuman Khandual 2020-08-06 286 pr_debug("Validating PUD advanced\n");
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 287 /* Align the address wrt HPAGE_PUD_SIZE */
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 288 vaddr = (vaddr & HPAGE_PUD_MASK) + HPAGE_PUD_SIZE;
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 289
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 290 set_pud_at(mm, vaddr, pudp, pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 291 pudp_set_wrprotect(mm, vaddr, pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 292 pud = READ_ONCE(*pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 293 WARN_ON(pud_write(pud));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 294
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 295 #ifndef __PAGETABLE_PMD_FOLDED
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 296 pudp_huge_get_and_clear(mm, vaddr, pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 297 pud = READ_ONCE(*pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 298 WARN_ON(!pud_none(pud));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 299 #endif /* __PAGETABLE_PMD_FOLDED */
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 300 pud = pfn_pud(pfn, prot);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 301 pud = pud_wrprotect(pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 302 pud = pud_mkclean(pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 303 set_pud_at(mm, vaddr, pudp, pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 304 pud = pud_mkwrite(pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 305 pud = pud_mkdirty(pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 306 pudp_set_access_flags(vma, vaddr, pudp, pud, 1);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 307 pud = READ_ONCE(*pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 308 WARN_ON(!(pud_write(pud) && pud_dirty(pud)));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 309
c3824e18d3f394 Aneesh Kumar K.V 2020-10-15 310 #ifndef __PAGETABLE_PMD_FOLDED
c3824e18d3f394 Aneesh Kumar K.V 2020-10-15 311 pudp_huge_get_and_clear_full(mm, vaddr, pudp, 1);
c3824e18d3f394 Aneesh Kumar K.V 2020-10-15 312 pud = READ_ONCE(*pudp);
c3824e18d3f394 Aneesh Kumar K.V 2020-10-15 313 WARN_ON(!pud_none(pud));
c3824e18d3f394 Aneesh Kumar K.V 2020-10-15 314 #endif /* __PAGETABLE_PMD_FOLDED */
c3824e18d3f394 Aneesh Kumar K.V 2020-10-15 315
c3824e18d3f394 Aneesh Kumar K.V 2020-10-15 316 pud = pfn_pud(pfn, prot);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 317 pud = pud_mkyoung(pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 318 set_pud_at(mm, vaddr, pudp, pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 319 pudp_test_and_clear_young(vma, vaddr, pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 320 pud = READ_ONCE(*pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 321 WARN_ON(pud_young(pud));
13af0506303323 Aneesh Kumar K.V 2020-10-15 322
13af0506303323 Aneesh Kumar K.V 2020-10-15 323 pudp_huge_get_and_clear(mm, vaddr, pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 324 }
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 325
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 326 static void __init pud_leaf_tests(unsigned long pfn, pgprot_t prot)
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 327 {
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 328 pud_t pud = pfn_pud(pfn, prot);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 329
6315df41afccf1 Anshuman Khandual 2020-08-06 330 pr_debug("Validating PUD leaf\n");
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 331 /*
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 332 * PUD based THP is a leaf entry.
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 333 */
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 334 pud = pud_mkhuge(pud);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 335 WARN_ON(!pud_leaf(pud));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 336 }
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 337
85a144632dcc71 Aneesh Kumar K.V 2020-10-15 338 #ifdef CONFIG_HAVE_ARCH_HUGE_VMAP
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 339 static void __init pud_huge_tests(pud_t *pudp, unsigned long pfn, pgprot_t prot)
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 340 {
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 341 pud_t pud;
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 342
85a144632dcc71 Aneesh Kumar K.V 2020-10-15 @343 if (!arch_ioremap_pud_supported())
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 344 return;
6315df41afccf1 Anshuman Khandual 2020-08-06 345
6315df41afccf1 Anshuman Khandual 2020-08-06 346 pr_debug("Validating PUD huge\n");
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 347 /*
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 348 * X86 defined pud_set_huge() verifies that the given
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 349 * PUD is not a populated non-leaf entry.
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 350 */
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 351 WRITE_ONCE(*pudp, __pud(0));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 352 WARN_ON(!pud_set_huge(pudp, __pfn_to_phys(pfn), prot));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 353 WARN_ON(!pud_clear_huge(pudp));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 354 pud = READ_ONCE(*pudp);
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 355 WARN_ON(!pud_none(pud));
a5c3b9ffb0f404 Anshuman Khandual 2020-08-06 356 }
85a144632dcc71 Aneesh Kumar K.V 2020-10-15 357 #else /* !CONFIG_HAVE_ARCH_HUGE_VMAP */
85a144632dcc71 Aneesh Kumar K.V 2020-10-15 358 static void __init pud_huge_tests(pud_t *pudp, unsigned long pfn, pgprot_t prot) { }
85a144632dcc71 Aneesh Kumar K.V 2020-10-15 359 #endif /* !CONFIG_HAVE_ARCH_HUGE_VMAP */
85a144632dcc71 Aneesh Kumar K.V 2020-10-15 360
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 42992 bytes --]
next prev parent reply other threads:[~2021-01-26 13:34 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-26 4:44 [PATCH v11 00/13] huge vmalloc mappings Nicholas Piggin
2021-01-26 4:44 ` [PATCH v11 01/13] mm/vmalloc: fix HUGE_VMAP regression by enabling huge pages in vmalloc_to_page Nicholas Piggin
2021-01-26 6:40 ` Miaohe Lin
2021-01-28 3:13 ` Ding Tianhong
2021-02-02 10:22 ` Nicholas Piggin
2021-01-26 4:44 ` [PATCH v11 02/13] mm: apply_to_pte_range warn and fail if a large pte is encountered Nicholas Piggin
2021-01-26 6:49 ` Miaohe Lin
2021-01-26 4:45 ` [PATCH v11 03/13] mm/vmalloc: rename vmap_*_range vmap_pages_*_range Nicholas Piggin
2021-01-27 2:10 ` Miaohe Lin
2021-01-26 4:45 ` [PATCH v11 04/13] mm/ioremap: rename ioremap_*_range to vmap_*_range Nicholas Piggin
2021-01-26 6:40 ` Christoph Hellwig
2021-01-28 2:38 ` Miaohe Lin
2021-01-26 4:45 ` [PATCH v11 05/13] mm: HUGE_VMAP arch support cleanup Nicholas Piggin
2021-01-26 6:07 ` Ding Tianhong
2021-01-26 13:26 ` kernel test robot [this message]
2021-01-27 5:26 ` kernel test robot
2021-01-26 4:45 ` [PATCH v11 06/13] powerpc: inline huge vmap supported functions Nicholas Piggin
2021-01-26 4:45 ` [PATCH v11 07/13] arm64: " Nicholas Piggin
2021-01-26 4:45 ` [PATCH v11 08/13] x86: " Nicholas Piggin
2021-01-26 4:45 ` [PATCH v11 09/13] mm/vmalloc: provide fallback arch huge vmap support functions Nicholas Piggin
2021-01-26 4:45 ` [PATCH v11 10/13] mm: Move vmap_range from mm/ioremap.c to mm/vmalloc.c Nicholas Piggin
2021-01-26 4:45 ` [PATCH v11 11/13] mm/vmalloc: add vmap_range_noflush variant Nicholas Piggin
2021-01-26 4:45 ` [PATCH v11 12/13] mm/vmalloc: Hugepage vmalloc mappings Nicholas Piggin
2021-01-26 6:59 ` Ding Tianhong
2021-01-26 9:47 ` Nicholas Piggin
2021-01-26 11:48 ` Ding Tianhong
2021-01-26 4:45 ` [PATCH v11 13/13] powerpc/64s/radix: Enable huge " Nicholas Piggin
2021-01-27 10:26 ` Michael Ellerman
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=202101262135.iGGzi8oa-lkp@intel.com \
--to=lkp@intel.com \
--cc=Jonathan.Cameron@Huawei.com \
--cc=akpm@linux-foundation.org \
--cc=clang-built-linux@googlegroups.com \
--cc=hch@infradead.org \
--cc=kbuild-all@lists.01.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=npiggin@gmail.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).