[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <202512202213.B6MRZ7tt-lkp@intel.com>
Date: Sat, 20 Dec 2025 22:34:10 +0800
From: kernel test robot <lkp@...el.com>
To: yuan linyu <yuanlinyu@...or.com>,
Alexander Potapenko <glider@...gle.com>,
Marco Elver <elver@...gle.com>, Dmitry Vyukov <dvyukov@...gle.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Huacai Chen <chenhuacai@...nel.org>,
WANG Xuerui <kernel@...0n.name>, kasan-dev@...glegroups.com,
loongarch@...ts.linux.dev
Cc: oe-kbuild-all@...ts.linux.dev,
Linux Memory Management List <linux-mm@...ck.org>,
linux-kernel@...r.kernel.org, yuan linyu <yuanlinyu@...or.com>
Subject: Re: [PATCH v2 1/2] LoongArch: kfence: avoid use
CONFIG_KFENCE_NUM_OBJECTS
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@...el.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
Powered by blists - more mailing lists