All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: yuan linyu <yuanlinyu@honor.com>,
	Alexander Potapenko <glider@google.com>,
	Marco Elver <elver@google.com>,
	Dmitry Vyukov <dvyukov@google.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Huacai Chen <chenhuacai@kernel.org>,
	WANG Xuerui <kernel@xen0n.name>,
	kasan-dev@googlegroups.com, loongarch@lists.linux.dev
Cc: oe-kbuild-all@lists.linux.dev,
	Linux Memory Management List <linux-mm@kvack.org>,
	linux-kernel@vger.kernel.org, yuan linyu <yuanlinyu@honor.com>
Subject: Re: [PATCH v2 1/2] LoongArch: kfence: avoid use CONFIG_KFENCE_NUM_OBJECTS
Date: Sat, 20 Dec 2025 22:34:10 +0800	[thread overview]
Message-ID: <202512202213.B6MRZ7tt-lkp@intel.com> (raw)
In-Reply-To: <20251218063916.1433615-2-yuanlinyu@honor.com>

Hi yuan,

kernel test robot noticed the following build errors:

[auto build test ERROR on akpm-mm/mm-everything]
[also build test ERROR on drm-misc/drm-misc-next linus/master v6.19-rc1 next-20251219]
[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#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/yuan-linyu/LoongArch-kfence-avoid-use-CONFIG_KFENCE_NUM_OBJECTS/20251218-144322
base:   https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
patch link:    https://lore.kernel.org/r/20251218063916.1433615-2-yuanlinyu%40honor.com
patch subject: [PATCH v2 1/2] LoongArch: kfence: avoid use CONFIG_KFENCE_NUM_OBJECTS
config: loongarch-randconfig-002-20251220 (https://download.01.org/0day-ci/archive/20251220/202512202213.B6MRZ7tt-lkp@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 15.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251220/202512202213.B6MRZ7tt-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202512202213.B6MRZ7tt-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

   In file included from arch/loongarch/include/asm/pgtable.h:13,
                    from include/linux/pgtable.h:6,
                    from include/linux/mm.h:31,
                    from arch/loongarch/kernel/asm-offsets.c:11:
>> include/linux/kfence.h:231:49: warning: 'struct kmem_cache' declared inside parameter list will not be visible outside of this definition or declaration
     231 | static inline void kfence_shutdown_cache(struct kmem_cache *s) { }
         |                                                 ^~~~~~~~~~
   include/linux/kfence.h:232:41: warning: 'struct kmem_cache' declared inside parameter list will not be visible outside of this definition or declaration
     232 | static inline void *kfence_alloc(struct kmem_cache *s, size_t size, gfp_t flags) { return NULL; }
         |                                         ^~~~~~~~~~
>> include/linux/kfence.h:245:86: warning: 'struct slab' declared inside parameter list will not be visible outside of this definition or declaration
     245 | static inline bool __kfence_obj_info(struct kmem_obj_info *kpp, void *object, struct slab *slab)
         |                                                                                      ^~~~
   In file included from include/linux/pgtable.h:17,
                    from include/linux/mm.h:31,
                    from include/linux/kfence.h:12,
                    from arch/loongarch/include/asm/pgtable.h:13,
                    from arch/loongarch/include/asm/uaccess.h:17,
                    from include/linux/uaccess.h:13,
                    from include/linux/sched/task.h:13,
                    from include/linux/sched/signal.h:9,
                    from kernel/sched/sched.h:17,
                    from kernel/sched/rq-offsets.c:5:
   include/asm-generic/pgtable_uffd.h:27:40: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
      27 | static __always_inline int pmd_uffd_wp(pmd_t pmd)
         |                                        ^~~~~
         |                                        pgd_t
   include/asm-generic/pgtable_uffd.h:37:24: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
      37 | static __always_inline pmd_t pmd_mkuffd_wp(pmd_t pmd)
         |                        ^~~~~
         |                        pgd_t
   include/asm-generic/pgtable_uffd.h:37:44: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
      37 | static __always_inline pmd_t pmd_mkuffd_wp(pmd_t pmd)
         |                                            ^~~~~
         |                                            pgd_t
   include/asm-generic/pgtable_uffd.h:47:24: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
      47 | static __always_inline pmd_t pmd_clear_uffd_wp(pmd_t pmd)
         |                        ^~~~~
         |                        pgd_t
   include/asm-generic/pgtable_uffd.h:47:48: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
      47 | static __always_inline pmd_t pmd_clear_uffd_wp(pmd_t pmd)
         |                                                ^~~~~
         |                                                pgd_t
   include/asm-generic/pgtable_uffd.h:67:15: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
      67 | static inline pmd_t pmd_swp_mkuffd_wp(pmd_t pmd)
         |               ^~~~~
         |               pgd_t
   include/asm-generic/pgtable_uffd.h:67:39: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
      67 | static inline pmd_t pmd_swp_mkuffd_wp(pmd_t pmd)
         |                                       ^~~~~
         |                                       pgd_t
   include/asm-generic/pgtable_uffd.h:72:35: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
      72 | static inline int pmd_swp_uffd_wp(pmd_t pmd)
         |                                   ^~~~~
         |                                   pgd_t
   include/asm-generic/pgtable_uffd.h:77:15: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
      77 | static inline pmd_t pmd_swp_clear_uffd_wp(pmd_t pmd)
         |               ^~~~~
         |               pgd_t
   include/asm-generic/pgtable_uffd.h:77:43: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
      77 | static inline pmd_t pmd_swp_clear_uffd_wp(pmd_t pmd)
         |                                           ^~~~~
         |                                           pgd_t
   In file included from include/linux/pgtable.h:18:
   include/linux/page_table_check.h:121:69: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     121 | static inline void page_table_check_pmd_clear(struct mm_struct *mm, pmd_t pmd)
         |                                                                     ^~~~~
         |                                                                     pgd_t
   include/linux/page_table_check.h:125:69: error: unknown type name 'pud_t'; did you mean 'pgd_t'?
     125 | static inline void page_table_check_pud_clear(struct mm_struct *mm, pud_t pud)
         |                                                                     ^~~~~
         |                                                                     pgd_t
   include/linux/page_table_check.h:135:17: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     135 |                 pmd_t *pmdp, pmd_t pmd, unsigned int nr)
         |                 ^~~~~
         |                 pgd_t
   include/linux/page_table_check.h:135:30: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     135 |                 pmd_t *pmdp, pmd_t pmd, unsigned int nr)
         |                              ^~~~~
         |                              pgd_t
   include/linux/page_table_check.h:140:17: error: unknown type name 'pud_t'; did you mean 'pgd_t'?
     140 |                 pud_t *pudp, pud_t pud, unsigned int nr)
         |                 ^~~~~
         |                 pgd_t
   include/linux/page_table_check.h:140:30: error: unknown type name 'pud_t'; did you mean 'pgd_t'?
     140 |                 pud_t *pudp, pud_t pud, unsigned int nr)
         |                              ^~~~~
         |                              pgd_t
   include/linux/page_table_check.h:146:53: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     146 |                                                     pmd_t pmd)
         |                                                     ^~~~~
         |                                                     pgd_t
>> include/linux/pgtable.h:22:2: error: #error CONFIG_PGTABLE_LEVELS is not consistent with __PAGETABLE_{P4D,PUD,PMD}_FOLDED
      22 | #error CONFIG_PGTABLE_LEVELS is not consistent with __PAGETABLE_{P4D,PUD,PMD}_FOLDED
         |  ^~~~~
   include/linux/pgtable.h: In function 'pte_index':
>> include/linux/pgtable.h:69:43: error: 'PTRS_PER_PTE' undeclared (first use in this function)
      69 |         return (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
         |                                           ^~~~~~~~~~~~
   include/linux/pgtable.h:69:43: note: each undeclared identifier is reported only once for each function it appears in
   include/linux/pgtable.h: In function 'pmd_index':
>> include/linux/pgtable.h:75:28: error: 'PMD_SHIFT' undeclared (first use in this function); did you mean 'NMI_SHIFT'?
      75 |         return (address >> PMD_SHIFT) & (PTRS_PER_PMD - 1);
         |                            ^~~~~~~~~
         |                            NMI_SHIFT
>> include/linux/pgtable.h:75:42: error: 'PTRS_PER_PMD' undeclared (first use in this function)
      75 |         return (address >> PMD_SHIFT) & (PTRS_PER_PMD - 1);
         |                                          ^~~~~~~~~~~~
   include/linux/pgtable.h: In function 'pud_index':
>> include/linux/pgtable.h:83:28: error: 'PUD_SHIFT' undeclared (first use in this function); did you mean 'NMI_SHIFT'?
      83 |         return (address >> PUD_SHIFT) & (PTRS_PER_PUD - 1);
         |                            ^~~~~~~~~
         |                            NMI_SHIFT
>> include/linux/pgtable.h:83:42: error: 'PTRS_PER_PUD' undeclared (first use in this function)
      83 |         return (address >> PUD_SHIFT) & (PTRS_PER_PUD - 1);
         |                                          ^~~~~~~~~~~~
   include/linux/pgtable.h: At top level:
>> include/linux/pgtable.h:115:40: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     115 | static inline pte_t *pte_offset_kernel(pmd_t *pmd, unsigned long address)
         |                                        ^~~~~
         |                                        pgd_t
   include/linux/pgtable.h:130:32: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     130 | static inline pte_t *__pte_map(pmd_t *pmd, unsigned long address)
         |                                ^~~~~
         |                                pgd_t
   include/linux/pgtable.h:144:15: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     144 | static inline pmd_t *pmd_offset(pud_t *pud, unsigned long address)
         |               ^~~~~
         |               pgd_t
>> include/linux/pgtable.h:144:33: error: unknown type name 'pud_t'; did you mean 'pgd_t'?
     144 | static inline pmd_t *pmd_offset(pud_t *pud, unsigned long address)
         |                                 ^~~~~
         |                                 pgd_t
   include/linux/pgtable.h:152:15: error: unknown type name 'pud_t'; did you mean 'pgd_t'?
     152 | static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
         |               ^~~~~
         |               pgd_t
>> include/linux/pgtable.h:152:33: error: unknown type name 'p4d_t'; did you mean 'pgd_t'?
     152 | static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
         |                                 ^~~~~
         |                                 pgd_t
   include/linux/pgtable.h: In function 'pgd_offset_pgd':
>> include/linux/pgtable.h:90:32: error: 'PGDIR_SHIFT' undeclared (first use in this function)
      90 | #define pgd_index(a)  (((a) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1))
         |                                ^~~~~~~~~~~
   include/linux/pgtable.h:161:23: note: in expansion of macro 'pgd_index'
     161 |         return (pgd + pgd_index(address));
         |                       ^~~~~~~~~
>> include/linux/pgtable.h:90:48: error: 'PTRS_PER_PGD' undeclared (first use in this function)
      90 | #define pgd_index(a)  (((a) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1))
         |                                                ^~~~~~~~~~~~
   include/linux/pgtable.h:161:23: note: in expansion of macro 'pgd_index'
     161 |         return (pgd + pgd_index(address));
         |                       ^~~~~~~~~
   include/linux/pgtable.h: At top level:
   include/linux/pgtable.h:184:15: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     184 | static inline pmd_t *pmd_off(struct mm_struct *mm, unsigned long va)
         |               ^~~~~
         |               pgd_t
   include/linux/pgtable.h: In function 'pmd_off':
>> include/linux/pgtable.h:148:20: error: implicit declaration of function 'pmd_offset'; did you mean 'pmd_off'? [-Wimplicit-function-declaration]
     148 | #define pmd_offset pmd_offset
         |                    ^~~~~~~~~~
   include/linux/pgtable.h:186:16: note: in expansion of macro 'pmd_offset'
     186 |         return pmd_offset(pud_offset(p4d_offset(pgd_offset(mm, va), va), va), va);
         |                ^~~~~~~~~~
>> include/linux/pgtable.h:156:20: error: implicit declaration of function 'pud_offset'; did you mean 'pmd_off'? [-Wimplicit-function-declaration]
     156 | #define pud_offset pud_offset
         |                    ^~~~~~~~~~
   include/linux/pgtable.h:186:27: note: in expansion of macro 'pud_offset'
     186 |         return pmd_offset(pud_offset(p4d_offset(pgd_offset(mm, va), va), va), va);
         |                           ^~~~~~~~~~
>> include/linux/pgtable.h:186:38: error: implicit declaration of function 'p4d_offset'; did you mean 'pmd_offset'? [-Wimplicit-function-declaration]
     186 |         return pmd_offset(pud_offset(p4d_offset(pgd_offset(mm, va), va), va), va);
         |                                      ^~~~~~~~~~
         |                                      pmd_offset
>> include/linux/pgtable.h:148:20: error: returning 'int' from a function with return type 'int *' makes pointer from integer without a cast [-Wint-conversion]
     148 | #define pmd_offset pmd_offset
         |                    ^
   include/linux/pgtable.h:186:16: note: in expansion of macro 'pmd_offset'
     186 |         return pmd_offset(pud_offset(p4d_offset(pgd_offset(mm, va), va), va), va);
         |                ^~~~~~~~~~
   include/linux/pgtable.h: At top level:
   include/linux/pgtable.h:189:15: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     189 | static inline pmd_t *pmd_off_k(unsigned long va)
         |               ^~~~~
         |               pgd_t
   include/linux/pgtable.h: In function 'pmd_off_k':
>> include/linux/pgtable.h:148:20: error: returning 'int' from a function with return type 'int *' makes pointer from integer without a cast [-Wint-conversion]
     148 | #define pmd_offset pmd_offset
         |                    ^
   include/linux/pgtable.h:191:16: note: in expansion of macro 'pmd_offset'
     191 |         return pmd_offset(pud_offset(p4d_offset(pgd_offset_k(va), va), va), va);
         |                ^~~~~~~~~~
   include/linux/pgtable.h: In function 'virt_to_kpte':
   include/linux/pgtable.h:196:9: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     196 |         pmd_t *pmd = pmd_off_k(vaddr);
         |         ^~~~~
         |         pgd_t
>> include/linux/pgtable.h:198:16: error: implicit declaration of function 'pmd_none' [-Wimplicit-function-declaration]
     198 |         return pmd_none(*pmd) ? NULL : pte_offset_kernel(pmd, vaddr);
         |                ^~~~~~~~
>> include/linux/pgtable.h:119:27: error: implicit declaration of function 'pte_offset_kernel' [-Wimplicit-function-declaration]
     119 | #define pte_offset_kernel pte_offset_kernel
         |                           ^~~~~~~~~~~~~~~~~
   include/linux/pgtable.h:198:40: note: in expansion of macro 'pte_offset_kernel'
     198 |         return pmd_none(*pmd) ? NULL : pte_offset_kernel(pmd, vaddr);
         |                                        ^~~~~~~~~~~~~~~~~
   include/linux/pgtable.h:198:38: error: pointer/integer type mismatch in conditional expression [-Wint-conversion]
     198 |         return pmd_none(*pmd) ? NULL : pte_offset_kernel(pmd, vaddr);
         |                                      ^
   include/linux/pgtable.h: At top level:
   include/linux/pgtable.h:202:29: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     202 | static inline int pmd_young(pmd_t pmd)
         |                             ^~~~~
         |                             pgd_t
   include/linux/pgtable.h:209:29: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     209 | static inline int pmd_dirty(pmd_t pmd)
         |                             ^~~~~
         |                             pgd_t
   In file included from include/linux/shm.h:6,
                    from include/linux/sched.h:23,
                    from include/linux/percpu.h:12,
                    from include/linux/prandom.h:13,
                    from kernel/sched/sched.h:8:
   include/linux/pgtable.h: In function 'pte_advance_pfn':
   include/linux/pgtable.h:404:44: error: 'PFN_PTE_SHIFT' undeclared (first use in this function)
     404 |         return __pte(pte_val(pte) + (nr << PFN_PTE_SHIFT));
         |                                            ^~~~~~~~~~~~~
   arch/loongarch/include/asm/page.h:46:37: note: in definition of macro '__pte'
      46 | #define __pte(x)        ((pte_t) { (x) })
         |                                     ^
   include/linux/pgtable.h: In function 'set_ptes':
   include/linux/pgtable.h:435:17: error: implicit declaration of function 'set_pte'; did you mean 'set_ptes'? [-Wimplicit-function-declaration]
     435 |                 set_pte(ptep, pte);
         |                 ^~~~~~~
         |                 set_ptes
   include/linux/pgtable.h: At top level:
   include/linux/pgtable.h:461:64: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     461 |                                         unsigned long address, pmd_t *pmdp,
         |                                                                ^~~~~
         |                                                                pgd_t
   include/linux/pgtable.h:462:41: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     462 |                                         pmd_t entry, int dirty)
         |                                         ^~~~~
         |                                         pgd_t
   include/linux/pgtable.h:468:64: error: unknown type name 'pud_t'; did you mean 'pgd_t'?
     468 |                                         unsigned long address, pud_t *pudp,
         |                                                                ^~~~~
         |                                                                pgd_t
   include/linux/pgtable.h:469:41: error: unknown type name 'pud_t'; did you mean 'pgd_t'?
     469 |                                         pud_t entry, int dirty)
         |                                         ^~~~~
         |                                         pgd_t
   include/linux/pgtable.h:485:15: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     485 | static inline pmd_t pmdp_get(pmd_t *pmdp)
         |               ^~~~~
         |               pgd_t
   include/linux/pgtable.h:485:30: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     485 | static inline pmd_t pmdp_get(pmd_t *pmdp)
         |                              ^~~~~
         |                              pgd_t
   include/linux/pgtable.h:492:15: error: unknown type name 'pud_t'; did you mean 'pgd_t'?
     492 | static inline pud_t pudp_get(pud_t *pudp)
         |               ^~~~~
         |               pgd_t
   include/linux/pgtable.h:492:30: error: unknown type name 'pud_t'; did you mean 'pgd_t'?
     492 | static inline pud_t pudp_get(pud_t *pudp)
         |                              ^~~~~
         |                              pgd_t
   include/linux/pgtable.h:499:15: error: unknown type name 'p4d_t'; did you mean 'pgd_t'?
     499 | static inline p4d_t p4dp_get(p4d_t *p4dp)
         |               ^~~~~
         |               pgd_t
   include/linux/pgtable.h:499:30: error: unknown type name 'p4d_t'; did you mean 'pgd_t'?
     499 | static inline p4d_t p4dp_get(p4d_t *p4dp)
         |                              ^~~~~
         |                              pgd_t
   include/linux/pgtable.h: In function 'ptep_test_and_clear_young':
   include/linux/pgtable.h:519:14: error: implicit declaration of function 'pte_young' [-Wimplicit-function-declaration]
     519 |         if (!pte_young(pte))
         |              ^~~~~~~~~
   include/linux/pgtable.h:522:55: error: implicit declaration of function 'pte_mkold' [-Wimplicit-function-declaration]
     522 |                 set_pte_at(vma->vm_mm, address, ptep, pte_mkold(pte));
         |                                                       ^~~~~~~~~
   include/linux/pgtable.h:443:66: note: in definition of macro 'set_pte_at'
     443 | #define set_pte_at(mm, addr, ptep, pte) set_ptes(mm, addr, ptep, pte, 1)
         |                                                                  ^~~
   include/linux/pgtable.h:522:55: error: incompatible type for argument 4 of 'set_ptes'
     522 |                 set_pte_at(vma->vm_mm, address, ptep, pte_mkold(pte));
         |                                                       ^~~~~~~~~~~~~~
         |                                                       |
         |                                                       int
   include/linux/pgtable.h:443:66: note: in definition of macro 'set_pte_at'
     443 | #define set_pte_at(mm, addr, ptep, pte) set_ptes(mm, addr, ptep, pte, 1)
         |                                                                  ^~~
   include/linux/pgtable.h:430:36: note: expected 'pte_t' but argument is of type 'int'
     430 |                 pte_t *ptep, pte_t pte, unsigned int nr)
         |                              ~~~~~~^~~
   include/linux/pgtable.h: At top level:
   include/linux/pgtable.h:544:45: error: unknown type name 'pmd_t'; did you mean 'pgd_t'?
     544 |                                             pmd_t *pmdp)
         |                                             ^~~~~


vim +22 include/linux/pgtable.h

fbd71844852c94 include/asm-generic/pgtable.h Ben Hutchings           2011-02-27   19  
c2febafc67734a include/asm-generic/pgtable.h Kiryl Shutsemau         2017-03-09   20  #if 5 - defined(__PAGETABLE_P4D_FOLDED) - defined(__PAGETABLE_PUD_FOLDED) - \
c2febafc67734a include/asm-generic/pgtable.h Kiryl Shutsemau         2017-03-09   21  	defined(__PAGETABLE_PMD_FOLDED) != CONFIG_PGTABLE_LEVELS
c2febafc67734a include/asm-generic/pgtable.h Kiryl Shutsemau         2017-03-09  @22  #error CONFIG_PGTABLE_LEVELS is not consistent with __PAGETABLE_{P4D,PUD,PMD}_FOLDED
235a8f0286d3de include/asm-generic/pgtable.h Kiryl Shutsemau         2015-04-14   23  #endif
235a8f0286d3de include/asm-generic/pgtable.h Kiryl Shutsemau         2015-04-14   24  
6ee8630e02be6d include/asm-generic/pgtable.h Hugh Dickins            2013-04-29   25  /*
6ee8630e02be6d include/asm-generic/pgtable.h Hugh Dickins            2013-04-29   26   * On almost all architectures and configurations, 0 can be used as the
6ee8630e02be6d include/asm-generic/pgtable.h Hugh Dickins            2013-04-29   27   * upper ceiling to free_pgtables(): on many architectures it has the same
6ee8630e02be6d include/asm-generic/pgtable.h Hugh Dickins            2013-04-29   28   * effect as using TASK_SIZE.  However, there is one configuration which
6ee8630e02be6d include/asm-generic/pgtable.h Hugh Dickins            2013-04-29   29   * must impose a more careful limit, to avoid freeing kernel pgtables.
6ee8630e02be6d include/asm-generic/pgtable.h Hugh Dickins            2013-04-29   30   */
6ee8630e02be6d include/asm-generic/pgtable.h Hugh Dickins            2013-04-29   31  #ifndef USER_PGTABLES_CEILING
6ee8630e02be6d include/asm-generic/pgtable.h Hugh Dickins            2013-04-29   32  #define USER_PGTABLES_CEILING	0UL
6ee8630e02be6d include/asm-generic/pgtable.h Hugh Dickins            2013-04-29   33  #endif
fac7757e1fb05b include/linux/pgtable.h       Anshuman Khandual       2021-06-30   34  
fac7757e1fb05b include/linux/pgtable.h       Anshuman Khandual       2021-06-30   35  /*
fac7757e1fb05b include/linux/pgtable.h       Anshuman Khandual       2021-06-30   36   * This defines the first usable user address. Platforms
fac7757e1fb05b include/linux/pgtable.h       Anshuman Khandual       2021-06-30   37   * can override its value with custom FIRST_USER_ADDRESS
fac7757e1fb05b include/linux/pgtable.h       Anshuman Khandual       2021-06-30   38   * defined in their respective <asm/pgtable.h>.
fac7757e1fb05b include/linux/pgtable.h       Anshuman Khandual       2021-06-30   39   */
fac7757e1fb05b include/linux/pgtable.h       Anshuman Khandual       2021-06-30   40  #ifndef FIRST_USER_ADDRESS
fac7757e1fb05b include/linux/pgtable.h       Anshuman Khandual       2021-06-30   41  #define FIRST_USER_ADDRESS	0UL
fac7757e1fb05b include/linux/pgtable.h       Anshuman Khandual       2021-06-30   42  #endif
1c2f7d14d84f76 include/linux/pgtable.h       Anshuman Khandual       2021-06-30   43  
1c2f7d14d84f76 include/linux/pgtable.h       Anshuman Khandual       2021-06-30   44  /*
1c2f7d14d84f76 include/linux/pgtable.h       Anshuman Khandual       2021-06-30   45   * This defines the generic helper for accessing PMD page
1c2f7d14d84f76 include/linux/pgtable.h       Anshuman Khandual       2021-06-30   46   * table page. Although platforms can still override this
1c2f7d14d84f76 include/linux/pgtable.h       Anshuman Khandual       2021-06-30   47   * via their respective <asm/pgtable.h>.
1c2f7d14d84f76 include/linux/pgtable.h       Anshuman Khandual       2021-06-30   48   */
1c2f7d14d84f76 include/linux/pgtable.h       Anshuman Khandual       2021-06-30   49  #ifndef pmd_pgtable
1c2f7d14d84f76 include/linux/pgtable.h       Anshuman Khandual       2021-06-30   50  #define pmd_pgtable(pmd) pmd_page(pmd)
1c2f7d14d84f76 include/linux/pgtable.h       Anshuman Khandual       2021-06-30   51  #endif
6ee8630e02be6d include/asm-generic/pgtable.h Hugh Dickins            2013-04-29   52  
e06d03d5590ae1 include/linux/pgtable.h       Matthew Wilcox (Oracle  2024-03-26   53) #define pmd_folio(pmd) page_folio(pmd_page(pmd))
e06d03d5590ae1 include/linux/pgtable.h       Matthew Wilcox (Oracle  2024-03-26   54) 
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   55  /*
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   56   * A page table page can be thought of an array like this: pXd_t[PTRS_PER_PxD]
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   57   *
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   58   * The pXx_index() functions return the index of the entry in the page
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   59   * table page which would control the given virtual address
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   60   *
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   61   * As these functions may be used by the same code for different levels of
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   62   * the page table folding, they are always available, regardless of
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   63   * CONFIG_PGTABLE_LEVELS value. For the folded levels they simply return 0
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   64   * because in such cases PTRS_PER_PxD equals 1.
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   65   */
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   66  
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   67  static inline unsigned long pte_index(unsigned long address)
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   68  {
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  @69  	return (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   70  }
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   71  
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   72  #ifndef pmd_index
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   73  static inline unsigned long pmd_index(unsigned long address)
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   74  {
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  @75  	return (address >> PMD_SHIFT) & (PTRS_PER_PMD - 1);
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   76  }
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   77  #define pmd_index pmd_index
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   78  #endif
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   79  
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   80  #ifndef pud_index
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   81  static inline unsigned long pud_index(unsigned long address)
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   82  {
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  @83  	return (address >> PUD_SHIFT) & (PTRS_PER_PUD - 1);
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   84  }
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   85  #define pud_index pud_index
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   86  #endif
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   87  
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   88  #ifndef pgd_index
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   89  /* Must be a compile-time constant, so implement it as a macro */
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  @90  #define pgd_index(a)  (((a) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1))
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   91  #endif
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08   92  
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04   93  #ifndef kernel_pte_init
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04   94  static inline void kernel_pte_init(void *addr)
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04   95  {
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04   96  }
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04   97  #define kernel_pte_init kernel_pte_init
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04   98  #endif
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04   99  
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04  100  #ifndef pmd_init
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04  101  static inline void pmd_init(void *addr)
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04  102  {
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04  103  }
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04  104  #define pmd_init pmd_init
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04  105  #endif
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04  106  
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04  107  #ifndef pud_init
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04  108  static inline void pud_init(void *addr)
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04  109  {
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04  110  }
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04  111  #define pud_init pud_init
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04  112  #endif
7269ed4af34418 include/linux/pgtable.h       Bibo Mao                2024-11-04  113  
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  114  #ifndef pte_offset_kernel
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08 @115  static inline pte_t *pte_offset_kernel(pmd_t *pmd, unsigned long address)
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  116  {
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  117  	return (pte_t *)pmd_page_vaddr(*pmd) + pte_index(address);
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  118  }
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08 @119  #define pte_offset_kernel pte_offset_kernel
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  120  #endif
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  121  
0d940a9b270b92 include/linux/pgtable.h       Hugh Dickins            2023-06-08  122  #ifdef CONFIG_HIGHPTE
0d940a9b270b92 include/linux/pgtable.h       Hugh Dickins            2023-06-08  123  #define __pte_map(pmd, address) \
0d940a9b270b92 include/linux/pgtable.h       Hugh Dickins            2023-06-08  124  	((pte_t *)kmap_local_page(pmd_page(*(pmd))) + pte_index((address)))
0d940a9b270b92 include/linux/pgtable.h       Hugh Dickins            2023-06-08  125  #define pte_unmap(pte)	do {	\
0d940a9b270b92 include/linux/pgtable.h       Hugh Dickins            2023-06-08  126  	kunmap_local((pte));	\
a349d72fd9efc8 include/linux/pgtable.h       Hugh Dickins            2023-07-11  127  	rcu_read_unlock();	\
0d940a9b270b92 include/linux/pgtable.h       Hugh Dickins            2023-06-08  128  } while (0)
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  129  #else
0d940a9b270b92 include/linux/pgtable.h       Hugh Dickins            2023-06-08  130  static inline pte_t *__pte_map(pmd_t *pmd, unsigned long address)
0d940a9b270b92 include/linux/pgtable.h       Hugh Dickins            2023-06-08  131  {
0d940a9b270b92 include/linux/pgtable.h       Hugh Dickins            2023-06-08  132  	return pte_offset_kernel(pmd, address);
0d940a9b270b92 include/linux/pgtable.h       Hugh Dickins            2023-06-08  133  }
0d940a9b270b92 include/linux/pgtable.h       Hugh Dickins            2023-06-08  134  static inline void pte_unmap(pte_t *pte)
0d940a9b270b92 include/linux/pgtable.h       Hugh Dickins            2023-06-08  135  {
a349d72fd9efc8 include/linux/pgtable.h       Hugh Dickins            2023-07-11  136  	rcu_read_unlock();
0d940a9b270b92 include/linux/pgtable.h       Hugh Dickins            2023-06-08  137  }
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  138  #endif
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  139  
13cf577e6b66a1 include/linux/pgtable.h       Hugh Dickins            2023-07-11  140  void pte_free_defer(struct mm_struct *mm, pgtable_t pgtable);
13cf577e6b66a1 include/linux/pgtable.h       Hugh Dickins            2023-07-11  141  
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  142  /* Find an entry in the second-level page table.. */
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  143  #ifndef pmd_offset
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08 @144  static inline pmd_t *pmd_offset(pud_t *pud, unsigned long address)
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  145  {
9cf6fa24584431 include/linux/pgtable.h       Aneesh Kumar K.V        2021-07-07  146  	return pud_pgtable(*pud) + pmd_index(address);
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  147  }
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08 @148  #define pmd_offset pmd_offset
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  149  #endif
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  150  
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  151  #ifndef pud_offset
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08 @152  static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  153  {
dc4875f0e791de include/linux/pgtable.h       Aneesh Kumar K.V        2021-07-07  154  	return p4d_pgtable(*p4d) + pud_index(address);
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  155  }
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08 @156  #define pud_offset pud_offset
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  157  #endif
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  158  
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  159  static inline pgd_t *pgd_offset_pgd(pgd_t *pgd, unsigned long address)
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  160  {
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  161  	return (pgd + pgd_index(address));
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  162  };
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  163  
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  164  /*
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  165   * a shortcut to get a pgd_t in a given mm
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  166   */
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  167  #ifndef pgd_offset
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  168  #define pgd_offset(mm, address)		pgd_offset_pgd((mm)->pgd, (address))
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  169  #endif
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  170  
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  171  /*
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  172   * a shortcut which implies the use of the kernel's pgd, instead
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  173   * of a process's
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  174   */
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  175  #define pgd_offset_k(address)		pgd_offset(&init_mm, (address))
974b9b2c68f3d3 include/linux/pgtable.h       Mike Rapoport           2020-06-08  176  
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  177  /*
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  178   * In many cases it is known that a virtual address is mapped at PMD or PTE
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  179   * level, so instead of traversing all the page table levels, we can get a
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  180   * pointer to the PMD entry in user or kernel page table or translate a virtual
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  181   * address to the pointer in the PTE in the kernel page tables with simple
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  182   * helpers.
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  183   */
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  184  static inline pmd_t *pmd_off(struct mm_struct *mm, unsigned long va)
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  185  {
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08 @186  	return pmd_offset(pud_offset(p4d_offset(pgd_offset(mm, va), va), va), va);
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  187  }
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  188  
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  189  static inline pmd_t *pmd_off_k(unsigned long va)
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  190  {
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  191  	return pmd_offset(pud_offset(p4d_offset(pgd_offset_k(va), va), va), va);
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  192  }
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  193  
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  194  static inline pte_t *virt_to_kpte(unsigned long vaddr)
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  195  {
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  196  	pmd_t *pmd = pmd_off_k(vaddr);
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  197  
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08 @198  	return pmd_none(*pmd) ? NULL : pte_offset_kernel(pmd, vaddr);
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  199  }
e05c7b1f2bc4b7 include/linux/pgtable.h       Mike Rapoport           2020-06-08  200  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


  parent reply	other threads:[~2025-12-20 14:35 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-18  6:39 [PATCH v2 0/2] kfence: allow change objects number yuan linyu
2025-12-18  6:39 ` [PATCH v2 1/2] LoongArch: kfence: avoid use CONFIG_KFENCE_NUM_OBJECTS yuan linyu
2025-12-19  2:13   ` Huacai Chen
2025-12-20  5:43     ` Enze Li
2025-12-22  9:16       ` yuanlinyu
2025-12-22  9:37         ` Enze Li
2025-12-20 14:34   ` kernel test robot [this message]
2025-12-18  6:39 ` [PATCH v2 2/2] kfence: allow change number of object by early parameter yuan linyu
2025-12-18  8:56   ` Marco Elver
2025-12-18 10:18     ` yuanlinyu
2025-12-18 10:23       ` Marco Elver
2025-12-19  4:36         ` yuanlinyu
2025-12-29  4:01         ` yuanlinyu
2025-12-20 14:59   ` kernel test robot

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=202512202213.B6MRZ7tt-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=chenhuacai@kernel.org \
    --cc=dvyukov@google.com \
    --cc=elver@google.com \
    --cc=glider@google.com \
    --cc=kasan-dev@googlegroups.com \
    --cc=kernel@xen0n.name \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=loongarch@lists.linux.dev \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=yuanlinyu@honor.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.