[arm-integrator:kernel-in-vmalloc-v5.18-rc1 26/31] arch/riscv/include/asm/pgtable-64.h:56:26: error: 'PAGE_SIZE' undeclared; did you mean 'P4D_SIZE'?
From: kernel test robot
Date: Thu Jun 02 2022 - 13:07:49 EST
tree: https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator.git kernel-in-vmalloc-v5.18-rc1
head: 8e0ac1b6b44d1c62420ad92b2a1cbc106a00f3de
commit: 969a734e01b9cf090fce853d9d706455e5a9cdf1 [26/31] riscv: Make virt_to_pfn() a static inline
config: riscv-allnoconfig (https://download.01.org/0day-ci/archive/20220603/202206030040.Q0KUBAnr-lkp@xxxxxxxxx/config)
compiler: riscv64-linux-gcc (GCC) 11.3.0
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
# https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator.git/commit/?id=969a734e01b9cf090fce853d9d706455e5a9cdf1
git remote add arm-integrator https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator.git
git fetch --no-tags arm-integrator kernel-in-vmalloc-v5.18-rc1
git checkout 969a734e01b9cf090fce853d9d706455e5a9cdf1
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=riscv prepare
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@xxxxxxxxx>
All error/warnings (new ones prefixed by >>):
In file included from include/linux/rcupdate.h:28,
from include/linux/rbtree.h:24,
from include/linux/mm_types.h:11,
from arch/riscv/include/asm/tlbflush.h:10,
from arch/riscv/include/asm/pgtable.h:108,
from arch/riscv/include/asm/page.h:14,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:60,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:55,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/bottom_half.h: In function '__local_bh_disable_ip':
>> include/linux/bottom_half.h:13:9: error: implicit declaration of function 'preempt_count_add'; did you mean 'refcount_add'? [-Werror=implicit-function-declaration]
13 | preempt_count_add(cnt);
| ^~~~~~~~~~~~~~~~~
| refcount_add
In file included from include/linux/rbtree.h:24,
from include/linux/mm_types.h:11,
from arch/riscv/include/asm/tlbflush.h:10,
from arch/riscv/include/asm/pgtable.h:108,
from arch/riscv/include/asm/page.h:14,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:60,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:55,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/rcupdate.h: In function '__rcu_read_lock':
include/linux/rcupdate.h:68:9: error: implicit declaration of function 'preempt_disable' [-Werror=implicit-function-declaration]
68 | preempt_disable();
| ^~~~~~~~~~~~~~~
include/linux/rcupdate.h: In function '__rcu_read_unlock':
include/linux/rcupdate.h:73:9: error: implicit declaration of function 'preempt_enable' [-Werror=implicit-function-declaration]
73 | preempt_enable();
| ^~~~~~~~~~~~~~
In file included from include/linux/rbtree.h:24,
from include/linux/mm_types.h:11,
from arch/riscv/include/asm/tlbflush.h:10,
from arch/riscv/include/asm/pgtable.h:108,
from arch/riscv/include/asm/page.h:14,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:60,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:55,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/rcupdate.h: In function 'rcu_read_lock_sched_held':
>> include/linux/rcupdate.h:299:17: error: implicit declaration of function 'preemptible' [-Werror=implicit-function-declaration]
299 | return !preemptible();
| ^~~~~~~~~~~
include/linux/rcupdate.h: In function 'rcu_read_lock_sched_notrace':
include/linux/rcupdate.h:794:9: error: implicit declaration of function 'preempt_disable_notrace' [-Werror=implicit-function-declaration]
794 | preempt_disable_notrace();
| ^~~~~~~~~~~~~~~~~~~~~~~
include/linux/rcupdate.h: In function 'rcu_read_unlock_sched_notrace':
include/linux/rcupdate.h:816:9: error: implicit declaration of function 'preempt_enable_notrace' [-Werror=implicit-function-declaration]
816 | preempt_enable_notrace();
| ^~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/mm_types.h:19,
from arch/riscv/include/asm/tlbflush.h:10,
from arch/riscv/include/asm/pgtable.h:108,
from arch/riscv/include/asm/page.h:14,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:60,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:55,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/seqlock.h: In function 'write_seqlock':
include/linux/seqlock.h:890:9: error: implicit declaration of function 'spin_lock' [-Werror=implicit-function-declaration]
890 | spin_lock(&sl->lock);
| ^~~~~~~~~
include/linux/seqlock.h: In function 'write_sequnlock':
include/linux/seqlock.h:904:9: error: implicit declaration of function 'spin_unlock' [-Werror=implicit-function-declaration]
904 | spin_unlock(&sl->lock);
| ^~~~~~~~~~~
include/linux/seqlock.h: In function 'write_seqlock_bh':
include/linux/seqlock.h:916:9: error: implicit declaration of function 'spin_lock_bh' [-Werror=implicit-function-declaration]
916 | spin_lock_bh(&sl->lock);
| ^~~~~~~~~~~~
include/linux/seqlock.h: In function 'write_sequnlock_bh':
include/linux/seqlock.h:931:9: error: implicit declaration of function 'spin_unlock_bh' [-Werror=implicit-function-declaration]
931 | spin_unlock_bh(&sl->lock);
| ^~~~~~~~~~~~~~
include/linux/seqlock.h: In function 'write_seqlock_irq':
include/linux/seqlock.h:943:9: error: implicit declaration of function 'spin_lock_irq' [-Werror=implicit-function-declaration]
943 | spin_lock_irq(&sl->lock);
| ^~~~~~~~~~~~~
include/linux/seqlock.h: In function 'write_sequnlock_irq':
>> include/linux/seqlock.h:957:9: error: implicit declaration of function 'spin_unlock_irq'; did you mean 'write_sequnlock_irq'? [-Werror=implicit-function-declaration]
957 | spin_unlock_irq(&sl->lock);
| ^~~~~~~~~~~~~~~
| write_sequnlock_irq
include/linux/seqlock.h: In function '__write_seqlock_irqsave':
>> include/linux/seqlock.h:964:9: error: implicit declaration of function 'spin_lock_irqsave'; did you mean 'arch_local_irq_save'? [-Werror=implicit-function-declaration]
964 | spin_lock_irqsave(&sl->lock, flags);
| ^~~~~~~~~~~~~~~~~
| arch_local_irq_save
include/linux/seqlock.h: In function 'write_sequnlock_irqrestore':
>> include/linux/seqlock.h:995:9: error: implicit declaration of function 'spin_unlock_irqrestore'; did you mean 'write_sequnlock_irqrestore'? [-Werror=implicit-function-declaration]
995 | spin_unlock_irqrestore(&sl->lock, flags);
| ^~~~~~~~~~~~~~~~~~~~~~
| write_sequnlock_irqrestore
In file included from include/linux/mm_types.h:21,
from arch/riscv/include/asm/tlbflush.h:10,
from arch/riscv/include/asm/pgtable.h:108,
from arch/riscv/include/asm/page.h:14,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:60,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:55,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
arch/riscv/include/asm/mmu.h: At top level:
>> arch/riscv/include/asm/mmu.h:25:32: error: unknown type name 'pgd_t'; did you mean 'pid_t'?
25 | void __init create_pgd_mapping(pgd_t *pgdp, uintptr_t va, phys_addr_t pa,
| ^~~~~
| pid_t
arch/riscv/include/asm/mmu.h:26:48: error: unknown type name 'pgprot_t'
26 | phys_addr_t sz, pgprot_t prot);
| ^~~~~~~~
In file included from arch/riscv/include/asm/tlbflush.h:10,
from arch/riscv/include/asm/pgtable.h:108,
from arch/riscv/include/asm/page.h:14,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:60,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:55,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/mm_types.h:151:25: error: unknown type name 'pgtable_t'
151 | pgtable_t pmd_huge_pte; /* protected by page->ptl */
| ^~~~~~~~~
include/linux/mm_types.h:337:6: warning: "PAGE_SIZE" is not defined, evaluates to 0 [-Wundef]
337 | #if (PAGE_SIZE < PAGE_FRAG_CACHE_MAX_SIZE)
| ^~~~~~~~~
In file included from include/vdso/const.h:5,
from include/linux/const.h:4,
from arch/riscv/include/asm/bug.h:10,
from include/linux/bug.h:5,
from include/linux/mmdebug.h:5,
from include/linux/mm.h:6,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/mm_types.h:314:62: warning: "PAGE_MASK" is not defined, evaluates to 0 [-Wundef]
314 | #define PAGE_FRAG_CACHE_MAX_SIZE __ALIGN_MASK(32768, ~PAGE_MASK)
| ^~~~~~~~~
include/uapi/linux/const.h:32:50: note: in definition of macro '__ALIGN_KERNEL_MASK'
32 | #define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask))
| ^~~~
include/linux/mm_types.h:314:41: note: in expansion of macro '__ALIGN_MASK'
314 | #define PAGE_FRAG_CACHE_MAX_SIZE __ALIGN_MASK(32768, ~PAGE_MASK)
| ^~~~~~~~~~~~
include/linux/mm_types.h:337:18: note: in expansion of macro 'PAGE_FRAG_CACHE_MAX_SIZE'
337 | #if (PAGE_SIZE < PAGE_FRAG_CACHE_MAX_SIZE)
| ^~~~~~~~~~~~~~~~~~~~~~~~
include/linux/mm_types.h:314:62: warning: "PAGE_MASK" is not defined, evaluates to 0 [-Wundef]
314 | #define PAGE_FRAG_CACHE_MAX_SIZE __ALIGN_MASK(32768, ~PAGE_MASK)
| ^~~~~~~~~
include/uapi/linux/const.h:32:61: note: in definition of macro '__ALIGN_KERNEL_MASK'
32 | #define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask))
| ^~~~
include/linux/mm_types.h:314:41: note: in expansion of macro '__ALIGN_MASK'
314 | #define PAGE_FRAG_CACHE_MAX_SIZE __ALIGN_MASK(32768, ~PAGE_MASK)
| ^~~~~~~~~~~~
include/linux/mm_types.h:337:18: note: in expansion of macro 'PAGE_FRAG_CACHE_MAX_SIZE'
337 | #if (PAGE_SIZE < PAGE_FRAG_CACHE_MAX_SIZE)
| ^~~~~~~~~~~~~~~~~~~~~~~~
In file included from arch/riscv/include/asm/tlbflush.h:10,
from arch/riscv/include/asm/pgtable.h:108,
from arch/riscv/include/asm/page.h:14,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:60,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:55,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/mm_types.h:421:9: error: unknown type name 'pgprot_t'
421 | pgprot_t vm_page_prot;
| ^~~~~~~~
include/linux/mm_types.h:495:17: error: unknown type name 'pgd_t'
495 | pgd_t * pgd;
| ^~~~~
In file included from arch/riscv/include/asm/pgtable.h:112,
from arch/riscv/include/asm/page.h:14,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:60,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:55,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
arch/riscv/include/asm/pgtable-64.h:99:48: error: unknown type name 'pgprot_t'
99 | static inline pud_t pfn_pud(unsigned long pfn, pgprot_t prot)
| ^~~~~~~~
arch/riscv/include/asm/pgtable-64.h: In function 'pud_pgtable':
arch/riscv/include/asm/pgtable-64.h:111:25: error: implicit declaration of function 'pfn_to_virt' [-Werror=implicit-function-declaration]
111 | return (pmd_t *)pfn_to_virt(pud_val(pud) >> _PAGE_PFN_SHIFT);
| ^~~~~~~~~~~
arch/riscv/include/asm/pgtable-64.h:111:16: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
111 | return (pmd_t *)pfn_to_virt(pud_val(pud) >> _PAGE_PFN_SHIFT);
| ^
arch/riscv/include/asm/pgtable-64.h: In function 'pud_page':
arch/riscv/include/asm/pgtable-64.h:116:16: error: implicit declaration of function 'pfn_to_page' [-Werror=implicit-function-declaration]
116 | return pfn_to_page(pud_val(pud) >> _PAGE_PFN_SHIFT);
| ^~~~~~~~~~~
arch/riscv/include/asm/pgtable-64.h:116:16: warning: returning 'int' from a function with return type 'struct page *' makes pointer from integer without a cast [-Wint-conversion]
116 | return pfn_to_page(pud_val(pud) >> _PAGE_PFN_SHIFT);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/riscv/include/asm/pgtable-64.h: At top level:
arch/riscv/include/asm/pgtable-64.h:139:48: error: unknown type name 'pgprot_t'
139 | static inline pmd_t pfn_pmd(unsigned long pfn, pgprot_t prot)
| ^~~~~~~~
arch/riscv/include/asm/pgtable-64.h:198:48: error: unknown type name 'pgprot_t'
198 | static inline p4d_t pfn_p4d(unsigned long pfn, pgprot_t prot)
| ^~~~~~~~
arch/riscv/include/asm/pgtable-64.h: In function 'p4d_pgtable':
arch/riscv/include/asm/pgtable-64.h:211:24: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
211 | return (pud_t *)pfn_to_virt(p4d_val(p4d) >> _PAGE_PFN_SHIFT);
| ^
arch/riscv/include/asm/pgtable-64.h: In function 'p4d_page':
arch/riscv/include/asm/pgtable-64.h:219:16: warning: returning 'int' from a function with return type 'struct page *' makes pointer from integer without a cast [-Wint-conversion]
219 | return pfn_to_page(p4d_val(p4d) >> _PAGE_PFN_SHIFT);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/riscv/include/asm/pgtable-64.h: In function 'pud_offset':
>> arch/riscv/include/asm/pgtable-64.h:56:26: error: 'PAGE_SIZE' undeclared (first use in this function); did you mean 'P4D_SIZE'?
56 | #define PTRS_PER_PUD (PAGE_SIZE / sizeof(pud_t))
| ^~~~~~~~~
arch/riscv/include/asm/pgtable-64.h:222:51: note: in expansion of macro 'PTRS_PER_PUD'
222 | #define pud_index(addr) (((addr) >> PUD_SHIFT) & (PTRS_PER_PUD - 1))
| ^~~~~~~~~~~~
arch/riscv/include/asm/pgtable-64.h:228:44: note: in expansion of macro 'pud_index'
228 | return p4d_pgtable(*p4d) + pud_index(address);
| ^~~~~~~~~
arch/riscv/include/asm/pgtable-64.h:56:26: note: each undeclared identifier is reported only once for each function it appears in
56 | #define PTRS_PER_PUD (PAGE_SIZE / sizeof(pud_t))
| ^~~~~~~~~
arch/riscv/include/asm/pgtable-64.h:222:51: note: in expansion of macro 'PTRS_PER_PUD'
222 | #define pud_index(addr) (((addr) >> PUD_SHIFT) & (PTRS_PER_PUD - 1))
| ^~~~~~~~~~~~
arch/riscv/include/asm/pgtable-64.h:228:44: note: in expansion of macro 'pud_index'
228 | return p4d_pgtable(*p4d) + pud_index(address);
| ^~~~~~~~~
arch/riscv/include/asm/pgtable-64.h: At top level:
>> arch/riscv/include/asm/pgtable-64.h:233:28: error: unknown type name 'pgd_t'; did you mean 'pmd_t'?
233 | static inline void set_pgd(pgd_t *pgdp, pgd_t pgd)
| ^~~~~
| pmd_t
arch/riscv/include/asm/pgtable-64.h:233:41: error: unknown type name 'pgd_t'; did you mean 'pmd_t'?
233 | static inline void set_pgd(pgd_t *pgdp, pgd_t pgd)
| ^~~~~
| pmd_t
arch/riscv/include/asm/pgtable-64.h:241:28: error: unknown type name 'pgd_t'; did you mean 'pmd_t'?
241 | static inline int pgd_none(pgd_t pgd)
| ^~~~~
| pmd_t
arch/riscv/include/asm/pgtable-64.h:249:31: error: unknown type name 'pgd_t'; did you mean 'pmd_t'?
249 | static inline int pgd_present(pgd_t pgd)
| ^~~~~
| pmd_t
arch/riscv/include/asm/pgtable-64.h:257:27: error: unknown type name 'pgd_t'; did you mean 'pmd_t'?
257 | static inline int pgd_bad(pgd_t pgd)
| ^~~~~
| pmd_t
arch/riscv/include/asm/pgtable-64.h:265:30: error: unknown type name 'pgd_t'; did you mean 'pmd_t'?
265 | static inline void pgd_clear(pgd_t *pgd)
| ^~~~~
| pmd_t
arch/riscv/include/asm/pgtable-64.h:271:34: error: unknown type name 'pgd_t'; did you mean 'pmd_t'?
271 | static inline p4d_t *pgd_pgtable(pgd_t pgd)
| ^~~~~
| pmd_t
arch/riscv/include/asm/pgtable-64.h:280:37: error: unknown type name 'pgd_t'; did you mean 'pmd_t'?
280 | static inline struct page *pgd_page(pgd_t pgd)
| ^~~~~
| pmd_t
arch/riscv/include/asm/pgtable-64.h:289:33: error: unknown type name 'pgd_t'; did you mean 'pmd_t'?
289 | static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address)
| ^~~~~
| pmd_t
In file included from arch/riscv/include/asm/page.h:14,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:60,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:55,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
arch/riscv/include/asm/pgtable.h:130:9: error: unknown type name 'pte_t'
130 | pte_t *(*get_pte_virt)(phys_addr_t pa);
| ^~~~~
>> arch/riscv/include/asm/pgtable.h:750:38: error: 'PAGE_SIZE' undeclared here (not in a function); did you mean 'P4D_SIZE'?
750 | extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];
| ^~~~~~~~~
| P4D_SIZE
In file included from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
>> include/linux/spinlock.h:347:29: warning: conflicting types for 'spin_lock'; have 'void(spinlock_t *)' {aka 'void(struct spinlock *)'}
347 | static __always_inline void spin_lock(spinlock_t *lock)
| ^~~~~~~~~
include/linux/spinlock.h:347:29: error: static declaration of 'spin_lock' follows non-static declaration
In file included from include/linux/mm_types.h:19,
from arch/riscv/include/asm/tlbflush.h:10,
from arch/riscv/include/asm/pgtable.h:108,
from arch/riscv/include/asm/page.h:14,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:60,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:55,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/seqlock.h:890:9: note: previous implicit declaration of 'spin_lock' with type 'void(spinlock_t *)' {aka 'void(struct spinlock *)'}
890 | spin_lock(&sl->lock);
| ^~~~~~~~~
In file included from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
>> include/linux/spinlock.h:352:29: warning: conflicting types for 'spin_lock_bh'; have 'void(spinlock_t *)' {aka 'void(struct spinlock *)'}
352 | static __always_inline void spin_lock_bh(spinlock_t *lock)
| ^~~~~~~~~~~~
include/linux/spinlock.h:352:29: error: static declaration of 'spin_lock_bh' follows non-static declaration
In file included from include/linux/mm_types.h:19,
from arch/riscv/include/asm/tlbflush.h:10,
from arch/riscv/include/asm/pgtable.h:108,
from arch/riscv/include/asm/page.h:14,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:60,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:55,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/seqlock.h:916:9: note: previous implicit declaration of 'spin_lock_bh' with type 'void(spinlock_t *)' {aka 'void(struct spinlock *)'}
916 | spin_lock_bh(&sl->lock);
| ^~~~~~~~~~~~
In file included from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
>> include/linux/spinlock.h:372:29: warning: conflicting types for 'spin_lock_irq'; have 'void(spinlock_t *)' {aka 'void(struct spinlock *)'}
372 | static __always_inline void spin_lock_irq(spinlock_t *lock)
| ^~~~~~~~~~~~~
include/linux/spinlock.h:372:29: error: static declaration of 'spin_lock_irq' follows non-static declaration
In file included from include/linux/mm_types.h:19,
from arch/riscv/include/asm/tlbflush.h:10,
from arch/riscv/include/asm/pgtable.h:108,
from arch/riscv/include/asm/page.h:14,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:60,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:55,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/seqlock.h:943:9: note: previous implicit declaration of 'spin_lock_irq' with type 'void(spinlock_t *)' {aka 'void(struct spinlock *)'}
943 | spin_lock_irq(&sl->lock);
| ^~~~~~~~~~~~~
In file included from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
>> include/linux/spinlock.h:387:29: warning: conflicting types for 'spin_unlock'; have 'void(spinlock_t *)' {aka 'void(struct spinlock *)'}
387 | static __always_inline void spin_unlock(spinlock_t *lock)
| ^~~~~~~~~~~
include/linux/spinlock.h:387:29: error: static declaration of 'spin_unlock' follows non-static declaration
In file included from include/linux/mm_types.h:19,
from arch/riscv/include/asm/tlbflush.h:10,
from arch/riscv/include/asm/pgtable.h:108,
from arch/riscv/include/asm/page.h:14,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:60,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:55,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/seqlock.h:904:9: note: previous implicit declaration of 'spin_unlock' with type 'void(spinlock_t *)' {aka 'void(struct spinlock *)'}
904 | spin_unlock(&sl->lock);
| ^~~~~~~~~~~
In file included from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
>> include/linux/spinlock.h:392:29: warning: conflicting types for 'spin_unlock_bh'; have 'void(spinlock_t *)' {aka 'void(struct spinlock *)'}
392 | static __always_inline void spin_unlock_bh(spinlock_t *lock)
| ^~~~~~~~~~~~~~
include/linux/spinlock.h:392:29: error: static declaration of 'spin_unlock_bh' follows non-static declaration
In file included from include/linux/mm_types.h:19,
from arch/riscv/include/asm/tlbflush.h:10,
from arch/riscv/include/asm/pgtable.h:108,
from arch/riscv/include/asm/page.h:14,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:60,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:55,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/seqlock.h:931:9: note: previous implicit declaration of 'spin_unlock_bh' with type 'void(spinlock_t *)' {aka 'void(struct spinlock *)'}
931 | spin_unlock_bh(&sl->lock);
| ^~~~~~~~~~~~~~
In file included from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
>> include/linux/spinlock.h:397:29: warning: conflicting types for 'spin_unlock_irq'; have 'void(spinlock_t *)' {aka 'void(struct spinlock *)'}
397 | static __always_inline void spin_unlock_irq(spinlock_t *lock)
| ^~~~~~~~~~~~~~~
include/linux/spinlock.h:397:29: error: static declaration of 'spin_unlock_irq' follows non-static declaration
In file included from include/linux/mm_types.h:19,
from arch/riscv/include/asm/tlbflush.h:10,
from arch/riscv/include/asm/pgtable.h:108,
from arch/riscv/include/asm/page.h:14,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:60,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:55,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/seqlock.h:957:9: note: previous implicit declaration of 'spin_unlock_irq' with type 'void(spinlock_t *)' {aka 'void(struct spinlock *)'}
957 | spin_unlock_irq(&sl->lock);
| ^~~~~~~~~~~~~~~
In file included from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/spinlock.h:402:29: warning: conflicting types for 'spin_unlock_irqrestore'; have 'void(spinlock_t *, long unsigned int)' {aka 'void(struct spinlock *, long unsigned int)'}
402 | static __always_inline void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags)
| ^~~~~~~~~~~~~~~~~~~~~~
include/linux/spinlock.h:402:29: error: static declaration of 'spin_unlock_irqrestore' follows non-static declaration
In file included from include/linux/mm_types.h:19,
from arch/riscv/include/asm/tlbflush.h:10,
from arch/riscv/include/asm/pgtable.h:108,
from arch/riscv/include/asm/page.h:14,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:60,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:55,
from include/linux/mmzone.h:8,
from include/linux/gfp.h:6,
from include/linux/mm.h:7,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/seqlock.h:995:9: note: previous implicit declaration of 'spin_unlock_irqrestore' with type 'void(spinlock_t *, long unsigned int)' {aka 'void(struct spinlock *, long unsigned int)'}
995 | spin_unlock_irqrestore(&sl->lock, flags);
| ^~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/mm.h:700,
from arch/riscv/kernel/asm-offsets.c:10:
include/linux/huge_mm.h: In function 'vmf_insert_pfn_pmd':
include/linux/huge_mm.h:58:58: error: incompatible type for argument 3 of 'vmf_insert_pfn_pmd_prot'
58 | return vmf_insert_pfn_pmd_prot(vmf, pfn, vmf->vma->vm_page_prot, write);
| ~~~~~~~~^~~~~~~~~~~~~~
| |
| int
include/linux/huge_mm.h:42:45: note: expected 'pgprot_t' but argument is of type 'int'
42 | pgprot_t pgprot, bool write);
| ~~~~~~~~~^~~~~~
include/linux/huge_mm.h: In function 'vmf_insert_pfn_pud':
include/linux/huge_mm.h:77:58: error: incompatible type for argument 3 of 'vmf_insert_pfn_pud_prot'
77 | return vmf_insert_pfn_pud_prot(vmf, pfn, vmf->vma->vm_page_prot, write);
| ~~~~~~~~^~~~~~~~~~~~~~
| |
| int
include/linux/huge_mm.h:61:45: note: expected 'pgprot_t' but argument is of type 'int'
61 | pgprot_t pgprot, bool write);
| ~~~~~~~~~^~~~~~
In file included from arch/riscv/kernel/asm-offsets.c:10:
include/linux/mm.h: In function 'vma_set_page_prot':
include/linux/mm.h:2853:29: error: incompatible types when assigning to type 'int' from type 'pgprot_t'
2853 | vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
| ^~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:120: arch/riscv/kernel/asm-offsets.s] Error 1
make[2]: Target '__build' not remade because of errors.
make[1]: *** [Makefile:1194: prepare0] Error 2
make[1]: Target 'prepare' not remade because of errors.
make: *** [Makefile:219: __sub-make] Error 2
make: Target 'prepare' not remade because of errors.
vim +56 arch/riscv/include/asm/pgtable-64.h
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 53
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 54 #define pud_val(x) ((x).pud)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 55 #define __pud(x) ((pud_t) { (x) })
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 @56 #define PTRS_PER_PUD (PAGE_SIZE / sizeof(pud_t))
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 57
07037db5d479f9 Palmer Dabbelt 2017-07-10 58 /* Page Middle Directory entry */
07037db5d479f9 Palmer Dabbelt 2017-07-10 59 typedef struct {
07037db5d479f9 Palmer Dabbelt 2017-07-10 60 unsigned long pmd;
07037db5d479f9 Palmer Dabbelt 2017-07-10 61 } pmd_t;
07037db5d479f9 Palmer Dabbelt 2017-07-10 62
07037db5d479f9 Palmer Dabbelt 2017-07-10 63 #define pmd_val(x) ((x).pmd)
07037db5d479f9 Palmer Dabbelt 2017-07-10 64 #define __pmd(x) ((pmd_t) { (x) })
07037db5d479f9 Palmer Dabbelt 2017-07-10 65
07037db5d479f9 Palmer Dabbelt 2017-07-10 66 #define PTRS_PER_PMD (PAGE_SIZE / sizeof(pmd_t))
07037db5d479f9 Palmer Dabbelt 2017-07-10 67
07037db5d479f9 Palmer Dabbelt 2017-07-10 68 static inline int pud_present(pud_t pud)
07037db5d479f9 Palmer Dabbelt 2017-07-10 69 {
07037db5d479f9 Palmer Dabbelt 2017-07-10 70 return (pud_val(pud) & _PAGE_PRESENT);
07037db5d479f9 Palmer Dabbelt 2017-07-10 71 }
07037db5d479f9 Palmer Dabbelt 2017-07-10 72
07037db5d479f9 Palmer Dabbelt 2017-07-10 73 static inline int pud_none(pud_t pud)
07037db5d479f9 Palmer Dabbelt 2017-07-10 74 {
07037db5d479f9 Palmer Dabbelt 2017-07-10 75 return (pud_val(pud) == 0);
07037db5d479f9 Palmer Dabbelt 2017-07-10 76 }
07037db5d479f9 Palmer Dabbelt 2017-07-10 77
07037db5d479f9 Palmer Dabbelt 2017-07-10 78 static inline int pud_bad(pud_t pud)
07037db5d479f9 Palmer Dabbelt 2017-07-10 79 {
07037db5d479f9 Palmer Dabbelt 2017-07-10 80 return !pud_present(pud);
07037db5d479f9 Palmer Dabbelt 2017-07-10 81 }
07037db5d479f9 Palmer Dabbelt 2017-07-10 82
af6513ead0462c Steven Price 2020-02-03 83 #define pud_leaf pud_leaf
af6513ead0462c Steven Price 2020-02-03 84 static inline int pud_leaf(pud_t pud)
af6513ead0462c Steven Price 2020-02-03 85 {
f5397c3ee0a3e2 Nanyong Sun 2021-04-30 86 return pud_present(pud) && (pud_val(pud) & _PAGE_LEAF);
af6513ead0462c Steven Price 2020-02-03 87 }
af6513ead0462c Steven Price 2020-02-03 88
07037db5d479f9 Palmer Dabbelt 2017-07-10 89 static inline void set_pud(pud_t *pudp, pud_t pud)
07037db5d479f9 Palmer Dabbelt 2017-07-10 90 {
07037db5d479f9 Palmer Dabbelt 2017-07-10 91 *pudp = pud;
07037db5d479f9 Palmer Dabbelt 2017-07-10 92 }
07037db5d479f9 Palmer Dabbelt 2017-07-10 93
07037db5d479f9 Palmer Dabbelt 2017-07-10 94 static inline void pud_clear(pud_t *pudp)
07037db5d479f9 Palmer Dabbelt 2017-07-10 95 {
07037db5d479f9 Palmer Dabbelt 2017-07-10 96 set_pud(pudp, __pud(0));
07037db5d479f9 Palmer Dabbelt 2017-07-10 97 }
07037db5d479f9 Palmer Dabbelt 2017-07-10 98
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 99 static inline pud_t pfn_pud(unsigned long pfn, pgprot_t prot)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 100 {
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 101 return __pud((pfn << _PAGE_PFN_SHIFT) | pgprot_val(prot));
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 102 }
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 103
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 104 static inline unsigned long _pud_pfn(pud_t pud)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 105 {
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 106 return pud_val(pud) >> _PAGE_PFN_SHIFT;
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 107 }
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 108
9cf6fa24584431 Aneesh Kumar K.V 2021-07-07 109 static inline pmd_t *pud_pgtable(pud_t pud)
07037db5d479f9 Palmer Dabbelt 2017-07-10 110 {
9cf6fa24584431 Aneesh Kumar K.V 2021-07-07 111 return (pmd_t *)pfn_to_virt(pud_val(pud) >> _PAGE_PFN_SHIFT);
07037db5d479f9 Palmer Dabbelt 2017-07-10 112 }
07037db5d479f9 Palmer Dabbelt 2017-07-10 113
8ad8b72721d0f0 Nick Hu 2020-01-06 114 static inline struct page *pud_page(pud_t pud)
8ad8b72721d0f0 Nick Hu 2020-01-06 115 {
8ad8b72721d0f0 Nick Hu 2020-01-06 116 return pfn_to_page(pud_val(pud) >> _PAGE_PFN_SHIFT);
8ad8b72721d0f0 Nick Hu 2020-01-06 117 }
8ad8b72721d0f0 Nick Hu 2020-01-06 118
d10efa21a93748 Qinglin Pan 2022-01-27 119 #define mm_p4d_folded mm_p4d_folded
d10efa21a93748 Qinglin Pan 2022-01-27 120 static inline bool mm_p4d_folded(struct mm_struct *mm)
d10efa21a93748 Qinglin Pan 2022-01-27 121 {
d10efa21a93748 Qinglin Pan 2022-01-27 122 if (pgtable_l5_enabled)
d10efa21a93748 Qinglin Pan 2022-01-27 123 return false;
d10efa21a93748 Qinglin Pan 2022-01-27 124
d10efa21a93748 Qinglin Pan 2022-01-27 125 return true;
d10efa21a93748 Qinglin Pan 2022-01-27 126 }
d10efa21a93748 Qinglin Pan 2022-01-27 127
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 128 #define mm_pud_folded mm_pud_folded
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 129 static inline bool mm_pud_folded(struct mm_struct *mm)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 130 {
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 131 if (pgtable_l4_enabled)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 132 return false;
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 133
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 134 return true;
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 135 }
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 136
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 137 #define pmd_index(addr) (((addr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 138
07037db5d479f9 Palmer Dabbelt 2017-07-10 139 static inline pmd_t pfn_pmd(unsigned long pfn, pgprot_t prot)
07037db5d479f9 Palmer Dabbelt 2017-07-10 140 {
07037db5d479f9 Palmer Dabbelt 2017-07-10 141 return __pmd((pfn << _PAGE_PFN_SHIFT) | pgprot_val(prot));
07037db5d479f9 Palmer Dabbelt 2017-07-10 142 }
07037db5d479f9 Palmer Dabbelt 2017-07-10 143
671f9a3e2e24cd Anup Patel 2019-06-28 144 static inline unsigned long _pmd_pfn(pmd_t pmd)
671f9a3e2e24cd Anup Patel 2019-06-28 145 {
671f9a3e2e24cd Anup Patel 2019-06-28 146 return pmd_val(pmd) >> _PAGE_PFN_SHIFT;
671f9a3e2e24cd Anup Patel 2019-06-28 147 }
671f9a3e2e24cd Anup Patel 2019-06-28 148
9eb4fcff220790 Nanyong Sun 2021-06-17 149 #define mk_pmd(page, prot) pfn_pmd(page_to_pfn(page), prot)
9eb4fcff220790 Nanyong Sun 2021-06-17 150
07037db5d479f9 Palmer Dabbelt 2017-07-10 151 #define pmd_ERROR(e) \
07037db5d479f9 Palmer Dabbelt 2017-07-10 152 pr_err("%s:%d: bad pmd %016lx.\n", __FILE__, __LINE__, pmd_val(e))
07037db5d479f9 Palmer Dabbelt 2017-07-10 153
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 154 #define pud_ERROR(e) \
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 155 pr_err("%s:%d: bad pud %016lx.\n", __FILE__, __LINE__, pud_val(e))
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 156
d10efa21a93748 Qinglin Pan 2022-01-27 157 #define p4d_ERROR(e) \
d10efa21a93748 Qinglin Pan 2022-01-27 158 pr_err("%s:%d: bad p4d %016lx.\n", __FILE__, __LINE__, p4d_val(e))
d10efa21a93748 Qinglin Pan 2022-01-27 159
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 160 static inline void set_p4d(p4d_t *p4dp, p4d_t p4d)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 161 {
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 162 if (pgtable_l4_enabled)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 163 *p4dp = p4d;
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 164 else
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 165 set_pud((pud_t *)p4dp, (pud_t){ p4d_val(p4d) });
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 166 }
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 167
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 168 static inline int p4d_none(p4d_t p4d)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 169 {
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 170 if (pgtable_l4_enabled)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 171 return (p4d_val(p4d) == 0);
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 172
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 173 return 0;
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 174 }
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 175
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 176 static inline int p4d_present(p4d_t p4d)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 177 {
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 178 if (pgtable_l4_enabled)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 179 return (p4d_val(p4d) & _PAGE_PRESENT);
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 180
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 181 return 1;
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 182 }
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 183
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 184 static inline int p4d_bad(p4d_t p4d)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 185 {
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 186 if (pgtable_l4_enabled)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 187 return !p4d_present(p4d);
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 188
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 189 return 0;
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 190 }
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 191
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 192 static inline void p4d_clear(p4d_t *p4d)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 193 {
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 194 if (pgtable_l4_enabled)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 195 set_p4d(p4d, __p4d(0));
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 196 }
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 197
d10efa21a93748 Qinglin Pan 2022-01-27 198 static inline p4d_t pfn_p4d(unsigned long pfn, pgprot_t prot)
d10efa21a93748 Qinglin Pan 2022-01-27 199 {
d10efa21a93748 Qinglin Pan 2022-01-27 200 return __p4d((pfn << _PAGE_PFN_SHIFT) | pgprot_val(prot));
d10efa21a93748 Qinglin Pan 2022-01-27 201 }
d10efa21a93748 Qinglin Pan 2022-01-27 202
d10efa21a93748 Qinglin Pan 2022-01-27 203 static inline unsigned long _p4d_pfn(p4d_t p4d)
d10efa21a93748 Qinglin Pan 2022-01-27 204 {
d10efa21a93748 Qinglin Pan 2022-01-27 205 return p4d_val(p4d) >> _PAGE_PFN_SHIFT;
d10efa21a93748 Qinglin Pan 2022-01-27 206 }
d10efa21a93748 Qinglin Pan 2022-01-27 207
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 208 static inline pud_t *p4d_pgtable(p4d_t p4d)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 209 {
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 210 if (pgtable_l4_enabled)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 211 return (pud_t *)pfn_to_virt(p4d_val(p4d) >> _PAGE_PFN_SHIFT);
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 212
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 213 return (pud_t *)pud_pgtable((pud_t) { p4d_val(p4d) });
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 214 }
d10efa21a93748 Qinglin Pan 2022-01-27 215 #define p4d_page_vaddr(p4d) ((unsigned long)p4d_pgtable(p4d))
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 216
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 217 static inline struct page *p4d_page(p4d_t p4d)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 218 {
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 219 return pfn_to_page(p4d_val(p4d) >> _PAGE_PFN_SHIFT);
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 220 }
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 221
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 222 #define pud_index(addr) (((addr) >> PUD_SHIFT) & (PTRS_PER_PUD - 1))
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 223
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 224 #define pud_offset pud_offset
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 225 static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 226 {
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 227 if (pgtable_l4_enabled)
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 228 return p4d_pgtable(*p4d) + pud_index(address);
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 229
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 230 return (pud_t *)p4d;
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 231 }
e8a62cc26ddf53 Alexandre Ghiti 2021-12-06 232
d10efa21a93748 Qinglin Pan 2022-01-27 @233 static inline void set_pgd(pgd_t *pgdp, pgd_t pgd)
d10efa21a93748 Qinglin Pan 2022-01-27 234 {
d10efa21a93748 Qinglin Pan 2022-01-27 235 if (pgtable_l5_enabled)
d10efa21a93748 Qinglin Pan 2022-01-27 236 *pgdp = pgd;
d10efa21a93748 Qinglin Pan 2022-01-27 237 else
d10efa21a93748 Qinglin Pan 2022-01-27 238 set_p4d((p4d_t *)pgdp, (p4d_t){ pgd_val(pgd) });
d10efa21a93748 Qinglin Pan 2022-01-27 239 }
d10efa21a93748 Qinglin Pan 2022-01-27 240
:::::: The code at line 56 was first introduced by commit
:::::: e8a62cc26ddf53a3c6ba2a8d33036cf7b84f3923 riscv: Implement sv48 support
:::::: TO: Alexandre Ghiti <alexandre.ghiti@xxxxxxxxxxxxx>
:::::: CC: Palmer Dabbelt <palmer@xxxxxxxxxxxx>
--
0-DAY CI Kernel Test Service
https://01.org/lkp